From e7bced9b863cdffdd163df3f1a412d22933e113d Mon Sep 17 00:00:00 2001 From: Gianmarcozap Date: Sat, 1 Aug 2026 22:35:21 -0500 Subject: [PATCH] feat: add contributors webpage (#1580) --- .eleventy.js | 9 + _data/contributors.json | 242 + _site/AGENTS/index.html | 3 + _site/CLAUDE/index.html | 1 + _site/CODE_OF_CONDUCT/index.html | 38 + _site/CONTRIBUTING/index.html | 159 + _site/EMOJI/AGENTS/index.html | 3 + _site/EMOJI/CLAUDE/index.html | 1 + _site/EMOJI/CODE_OF_CONDUCT/index.html | 38 + _site/EMOJI/CONTRIBUTING/index.html | 92 + _site/EMOJI/EMOJI/index.html | 412 + _site/EMOJI/MISSION-STATEMENT/index.html | 4 + _site/EMOJI/README/index.html | 29 + _site/EMOJI/SECURITY/index.html | 19 + _site/EMOJI/index.html | 412 + _site/MISSION-STATEMENT/index.html | 4 + _site/README/index.html | 29 + _site/SECURITY/index.html | 19 + _site/contributors/index.html | 586 ++ _site/docs/butter/index.html | 238 + _site/docs/index.html | 133 + _site/img/generic.jpg | Bin 0 -> 563306 bytes _site/img/grumpy.jpg | Bin 0 -> 458803 bytes _site/img/hero.jpg | Bin 0 -> 744947 bytes _site/img/mischievous.jpg | Bin 0 -> 486005 bytes _site/img/smart.jpg | Bin 0 -> 445901 bytes _site/recipes/OrangePeelSoup/index.html | 50 + _site/src/bastion/README/index.html | 28 + _site/src/recipes/banana_pudding/index.html | 6 + contributors.html | 99 + generate_data.py | 30 + img/generic.jpg | Bin 0 -> 563306 bytes img/grumpy.jpg | Bin 0 -> 458803 bytes img/hero.jpg | Bin 0 -> 744947 bytes img/mischievous.jpg | Bin 0 -> 486005 bytes img/smart.jpg | Bin 0 -> 445901 bytes node_modules/.bin/acorn | 16 + node_modules/.bin/acorn.cmd | 17 + node_modules/.bin/acorn.ps1 | 28 + node_modules/.bin/eleventy | 16 + node_modules/.bin/eleventy-dev-server | 16 + node_modules/.bin/eleventy-dev-server.cmd | 17 + node_modules/.bin/eleventy-dev-server.ps1 | 28 + node_modules/.bin/eleventy.cmd | 17 + node_modules/.bin/eleventy.ps1 | 28 + node_modules/.bin/errno | 16 + node_modules/.bin/errno.cmd | 17 + node_modules/.bin/errno.ps1 | 28 + node_modules/.bin/esparse | 16 + node_modules/.bin/esparse.cmd | 17 + node_modules/.bin/esparse.ps1 | 28 + node_modules/.bin/esvalidate | 16 + node_modules/.bin/esvalidate.cmd | 17 + node_modules/.bin/esvalidate.ps1 | 28 + node_modules/.bin/js-yaml | 16 + node_modules/.bin/js-yaml.cmd | 17 + node_modules/.bin/js-yaml.ps1 | 28 + node_modules/.bin/liquid | 16 + node_modules/.bin/liquid.cmd | 17 + node_modules/.bin/liquid.ps1 | 28 + node_modules/.bin/liquidjs | 16 + node_modules/.bin/liquidjs.cmd | 17 + node_modules/.bin/liquidjs.ps1 | 28 + node_modules/.bin/markdown-it | 16 + node_modules/.bin/markdown-it.cmd | 17 + node_modules/.bin/markdown-it.ps1 | 28 + node_modules/.bin/mime | 16 + node_modules/.bin/mime.cmd | 17 + node_modules/.bin/mime.ps1 | 28 + node_modules/.bin/nunjucks-precompile | 16 + node_modules/.bin/nunjucks-precompile.cmd | 17 + node_modules/.bin/nunjucks-precompile.ps1 | 28 + node_modules/.bin/semver | 16 + node_modules/.bin/semver.cmd | 17 + node_modules/.bin/semver.ps1 | 28 + node_modules/.package-lock.json | 1534 +++ .../@11ty/dependency-tree-esm/LICENSE | 21 + .../@11ty/dependency-tree-esm/README.md | 53 + .../@11ty/dependency-tree-esm/main.js | 173 + .../@11ty/dependency-tree-esm/package.json | 26 + node_modules/@11ty/dependency-tree/LICENSE | 21 + node_modules/@11ty/dependency-tree/README.md | 109 + node_modules/@11ty/dependency-tree/main.js | 157 + .../@11ty/dependency-tree/package.json | 42 + .../@11ty/eleventy-dev-server/README.md | 60 + node_modules/@11ty/eleventy-dev-server/cli.js | 89 + .../client/reload-client.js | 336 + node_modules/@11ty/eleventy-dev-server/cmd.js | 77 + .../@11ty/eleventy-dev-server/package.json | 57 + .../@11ty/eleventy-dev-server/server.js | 1024 ++ .../eleventy-dev-server/server/ipAddress.js | 9 + .../server/wrapResponse.js | 130 + .../@11ty/eleventy-plugin-bundle/README.md | 337 + .../eleventy-plugin-bundle/eleventy.bundle.js | 72 + .../@11ty/eleventy-plugin-bundle/package.json | 62 + .../src/BundleFileOutput.js | 75 + .../eleventy-plugin-bundle/src/CodeManager.js | 231 + .../src/OutOfOrderRender.js | 158 + .../src/bundlePlucker.js | 69 + .../src/eleventy.bundleManagers.js | 85 + .../src/eleventy.pruneEmptyBundles.js | 105 + .../src/eleventy.shortcodes.js | 83 + node_modules/@11ty/eleventy-utils/LICENSE | 21 + node_modules/@11ty/eleventy-utils/README.md | 27 + node_modules/@11ty/eleventy-utils/index.js | 20 + .../@11ty/eleventy-utils/package.json | 42 + .../@11ty/eleventy-utils/src/Buffer.js | 10 + .../@11ty/eleventy-utils/src/CreateHash.js | 27 + .../@11ty/eleventy-utils/src/DateCompare.js | 41 + .../@11ty/eleventy-utils/src/HashTypes.js | 158 + .../@11ty/eleventy-utils/src/IsPlainObject.js | 24 + .../@11ty/eleventy-utils/src/Merge.js | 84 + .../@11ty/eleventy-utils/src/TemplatePath.js | 373 + node_modules/@11ty/eleventy-utils/src/Url.js | 13 + .../@11ty/eleventy-utils/src/lib-sha256.js | 113 + .../@11ty/eleventy/CODE_OF_CONDUCT.md | 48 + node_modules/@11ty/eleventy/LICENSE | 21 + node_modules/@11ty/eleventy/README.md | 47 + node_modules/@11ty/eleventy/SECURITY.md | 9 + node_modules/@11ty/eleventy/cmd.cjs | 155 + node_modules/@11ty/eleventy/package.json | 166 + .../@11ty/eleventy/src/Benchmark/Benchmark.js | 55 + .../eleventy/src/Benchmark/BenchmarkGroup.js | 135 + .../src/Benchmark/BenchmarkManager.js | 73 + .../@11ty/eleventy/src/Data/ComputedData.js | 122 + .../eleventy/src/Data/ComputedDataProxy.js | 131 + .../eleventy/src/Data/ComputedDataQueue.js | 64 + .../src/Data/ComputedDataTemplateString.js | 70 + .../@11ty/eleventy/src/Data/TemplateData.js | 710 ++ .../src/Data/TemplateDataInitialGlobalData.js | 40 + node_modules/@11ty/eleventy/src/Eleventy.js | 1565 +++ .../@11ty/eleventy/src/EleventyCommonJs.cjs | 43 + .../eleventy/src/EleventyExtensionMap.js | 284 + .../@11ty/eleventy/src/EleventyFiles.js | 521 + .../@11ty/eleventy/src/EleventyServe.js | 321 + .../@11ty/eleventy/src/EleventyWatch.js | 131 + .../eleventy/src/EleventyWatchTargets.js | 164 + .../@11ty/eleventy/src/Engines/Custom.js | 339 + .../src/Engines/FrontMatter/JavaScript.js | 34 + .../@11ty/eleventy/src/Engines/Html.js | 33 + .../@11ty/eleventy/src/Engines/JavaScript.js | 240 + .../@11ty/eleventy/src/Engines/Liquid.js | 331 + .../@11ty/eleventy/src/Engines/Markdown.js | 100 + .../@11ty/eleventy/src/Engines/Nunjucks.js | 482 + .../eleventy/src/Engines/TemplateEngine.js | 206 + .../src/Engines/TemplateEngineManager.js | 193 + .../src/Engines/Util/ContextAugmenter.js | 67 + .../Errors/DuplicatePermalinkOutputError.js | 9 + .../eleventy/src/Errors/EleventyBaseError.js | 24 + .../src/Errors/EleventyErrorHandler.js | 152 + .../eleventy/src/Errors/EleventyErrorUtil.js | 70 + .../TemplateContentPrematureUseError.js | 5 + .../TemplateContentUnrenderedTemplateError.js | 5 + ...ngCircularTemplateContentReferenceError.js | 5 + node_modules/@11ty/eleventy/src/EventBus.js | 23 + .../@11ty/eleventy/src/FileSystemSearch.js | 129 + .../eleventy/src/Filters/GetCollectionItem.js | 20 + .../src/Filters/GetCollectionItemIndex.js | 17 + .../src/Filters/GetLocaleCollectionItem.js | 47 + .../@11ty/eleventy/src/Filters/Slug.js | 14 + .../@11ty/eleventy/src/Filters/Slugify.js | 14 + .../@11ty/eleventy/src/Filters/Url.js | 35 + .../@11ty/eleventy/src/GlobalDependencyMap.js | 463 + .../@11ty/eleventy/src/LayoutCache.js | 98 + .../eleventy/src/Plugins/HtmlBasePlugin.js | 160 + .../src/Plugins/HtmlRelativeCopyPlugin.js | 52 + .../@11ty/eleventy/src/Plugins/I18nPlugin.js | 317 + .../eleventy/src/Plugins/IdAttributePlugin.js | 110 + .../eleventy/src/Plugins/InputPathToUrl.js | 191 + .../@11ty/eleventy/src/Plugins/Pagination.js | 379 + .../eleventy/src/Plugins/RenderPlugin.js | 520 + node_modules/@11ty/eleventy/src/Template.js | 1200 +++ .../@11ty/eleventy/src/TemplateBehavior.js | 85 + .../@11ty/eleventy/src/TemplateCollection.js | 77 + .../@11ty/eleventy/src/TemplateConfig.js | 565 + .../@11ty/eleventy/src/TemplateContent.js | 748 ++ .../@11ty/eleventy/src/TemplateFileSlug.js | 57 + .../@11ty/eleventy/src/TemplateGlob.js | 35 + .../@11ty/eleventy/src/TemplateLayout.js | 240 + .../src/TemplateLayoutPathResolver.js | 136 + .../@11ty/eleventy/src/TemplateMap.js | 684 ++ .../@11ty/eleventy/src/TemplatePassthrough.js | 389 + .../src/TemplatePassthroughManager.js | 368 + .../@11ty/eleventy/src/TemplatePermalink.js | 195 + .../@11ty/eleventy/src/TemplateRender.js | 292 + .../@11ty/eleventy/src/TemplateWriter.js | 508 + node_modules/@11ty/eleventy/src/UserConfig.js | 1339 +++ .../@11ty/eleventy/src/Util/ArrayUtil.js | 24 + .../eleventy/src/Util/AsyncEventEmitter.js | 88 + .../@11ty/eleventy/src/Util/Compatibility.js | 59 + .../@11ty/eleventy/src/Util/ConsoleLogger.js | 140 + .../eleventy/src/Util/DateGitFirstAdded.js | 23 + .../eleventy/src/Util/DateGitLastUpdated.js | 23 + .../@11ty/eleventy/src/Util/DirContains.js | 10 + .../@11ty/eleventy/src/Util/EsmResolver.js | 58 + .../src/Util/EsmResolverPortAdapter.js | 41 + .../@11ty/eleventy/src/Util/EventBusUtil.js | 14 + .../@11ty/eleventy/src/Util/ExistsCache.js | 62 + .../@11ty/eleventy/src/Util/FilePathUtil.js | 19 + .../eleventy/src/Util/FileSystemManager.js | 48 + .../eleventy/src/Util/GetJavaScriptData.js | 30 + .../@11ty/eleventy/src/Util/GlobMatcher.js | 22 + .../@11ty/eleventy/src/Util/GlobRemap.js | 85 + .../eleventy/src/Util/HtmlRelativeCopy.js | 149 + .../eleventy/src/Util/HtmlTransformer.js | 172 + .../@11ty/eleventy/src/Util/ImportJsonSync.js | 77 + .../eleventy/src/Util/IsAsyncFunction.js | 5 + .../src/Util/JavaScriptDependencies.js | 55 + .../eleventy/src/Util/MemoizeFunction.js | 26 + .../eleventy/src/Util/Objects/DeepFreeze.js | 20 + .../eleventy/src/Util/Objects/ObjectFilter.js | 9 + .../eleventy/src/Util/Objects/ProxyWrap.js | 118 + .../src/Util/Objects/SampleModule.mjs | 1 + .../eleventy/src/Util/Objects/Sortable.js | 136 + .../@11ty/eleventy/src/Util/Objects/Unique.js | 3 + .../src/Util/PassthroughCopyBehaviorCheck.js | 16 + .../@11ty/eleventy/src/Util/PathNormalizer.js | 58 + .../@11ty/eleventy/src/Util/PathPrefixer.js | 21 + .../@11ty/eleventy/src/Util/Pluralize.js | 3 + .../eleventy/src/Util/ProjectDirectories.js | 369 + .../src/Util/ProjectTemplateFormats.js | 134 + .../@11ty/eleventy/src/Util/PromiseUtil.js | 15 + .../@11ty/eleventy/src/Util/Require.js | 239 + .../@11ty/eleventy/src/Util/ReservedData.js | 69 + .../@11ty/eleventy/src/Util/SetUnion.js | 11 + .../@11ty/eleventy/src/Util/SpawnAsync.js | 29 + .../eleventy/src/Util/TemplateDepGraph.js | 160 + .../@11ty/eleventy/src/Util/TransformsUtil.js | 70 + .../@11ty/eleventy/src/Util/ValidUrl.js | 9 + .../@11ty/eleventy/src/defaultConfig.js | 178 + node_modules/@11ty/eleventy/tsconfig.json | 117 + node_modules/@11ty/lodash-custom/README.md | 14 + .../@11ty/lodash-custom/lodash.custom.js | 1704 +++ node_modules/@11ty/lodash-custom/package.json | 38 + node_modules/@11ty/posthtml-urls/LICENSE | 21 + node_modules/@11ty/posthtml-urls/README.md | 48 + .../@11ty/posthtml-urls/lib/defaultOptions.js | 37 + node_modules/@11ty/posthtml-urls/lib/index.js | 146 + node_modules/@11ty/posthtml-urls/package.json | 47 + node_modules/@11ty/recursive-copy/README.md | 201 + node_modules/@11ty/recursive-copy/index.d.ts | 117 + node_modules/@11ty/recursive-copy/index.js | 3 + node_modules/@11ty/recursive-copy/lib/copy.js | 436 + .../@11ty/recursive-copy/lib/maximatch.js | 69 + .../@11ty/recursive-copy/package.json | 72 + node_modules/@sindresorhus/slugify/index.d.ts | 246 + node_modules/@sindresorhus/slugify/index.js | 127 + node_modules/@sindresorhus/slugify/license | 9 + .../slugify/overridable-replacements.js | 7 + .../@sindresorhus/slugify/package.json | 59 + node_modules/@sindresorhus/slugify/readme.md | 273 + .../@sindresorhus/transliterate/index.d.ts | 48 + .../@sindresorhus/transliterate/index.js | 33 + .../@sindresorhus/transliterate/license | 9 + .../@sindresorhus/transliterate/package.json | 47 + .../@sindresorhus/transliterate/readme.md | 103 + .../transliterate/replacements.js | 2056 ++++ node_modules/a-sync-waterfall/LICENSE | 21 + node_modules/a-sync-waterfall/README.md | 95 + node_modules/a-sync-waterfall/index.js | 83 + node_modules/a-sync-waterfall/package.json | 21 + node_modules/a-sync-waterfall/test.js | 77 + node_modules/acorn-walk/CHANGELOG.md | 209 + node_modules/acorn-walk/LICENSE | 21 + node_modules/acorn-walk/README.md | 124 + node_modules/acorn-walk/dist/walk.d.mts | 152 + node_modules/acorn-walk/dist/walk.d.ts | 152 + node_modules/acorn-walk/dist/walk.js | 485 + node_modules/acorn-walk/dist/walk.mjs | 467 + node_modules/acorn-walk/package.json | 50 + node_modules/acorn/CHANGELOG.md | 998 ++ node_modules/acorn/LICENSE | 21 + node_modules/acorn/README.md | 309 + node_modules/acorn/bin/acorn | 4 + node_modules/acorn/dist/acorn.d.mts | 897 ++ node_modules/acorn/dist/acorn.d.ts | 897 ++ node_modules/acorn/dist/acorn.js | 6342 +++++++++++ node_modules/acorn/dist/acorn.mjs | 6313 +++++++++++ node_modules/acorn/dist/bin.js | 90 + node_modules/acorn/package.json | 50 + node_modules/anymatch/LICENSE | 15 + node_modules/anymatch/README.md | 87 + node_modules/anymatch/index.d.ts | 20 + node_modules/anymatch/index.js | 104 + .../anymatch/node_modules/picomatch/LICENSE | 21 + .../anymatch/node_modules/picomatch/README.md | 716 ++ .../anymatch/node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 184 + .../node_modules/picomatch/lib/parse.js | 1392 +++ .../node_modules/picomatch/lib/picomatch.js | 342 + .../node_modules/picomatch/lib/scan.js | 391 + .../node_modules/picomatch/lib/utils.js | 64 + .../node_modules/picomatch/package.json | 81 + node_modules/anymatch/package.json | 48 + node_modules/argparse/CHANGELOG.md | 216 + node_modules/argparse/LICENSE | 254 + node_modules/argparse/README.md | 84 + node_modules/argparse/argparse.js | 3707 +++++++ node_modules/argparse/lib/sub.js | 67 + node_modules/argparse/lib/textwrap.js | 440 + node_modules/argparse/package.json | 31 + node_modules/asap/CHANGES.md | 70 + node_modules/asap/LICENSE.md | 21 + node_modules/asap/README.md | 237 + node_modules/asap/asap.js | 65 + node_modules/asap/browser-asap.js | 66 + node_modules/asap/browser-raw.js | 223 + node_modules/asap/package.json | 58 + node_modules/asap/raw.js | 101 + .../balanced-match/.github/FUNDING.yml | 2 + node_modules/balanced-match/LICENSE.md | 21 + node_modules/balanced-match/README.md | 97 + node_modules/balanced-match/index.js | 62 + node_modules/balanced-match/package.json | 48 + node_modules/bcp-47-match/index.d.ts | 47 + node_modules/bcp-47-match/index.js | 234 + node_modules/bcp-47-match/license | 22 + node_modules/bcp-47-match/package.json | 88 + node_modules/bcp-47-match/readme.md | 315 + node_modules/bcp-47-normalize/index.d.ts | 3 + node_modules/bcp-47-normalize/index.js | 6 + node_modules/bcp-47-normalize/lib/fields.d.ts | 24 + node_modules/bcp-47-normalize/lib/fields.js | 3217 ++++++ node_modules/bcp-47-normalize/lib/index.d.ts | 36 + node_modules/bcp-47-normalize/lib/index.js | 335 + node_modules/bcp-47-normalize/lib/likely.d.ts | 4 + node_modules/bcp-47-normalize/lib/likely.js | 8039 ++++++++++++++ node_modules/bcp-47-normalize/lib/many.d.ts | 10 + node_modules/bcp-47-normalize/lib/many.js | 95 + .../bcp-47-normalize/lib/matches.d.ts | 13 + node_modules/bcp-47-normalize/lib/matches.js | 1859 ++++ node_modules/bcp-47-normalize/license | 22 + node_modules/bcp-47-normalize/package.json | 91 + node_modules/bcp-47-normalize/readme.md | 207 + node_modules/bcp-47/index.d.ts | 7 + node_modules/bcp-47/index.d.ts.map | 1 + node_modules/bcp-47/index.js | 9 + node_modules/bcp-47/lib/normal.d.ts | 3 + node_modules/bcp-47/lib/normal.d.ts.map | 1 + node_modules/bcp-47/lib/normal.js | 29 + node_modules/bcp-47/lib/parse.d.ts | 142 + node_modules/bcp-47/lib/parse.d.ts.map | 1 + node_modules/bcp-47/lib/parse.js | 396 + node_modules/bcp-47/lib/regular.d.ts | 3 + node_modules/bcp-47/lib/regular.d.ts.map | 1 + node_modules/bcp-47/lib/regular.js | 12 + node_modules/bcp-47/lib/stringify.d.ts | 14 + node_modules/bcp-47/lib/stringify.d.ts.map | 1 + node_modules/bcp-47/lib/stringify.js | 53 + node_modules/bcp-47/license | 22 + node_modules/bcp-47/package.json | 76 + node_modules/bcp-47/readme.md | 345 + .../binary-extensions/binary-extensions.json | 263 + .../binary-extensions.json.d.ts | 3 + node_modules/binary-extensions/index.d.ts | 14 + node_modules/binary-extensions/index.js | 1 + node_modules/binary-extensions/license | 10 + node_modules/binary-extensions/package.json | 40 + node_modules/binary-extensions/readme.md | 25 + node_modules/brace-expansion/LICENSE | 21 + node_modules/brace-expansion/README.md | 151 + node_modules/brace-expansion/index.js | 382 + node_modules/brace-expansion/package.json | 50 + node_modules/braces/LICENSE | 21 + node_modules/braces/README.md | 586 ++ node_modules/braces/index.js | 170 + node_modules/braces/lib/compile.js | 60 + node_modules/braces/lib/constants.js | 57 + node_modules/braces/lib/expand.js | 113 + node_modules/braces/lib/parse.js | 331 + node_modules/braces/lib/stringify.js | 32 + node_modules/braces/lib/utils.js | 122 + node_modules/braces/package.json | 77 + node_modules/chokidar/LICENSE | 21 + node_modules/chokidar/README.md | 308 + node_modules/chokidar/index.js | 973 ++ node_modules/chokidar/lib/constants.js | 66 + node_modules/chokidar/lib/fsevents-handler.js | 526 + node_modules/chokidar/lib/nodefs-handler.js | 654 ++ node_modules/chokidar/package.json | 70 + node_modules/chokidar/types/index.d.ts | 192 + node_modules/commander/LICENSE | 22 + node_modules/commander/Readme.md | 1134 ++ node_modules/commander/esm.mjs | 16 + node_modules/commander/index.js | 27 + node_modules/commander/lib/argument.js | 147 + node_modules/commander/lib/command.js | 2179 ++++ node_modules/commander/lib/error.js | 45 + node_modules/commander/lib/help.js | 464 + node_modules/commander/lib/option.js | 331 + node_modules/commander/lib/suggestSimilar.js | 100 + node_modules/commander/package-support.json | 16 + node_modules/commander/package.json | 80 + node_modules/commander/typings/index.d.ts | 889 ++ node_modules/concat-map/.travis.yml | 4 + node_modules/concat-map/LICENSE | 18 + node_modules/concat-map/README.markdown | 62 + node_modules/concat-map/example/map.js | 6 + node_modules/concat-map/index.js | 13 + node_modules/concat-map/package.json | 43 + node_modules/concat-map/test/map.js | 39 + node_modules/debug/LICENSE | 20 + node_modules/debug/README.md | 481 + node_modules/debug/package.json | 64 + node_modules/debug/src/browser.js | 272 + node_modules/debug/src/common.js | 292 + node_modules/debug/src/index.js | 10 + node_modules/debug/src/node.js | 263 + node_modules/depd/History.md | 103 + node_modules/depd/LICENSE | 22 + node_modules/depd/Readme.md | 280 + node_modules/depd/index.js | 538 + node_modules/depd/lib/browser/index.js | 77 + node_modules/depd/package.json | 45 + .../.github/workflows/node.js.yml | 24 + node_modules/dependency-graph/CHANGELOG.md | 88 + node_modules/dependency-graph/LICENSE | 19 + node_modules/dependency-graph/README.md | 78 + .../dependency-graph/lib/dep_graph.js | 364 + node_modules/dependency-graph/lib/index.d.ts | 127 + node_modules/dependency-graph/package.json | 31 + .../dependency-graph/specs/dep_graph_spec.js | 567 + node_modules/dom-serializer/LICENSE | 11 + node_modules/dom-serializer/README.md | 97 + .../dom-serializer/lib/esm/foreignNames.d.ts | 3 + .../lib/esm/foreignNames.d.ts.map | 1 + .../dom-serializer/lib/esm/foreignNames.js | 100 + .../dom-serializer/lib/esm/index.d.ts | 52 + .../dom-serializer/lib/esm/index.d.ts.map | 1 + node_modules/dom-serializer/lib/esm/index.js | 190 + .../dom-serializer/lib/esm/package.json | 1 + .../dom-serializer/lib/foreignNames.d.ts | 3 + .../dom-serializer/lib/foreignNames.d.ts.map | 1 + .../dom-serializer/lib/foreignNames.js | 103 + node_modules/dom-serializer/lib/index.d.ts | 43 + .../dom-serializer/lib/index.d.ts.map | 1 + node_modules/dom-serializer/lib/index.js | 211 + .../node_modules/entities/LICENSE | 11 + .../node_modules/entities/lib/decode.d.ts | 5 + .../node_modules/entities/lib/decode.d.ts.map | 1 + .../node_modules/entities/lib/decode.js | 53 + .../entities/lib/decode_codepoint.d.ts | 2 + .../entities/lib/decode_codepoint.d.ts.map | 1 + .../entities/lib/decode_codepoint.js | 30 + .../node_modules/entities/lib/encode.d.ts | 47 + .../node_modules/entities/lib/encode.d.ts.map | 1 + .../node_modules/entities/lib/encode.js | 136 + .../node_modules/entities/lib/index.d.ts | 27 + .../node_modules/entities/lib/index.d.ts.map | 1 + .../node_modules/entities/lib/index.js | 57 + .../entities/lib/maps/decode.json | 1 + .../entities/lib/maps/entities.json | 1 + .../entities/lib/maps/legacy.json | 1 + .../node_modules/entities/lib/maps/xml.json | 1 + .../node_modules/entities/package.json | 64 + .../node_modules/entities/readme.md | 57 + node_modules/dom-serializer/package.json | 55 + node_modules/domelementtype/LICENSE | 11 + .../domelementtype/lib/esm/index.d.ts | 48 + .../domelementtype/lib/esm/index.d.ts.map | 1 + node_modules/domelementtype/lib/esm/index.js | 51 + .../domelementtype/lib/esm/package.json | 1 + node_modules/domelementtype/lib/index.d.ts | 48 + .../domelementtype/lib/index.d.ts.map | 1 + node_modules/domelementtype/lib/index.js | 55 + node_modules/domelementtype/package.json | 54 + node_modules/domelementtype/readme.md | 1 + node_modules/domhandler/LICENSE | 11 + node_modules/domhandler/lib/index.d.ts | 85 + node_modules/domhandler/lib/index.d.ts.map | 1 + node_modules/domhandler/lib/index.js | 176 + node_modules/domhandler/lib/node.d.ts | 237 + node_modules/domhandler/lib/node.d.ts.map | 1 + node_modules/domhandler/lib/node.js | 444 + node_modules/domhandler/package.json | 58 + node_modules/domhandler/readme.md | 163 + node_modules/domutils/LICENSE | 11 + node_modules/domutils/lib/feeds.d.ts | 45 + node_modules/domutils/lib/feeds.d.ts.map | 1 + node_modules/domutils/lib/feeds.js | 190 + node_modules/domutils/lib/helpers.d.ts | 51 + node_modules/domutils/lib/helpers.d.ts.map | 1 + node_modules/domutils/lib/helpers.js | 125 + node_modules/domutils/lib/index.d.ts | 10 + node_modules/domutils/lib/index.d.ts.map | 1 + node_modules/domutils/lib/index.js | 28 + node_modules/domutils/lib/legacy.d.ts | 47 + node_modules/domutils/lib/legacy.d.ts.map | 1 + node_modules/domutils/lib/legacy.js | 124 + node_modules/domutils/lib/manipulation.d.ts | 43 + .../domutils/lib/manipulation.d.ts.map | 1 + node_modules/domutils/lib/manipulation.js | 129 + node_modules/domutils/lib/querying.d.ts | 55 + node_modules/domutils/lib/querying.d.ts.map | 1 + node_modules/domutils/lib/querying.js | 126 + node_modules/domutils/lib/stringify.d.ts | 41 + node_modules/domutils/lib/stringify.d.ts.map | 1 + node_modules/domutils/lib/stringify.js | 86 + node_modules/domutils/lib/traversal.d.ts | 59 + node_modules/domutils/lib/traversal.d.ts.map | 1 + node_modules/domutils/lib/traversal.js | 117 + node_modules/domutils/package.json | 65 + node_modules/domutils/readme.md | 31 + node_modules/ee-first/LICENSE | 22 + node_modules/ee-first/README.md | 80 + node_modules/ee-first/index.js | 95 + node_modules/ee-first/package.json | 29 + node_modules/encodeurl/LICENSE | 22 + node_modules/encodeurl/README.md | 109 + node_modules/encodeurl/index.js | 60 + node_modules/encodeurl/package.json | 40 + node_modules/entities/LICENSE | 11 + node_modules/entities/decode.d.ts | 1 + node_modules/entities/decode.js | 3 + .../dist/commonjs/decode-codepoint.d.ts | 19 + .../dist/commonjs/decode-codepoint.d.ts.map | 1 + .../dist/commonjs/decode-codepoint.js | 77 + .../dist/commonjs/decode-codepoint.js.map | 1 + .../entities/dist/commonjs/decode.d.ts | 209 + .../entities/dist/commonjs/decode.d.ts.map | 1 + node_modules/entities/dist/commonjs/decode.js | 511 + .../entities/dist/commonjs/decode.js.map | 1 + .../entities/dist/commonjs/encode.d.ts | 22 + .../entities/dist/commonjs/encode.d.ts.map | 1 + node_modules/entities/dist/commonjs/encode.js | 73 + .../entities/dist/commonjs/encode.js.map | 1 + .../entities/dist/commonjs/escape.d.ts | 43 + .../entities/dist/commonjs/escape.d.ts.map | 1 + node_modules/entities/dist/commonjs/escape.js | 121 + .../entities/dist/commonjs/escape.js.map | 1 + .../commonjs/generated/decode-data-html.d.ts | 2 + .../generated/decode-data-html.d.ts.map | 1 + .../commonjs/generated/decode-data-html.js | 10 + .../generated/decode-data-html.js.map | 1 + .../commonjs/generated/decode-data-xml.d.ts | 2 + .../generated/decode-data-xml.d.ts.map | 1 + .../commonjs/generated/decode-data-xml.js | 10 + .../commonjs/generated/decode-data-xml.js.map | 1 + .../dist/commonjs/generated/encode-html.d.ts | 8 + .../commonjs/generated/encode-html.d.ts.map | 1 + .../dist/commonjs/generated/encode-html.js | 13 + .../commonjs/generated/encode-html.js.map | 1 + .../entities/dist/commonjs/index.d.ts | 96 + .../entities/dist/commonjs/index.d.ts.map | 1 + node_modules/entities/dist/commonjs/index.js | 131 + .../entities/dist/commonjs/index.js.map | 1 + .../entities/dist/commonjs/package.json | 3 + .../entities/dist/esm/decode-codepoint.d.ts | 19 + .../dist/esm/decode-codepoint.d.ts.map | 1 + .../entities/dist/esm/decode-codepoint.js | 72 + .../entities/dist/esm/decode-codepoint.js.map | 1 + node_modules/entities/dist/esm/decode.d.ts | 209 + .../entities/dist/esm/decode.d.ts.map | 1 + node_modules/entities/dist/esm/decode.js | 497 + node_modules/entities/dist/esm/decode.js.map | 1 + node_modules/entities/dist/esm/encode.d.ts | 22 + .../entities/dist/esm/encode.d.ts.map | 1 + node_modules/entities/dist/esm/encode.js | 69 + node_modules/entities/dist/esm/encode.js.map | 1 + node_modules/entities/dist/esm/escape.d.ts | 43 + .../entities/dist/esm/escape.d.ts.map | 1 + node_modules/entities/dist/esm/escape.js | 117 + node_modules/entities/dist/esm/escape.js.map | 1 + .../dist/esm/generated/decode-data-html.d.ts | 2 + .../esm/generated/decode-data-html.d.ts.map | 1 + .../dist/esm/generated/decode-data-html.js | 7 + .../esm/generated/decode-data-html.js.map | 1 + .../dist/esm/generated/decode-data-xml.d.ts | 2 + .../esm/generated/decode-data-xml.d.ts.map | 1 + .../dist/esm/generated/decode-data-xml.js | 7 + .../dist/esm/generated/decode-data-xml.js.map | 1 + .../dist/esm/generated/encode-html.d.ts | 8 + .../dist/esm/generated/encode-html.d.ts.map | 1 + .../dist/esm/generated/encode-html.js | 10 + .../dist/esm/generated/encode-html.js.map | 1 + node_modules/entities/dist/esm/index.d.ts | 96 + node_modules/entities/dist/esm/index.d.ts.map | 1 + node_modules/entities/dist/esm/index.js | 107 + node_modules/entities/dist/esm/index.js.map | 1 + node_modules/entities/dist/esm/package.json | 3 + node_modules/entities/escape.d.ts | 1 + node_modules/entities/escape.js | 3 + node_modules/entities/package.json | 118 + node_modules/entities/readme.md | 122 + node_modules/entities/src/decode-codepoint.ts | 81 + node_modules/entities/src/decode.spec.ts | 320 + node_modules/entities/src/decode.ts | 620 ++ node_modules/entities/src/encode.spec.ts | 78 + node_modules/entities/src/encode.ts | 77 + node_modules/entities/src/escape.spec.ts | 14 + node_modules/entities/src/escape.ts | 148 + .../entities/src/generated/.eslintrc.json | 10 + .../src/generated/decode-data-html.ts | 8 + .../entities/src/generated/decode-data-xml.ts | 8 + .../entities/src/generated/encode-html.ts | 17 + node_modules/entities/src/index.spec.ts | 125 + node_modules/entities/src/index.ts | 188 + node_modules/errno/.jshintrc | 59 + node_modules/errno/.travis.yml | 12 + node_modules/errno/README.md | 145 + node_modules/errno/build.js | 43 + node_modules/errno/cli.js | 22 + node_modules/errno/custom.js | 57 + node_modules/errno/errno.js | 313 + node_modules/errno/package.json | 33 + node_modules/errno/test.js | 88 + node_modules/escape-html/LICENSE | 24 + node_modules/escape-html/Readme.md | 43 + node_modules/escape-html/index.js | 78 + node_modules/escape-html/package.json | 24 + node_modules/escape-string-regexp/index.d.ts | 16 + node_modules/escape-string-regexp/index.js | 11 + node_modules/escape-string-regexp/license | 9 + .../escape-string-regexp/package.json | 40 + node_modules/escape-string-regexp/readme.md | 34 + node_modules/esm-import-transformer/README.md | 91 + .../import-transformer.js | 232 + .../esm-import-transformer/package.json | 26 + node_modules/esprima/ChangeLog | 235 + node_modules/esprima/LICENSE.BSD | 21 + node_modules/esprima/README.md | 46 + node_modules/esprima/bin/esparse.js | 139 + node_modules/esprima/bin/esvalidate.js | 236 + node_modules/esprima/dist/esprima.js | 6709 ++++++++++++ node_modules/esprima/package.json | 112 + node_modules/etag/HISTORY.md | 83 + node_modules/etag/LICENSE | 22 + node_modules/etag/README.md | 159 + node_modules/etag/index.js | 131 + node_modules/etag/package.json | 47 + node_modules/evaluate-value/LICENSE | 21 + node_modules/evaluate-value/README.md | 41 + node_modules/evaluate-value/index-es5.js | 17 + node_modules/evaluate-value/index-es5.js.map | 1 + node_modules/evaluate-value/index.js | 17 + node_modules/evaluate-value/package.json | 33 + node_modules/extend-shallow/LICENSE | 21 + node_modules/extend-shallow/README.md | 61 + node_modules/extend-shallow/index.js | 33 + node_modules/extend-shallow/package.json | 56 + node_modules/fdir/LICENSE | 7 + node_modules/fdir/README.md | 91 + node_modules/fdir/dist/index.cjs | 588 ++ node_modules/fdir/dist/index.d.cts | 155 + node_modules/fdir/dist/index.d.mts | 155 + node_modules/fdir/dist/index.mjs | 570 + node_modules/fdir/package.json | 103 + node_modules/filesize/LICENSE | 28 + node_modules/filesize/README.md | 113 + node_modules/filesize/dist/filesize.cjs | 238 + node_modules/filesize/dist/filesize.esm.js | 231 + node_modules/filesize/package.json | 60 + node_modules/filesize/types/filesize.d.ts | 56 + node_modules/fill-range/LICENSE | 21 + node_modules/fill-range/README.md | 237 + node_modules/fill-range/index.js | 248 + node_modules/fill-range/package.json | 74 + node_modules/finalhandler/HISTORY.md | 216 + node_modules/finalhandler/LICENSE | 22 + node_modules/finalhandler/README.md | 147 + node_modules/finalhandler/SECURITY.md | 25 + node_modules/finalhandler/index.js | 341 + .../node_modules/debug/.coveralls.yml | 1 + .../finalhandler/node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 362 + .../finalhandler/node_modules/debug/LICENSE | 19 + .../finalhandler/node_modules/debug/Makefile | 50 + .../finalhandler/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../finalhandler/node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 49 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/inspector-log.js | 15 + .../node_modules/debug/src/node.js | 248 + .../finalhandler/node_modules/ms/index.js | 152 + .../finalhandler/node_modules/ms/license.md | 21 + .../finalhandler/node_modules/ms/package.json | 37 + .../finalhandler/node_modules/ms/readme.md | 51 + node_modules/finalhandler/package.json | 47 + node_modules/fresh/HISTORY.md | 80 + node_modules/fresh/LICENSE | 23 + node_modules/fresh/README.md | 117 + node_modules/fresh/index.js | 136 + node_modules/fresh/package.json | 46 + node_modules/glob-parent/CHANGELOG.md | 110 + node_modules/glob-parent/LICENSE | 15 + node_modules/glob-parent/README.md | 137 + node_modules/glob-parent/index.js | 42 + node_modules/glob-parent/package.json | 48 + node_modules/gray-matter/CHANGELOG.md | 24 + node_modules/gray-matter/LICENSE | 21 + node_modules/gray-matter/README.md | 565 + node_modules/gray-matter/gray-matter.d.ts | 114 + node_modules/gray-matter/index.js | 228 + node_modules/gray-matter/lib/defaults.js | 18 + node_modules/gray-matter/lib/engine.js | 30 + node_modules/gray-matter/lib/engines.js | 54 + node_modules/gray-matter/lib/excerpt.js | 32 + node_modules/gray-matter/lib/parse.js | 13 + node_modules/gray-matter/lib/stringify.js | 56 + node_modules/gray-matter/lib/to-file.js | 43 + node_modules/gray-matter/lib/utils.js | 66 + .../gray-matter/node_modules/.bin/js-yaml | 16 + .../gray-matter/node_modules/.bin/js-yaml.cmd | 17 + .../gray-matter/node_modules/.bin/js-yaml.ps1 | 28 + .../node_modules/argparse/CHANGELOG.md | 185 + .../gray-matter/node_modules/argparse/LICENSE | 21 + .../node_modules/argparse/README.md | 257 + .../node_modules/argparse/index.js | 3 + .../node_modules/argparse/lib/action.js | 146 + .../argparse/lib/action/append.js | 53 + .../argparse/lib/action/append/constant.js | 47 + .../node_modules/argparse/lib/action/count.js | 40 + .../node_modules/argparse/lib/action/help.js | 47 + .../node_modules/argparse/lib/action/store.js | 50 + .../argparse/lib/action/store/constant.js | 43 + .../argparse/lib/action/store/false.js | 27 + .../argparse/lib/action/store/true.js | 26 + .../argparse/lib/action/subparsers.js | 149 + .../argparse/lib/action/version.js | 47 + .../argparse/lib/action_container.js | 482 + .../node_modules/argparse/lib/argparse.js | 14 + .../argparse/lib/argument/error.js | 50 + .../argparse/lib/argument/exclusive.js | 54 + .../argparse/lib/argument/group.js | 75 + .../argparse/lib/argument_parser.js | 1161 ++ .../node_modules/argparse/lib/const.js | 21 + .../argparse/lib/help/added_formatters.js | 87 + .../argparse/lib/help/formatter.js | 795 ++ .../node_modules/argparse/lib/namespace.js | 76 + .../node_modules/argparse/lib/utils.js | 57 + .../node_modules/argparse/package.json | 34 + .../gray-matter/node_modules/js-yaml/LICENSE | 21 + .../node_modules/js-yaml/README.md | 302 + .../node_modules/js-yaml/bin/js-yaml.js | 132 + .../node_modules/js-yaml/dist/js-yaml.js | 4011 +++++++ .../node_modules/js-yaml/dist/js-yaml.min.js | 1 + .../gray-matter/node_modules/js-yaml/index.js | 7 + .../node_modules/js-yaml/lib/js-yaml.js | 39 + .../js-yaml/lib/js-yaml/common.js | 59 + .../js-yaml/lib/js-yaml/dumper.js | 850 ++ .../js-yaml/lib/js-yaml/exception.js | 43 + .../js-yaml/lib/js-yaml/loader.js | 1666 +++ .../node_modules/js-yaml/lib/js-yaml/mark.js | 76 + .../js-yaml/lib/js-yaml/schema.js | 108 + .../js-yaml/lib/js-yaml/schema/core.js | 18 + .../lib/js-yaml/schema/default_full.js | 25 + .../lib/js-yaml/schema/default_safe.js | 28 + .../js-yaml/lib/js-yaml/schema/failsafe.js | 17 + .../js-yaml/lib/js-yaml/schema/json.js | 25 + .../node_modules/js-yaml/lib/js-yaml/type.js | 61 + .../js-yaml/lib/js-yaml/type/binary.js | 138 + .../js-yaml/lib/js-yaml/type/bool.js | 35 + .../js-yaml/lib/js-yaml/type/float.js | 116 + .../js-yaml/lib/js-yaml/type/int.js | 173 + .../js-yaml/lib/js-yaml/type/js/function.js | 93 + .../js-yaml/lib/js-yaml/type/js/regexp.js | 60 + .../js-yaml/lib/js-yaml/type/js/undefined.js | 28 + .../js-yaml/lib/js-yaml/type/map.js | 8 + .../js-yaml/lib/js-yaml/type/merge.js | 12 + .../js-yaml/lib/js-yaml/type/null.js | 34 + .../js-yaml/lib/js-yaml/type/omap.js | 44 + .../js-yaml/lib/js-yaml/type/pairs.js | 53 + .../js-yaml/lib/js-yaml/type/seq.js | 8 + .../js-yaml/lib/js-yaml/type/set.js | 29 + .../js-yaml/lib/js-yaml/type/str.js | 8 + .../js-yaml/lib/js-yaml/type/timestamp.js | 88 + .../node_modules/js-yaml/package.json | 52 + node_modules/gray-matter/package.json | 127 + node_modules/htmlparser2/LICENSE | 18 + node_modules/htmlparser2/README.md | 166 + node_modules/htmlparser2/lib/FeedHandler.d.ts | 23 + .../htmlparser2/lib/FeedHandler.d.ts.map | 1 + node_modules/htmlparser2/lib/FeedHandler.js | 68 + node_modules/htmlparser2/lib/Parser.d.ts | 180 + node_modules/htmlparser2/lib/Parser.d.ts.map | 1 + node_modules/htmlparser2/lib/Parser.js | 424 + node_modules/htmlparser2/lib/Tokenizer.d.ts | 173 + .../htmlparser2/lib/Tokenizer.d.ts.map | 1 + node_modules/htmlparser2/lib/Tokenizer.js | 821 ++ .../htmlparser2/lib/WritableStream.d.ts | 16 + .../htmlparser2/lib/WritableStream.d.ts.map | 1 + .../htmlparser2/lib/WritableStream.js | 53 + node_modules/htmlparser2/lib/index.d.ts | 39 + node_modules/htmlparser2/lib/index.d.ts.map | 1 + node_modules/htmlparser2/lib/index.js | 84 + .../htmlparser2/node_modules/entities/LICENSE | 11 + .../node_modules/entities/lib/decode.d.ts | 15 + .../node_modules/entities/lib/decode.d.ts.map | 1 + .../node_modules/entities/lib/decode.js | 145 + .../entities/lib/decode_codepoint.d.ts | 2 + .../entities/lib/decode_codepoint.d.ts.map | 1 + .../entities/lib/decode_codepoint.js | 54 + .../entities/lib/encode-trie.d.ts | 8 + .../entities/lib/encode-trie.d.ts.map | 1 + .../node_modules/entities/lib/encode-trie.js | 77 + .../node_modules/entities/lib/encode.d.ts | 46 + .../node_modules/entities/lib/encode.d.ts.map | 1 + .../node_modules/entities/lib/encode.js | 126 + .../lib/generated/decode-data-html.d.ts | 3 + .../lib/generated/decode-data-html.d.ts.map | 1 + .../lib/generated/decode-data-html.js | 5 + .../lib/generated/decode-data-xml.d.ts | 3 + .../lib/generated/decode-data-xml.d.ts.map | 1 + .../entities/lib/generated/decode-data-xml.js | 5 + .../node_modules/entities/lib/index.d.ts | 91 + .../node_modules/entities/lib/index.d.ts.map | 1 + .../node_modules/entities/lib/index.js | 118 + .../entities/lib/maps/entities.json | 1 + .../entities/lib/maps/legacy.json | 1 + .../node_modules/entities/lib/maps/xml.json | 1 + .../node_modules/entities/package.json | 67 + .../node_modules/entities/readme.md | 74 + node_modules/htmlparser2/package.json | 75 + node_modules/http-equiv-refresh/README.md | 31 + node_modules/http-equiv-refresh/index-es5.js | 30 + .../http-equiv-refresh/index-es5.js.map | 1 + node_modules/http-equiv-refresh/index.js | 24 + node_modules/http-equiv-refresh/license | 21 + node_modules/http-equiv-refresh/package.json | 42 + node_modules/http-errors/HISTORY.md | 186 + node_modules/http-errors/LICENSE | 23 + node_modules/http-errors/README.md | 169 + node_modules/http-errors/index.js | 290 + node_modules/http-errors/package.json | 54 + node_modules/inherits/LICENSE | 16 + node_modules/inherits/README.md | 42 + node_modules/inherits/inherits.js | 9 + node_modules/inherits/inherits_browser.js | 27 + node_modules/inherits/package.json | 29 + node_modules/is-alphabetical/index.d.ts | 8 + node_modules/is-alphabetical/index.js | 16 + node_modules/is-alphabetical/license | 22 + node_modules/is-alphabetical/package.json | 73 + node_modules/is-alphabetical/readme.md | 141 + node_modules/is-alphanumerical/index.d.ts | 8 + node_modules/is-alphanumerical/index.js | 13 + node_modules/is-alphanumerical/license | 22 + node_modules/is-alphanumerical/package.json | 79 + node_modules/is-alphanumerical/readme.md | 142 + node_modules/is-binary-path/index.d.ts | 17 + node_modules/is-binary-path/index.js | 7 + node_modules/is-binary-path/license | 9 + node_modules/is-binary-path/package.json | 40 + node_modules/is-binary-path/readme.md | 34 + node_modules/is-decimal/index.d.ts | 8 + node_modules/is-decimal/index.js | 13 + node_modules/is-decimal/license | 22 + node_modules/is-decimal/package.json | 73 + node_modules/is-decimal/readme.md | 139 + node_modules/is-extendable/LICENSE | 21 + node_modules/is-extendable/README.md | 72 + node_modules/is-extendable/index.js | 13 + node_modules/is-extendable/package.json | 51 + node_modules/is-extglob/LICENSE | 21 + node_modules/is-extglob/README.md | 107 + node_modules/is-extglob/index.js | 20 + node_modules/is-extglob/package.json | 69 + node_modules/is-glob/LICENSE | 21 + node_modules/is-glob/README.md | 206 + node_modules/is-glob/index.js | 150 + node_modules/is-glob/package.json | 81 + node_modules/is-json/.npmignore | 12 + node_modules/is-json/.travis.yml | 14 + node_modules/is-json/LICENSE | 15 + node_modules/is-json/README.md | 41 + node_modules/is-json/index.js | 48 + node_modules/is-json/package.json | 29 + node_modules/is-json/test/index.js | 33 + node_modules/is-number/LICENSE | 21 + node_modules/is-number/README.md | 187 + node_modules/is-number/index.js | 18 + node_modules/is-number/package.json | 82 + node_modules/iso-639-1/.eslintrc | 38 + node_modules/iso-639-1/.nvmrc | 1 + node_modules/iso-639-1/.prettierrc | 4 + node_modules/iso-639-1/.travis.yml | 6 + node_modules/iso-639-1/.vscode/settings.json | 5 + node_modules/iso-639-1/CHANGELOG.md | 79 + node_modules/iso-639-1/LICENSE | 21 + node_modules/iso-639-1/build/index.js | 1 + node_modules/iso-639-1/index.d.ts | 205 + node_modules/iso-639-1/package.json | 41 + node_modules/iso-639-1/readme.md | 121 + node_modules/iso-639-1/src/data.js | 736 ++ node_modules/iso-639-1/src/index.js | 59 + node_modules/iso-639-1/test/test.js | 193 + node_modules/iso-639-1/webpack.config.js | 20 + node_modules/js-yaml/LICENSE | 21 + node_modules/js-yaml/README.md | 233 + node_modules/js-yaml/bin/js-yaml.js | 117 + node_modules/js-yaml/dist/js-yaml.js | 3014 ++++++ node_modules/js-yaml/dist/js-yaml.js.map | 1 + node_modules/js-yaml/dist/js-yaml.min.js | 2 + node_modules/js-yaml/dist/js-yaml.min.js.map | 1 + node_modules/js-yaml/dist/js-yaml.mjs | 3074 ++++++ node_modules/js-yaml/dist/js-yaml.mjs.map | 1 + node_modules/js-yaml/index.js | 44 + node_modules/js-yaml/lib/common.js | 50 + node_modules/js-yaml/lib/dumper.js | 937 ++ node_modules/js-yaml/lib/exception.js | 51 + .../js-yaml/lib/index_vite_proxy.tmp.mjs | 37 + node_modules/js-yaml/lib/loader.js | 1790 ++++ node_modules/js-yaml/lib/schema.js | 109 + node_modules/js-yaml/lib/schema/core.js | 9 + node_modules/js-yaml/lib/schema/default.js | 20 + node_modules/js-yaml/lib/schema/failsafe.js | 14 + node_modules/js-yaml/lib/schema/json.js | 17 + node_modules/js-yaml/lib/snippet.js | 96 + node_modules/js-yaml/lib/type.js | 66 + node_modules/js-yaml/lib/type/binary.js | 122 + node_modules/js-yaml/lib/type/bool.js | 35 + node_modules/js-yaml/lib/type/float.js | 99 + node_modules/js-yaml/lib/type/int.js | 142 + node_modules/js-yaml/lib/type/map.js | 8 + node_modules/js-yaml/lib/type/merge.js | 12 + node_modules/js-yaml/lib/type/null.js | 35 + node_modules/js-yaml/lib/type/omap.js | 45 + node_modules/js-yaml/lib/type/pairs.js | 50 + node_modules/js-yaml/lib/type/seq.js | 8 + node_modules/js-yaml/lib/type/set.js | 29 + node_modules/js-yaml/lib/type/str.js | 8 + node_modules/js-yaml/lib/type/timestamp.js | 88 + node_modules/js-yaml/package.json | 83 + node_modules/junk/index.d.ts | 40 + node_modules/junk/index.js | 39 + node_modules/junk/license | 9 + node_modules/junk/package.json | 42 + node_modules/junk/readme.md | 51 + node_modules/kind-of/CHANGELOG.md | 160 + node_modules/kind-of/LICENSE | 21 + node_modules/kind-of/README.md | 367 + node_modules/kind-of/index.js | 129 + node_modules/kind-of/package.json | 88 + node_modules/kleur/colors.d.ts | 38 + node_modules/kleur/colors.js | 53 + node_modules/kleur/colors.mjs | 53 + node_modules/kleur/index.d.ts | 45 + node_modules/kleur/index.js | 110 + node_modules/kleur/index.mjs | 110 + node_modules/kleur/license | 21 + node_modules/kleur/package.json | 51 + node_modules/kleur/readme.md | 232 + node_modules/linkify-it/LICENSE | 22 + node_modules/linkify-it/README.md | 195 + node_modules/linkify-it/build/index.cjs.js | 840 ++ node_modules/linkify-it/index.mjs | 646 ++ node_modules/linkify-it/lib/re.mjs | 193 + node_modules/linkify-it/package.json | 63 + node_modules/liquidjs/LICENSE | 21 + node_modules/liquidjs/README.md | 262 + node_modules/liquidjs/bin/liquid.js | 139 + .../dist/build/base64-impl-browser.d.ts | 2 + .../dist/build/base64-impl-browser.spec.d.ts | 1 + .../dist/build/crypto-impl-browser.d.ts | 2 + .../dist/build/crypto-impl-browser.spec.d.ts | 1 + .../liquidjs/dist/build/fs-impl-browser.d.ts | 7 + .../dist/build/fs-impl-browser.spec.d.ts | 1 + .../dist/build/streamed-emitter-browser.d.ts | 10 + .../build/streamed-emitter-browser.spec.d.ts | 1 + node_modules/liquidjs/dist/cache/cache.d.ts | 7 + node_modules/liquidjs/dist/cache/index.d.ts | 2 + node_modules/liquidjs/dist/cache/lru.d.ts | 14 + .../liquidjs/dist/cache/lru.spec.d.ts | 1 + .../liquidjs/dist/context/block-mode.d.ts | 4 + .../liquidjs/dist/context/context.d.ts | 70 + .../liquidjs/dist/context/context.spec.d.ts | 1 + node_modules/liquidjs/dist/context/index.d.ts | 3 + node_modules/liquidjs/dist/context/scope.d.ts | 6 + .../liquidjs/dist/drop/blank-drop.d.ts | 5 + .../liquidjs/dist/drop/block-drop.d.ts | 11 + .../liquidjs/dist/drop/comparable.d.ts | 8 + node_modules/liquidjs/dist/drop/drop.d.ts | 5 + .../liquidjs/dist/drop/empty-drop.d.ts | 11 + .../liquidjs/dist/drop/forloop-drop.d.ts | 15 + node_modules/liquidjs/dist/drop/index.d.ts | 7 + .../liquidjs/dist/drop/null-drop.d.ts | 10 + .../liquidjs/dist/drop/tablerowloop-drop.d.ts | 10 + .../liquidjs/dist/emitters/emitter.d.ts | 11 + .../liquidjs/dist/emitters/index.d.ts | 4 + .../dist/emitters/keeping-type-emitter.d.ts | 5 + .../dist/emitters/simple-emitter.d.ts | 5 + .../dist/emitters/streamed-emitter.d.ts | 9 + node_modules/liquidjs/dist/filters/array.d.ts | 32 + .../liquidjs/dist/filters/base64-impl.d.ts | 2 + .../liquidjs/dist/filters/base64.d.ts | 9 + .../liquidjs/dist/filters/crypto-impl.d.ts | 2 + .../liquidjs/dist/filters/crypto.d.ts | 8 + node_modules/liquidjs/dist/filters/date.d.ts | 6 + node_modules/liquidjs/dist/filters/html.d.ts | 6 + node_modules/liquidjs/dist/filters/index.d.ts | 2 + node_modules/liquidjs/dist/filters/math.d.ts | 11 + node_modules/liquidjs/dist/filters/misc.d.ts | 18 + .../liquidjs/dist/filters/string.d.ts | 27 + node_modules/liquidjs/dist/filters/url.d.ts | 14 + node_modules/liquidjs/dist/fs/fs-impl.d.ts | 10 + .../liquidjs/dist/fs/fs-impl.spec.d.ts | 1 + node_modules/liquidjs/dist/fs/fs.d.ts | 22 + node_modules/liquidjs/dist/fs/index.d.ts | 2 + node_modules/liquidjs/dist/fs/loader.d.ts | 25 + .../liquidjs/dist/fs/loader.spec.d.ts | 1 + node_modules/liquidjs/dist/fs/map-fs.d.ts | 13 + .../liquidjs/dist/fs/map-fs.spec.d.ts | 1 + .../liquidjs/dist/fs/node-require.d.ts | 1 + node_modules/liquidjs/dist/index.d.ts | 20 + .../liquidjs/dist/liquid-options.d.ts | 165 + .../liquidjs/dist/liquid-options.spec.d.ts | 1 + .../liquidjs/dist/liquid.browser.min.js | 2 + .../liquidjs/dist/liquid.browser.min.js.map | 1 + node_modules/liquidjs/dist/liquid.browser.mjs | 5230 +++++++++ .../liquidjs/dist/liquid.browser.umd.js | 7732 ++++++++++++++ .../liquidjs/dist/liquid.browser.umd.js.map | 1 + node_modules/liquidjs/dist/liquid.d.ts | 70 + node_modules/liquidjs/dist/liquid.node.js | 5251 +++++++++ node_modules/liquidjs/dist/liquid.node.mjs | 5245 +++++++++ .../liquidjs/dist/parser/filter-arg.d.ts | 5 + node_modules/liquidjs/dist/parser/index.d.ts | 4 + .../liquidjs/dist/parser/parse-stream.d.ts | 15 + .../dist/parser/parse-stream.spec.d.ts | 1 + node_modules/liquidjs/dist/parser/parser.d.ts | 21 + .../liquidjs/dist/parser/parser.spec.d.ts | 1 + .../liquidjs/dist/parser/token-kind.d.ts | 17 + .../liquidjs/dist/parser/tokenizer.d.ts | 64 + .../liquidjs/dist/parser/tokenizer.spec.d.ts | 1 + .../liquidjs/dist/parser/whitespace-ctrl.d.ts | 3 + .../liquidjs/dist/render/boolean.d.ts | 3 + .../liquidjs/dist/render/boolean.spec.d.ts | 1 + .../liquidjs/dist/render/expression.d.ts | 10 + .../liquidjs/dist/render/expression.spec.d.ts | 1 + node_modules/liquidjs/dist/render/index.d.ts | 4 + .../liquidjs/dist/render/operator.d.ts | 8 + node_modules/liquidjs/dist/render/render.d.ts | 8 + .../liquidjs/dist/render/render.spec.d.ts | 1 + node_modules/liquidjs/dist/render/string.d.ts | 1 + .../liquidjs/dist/render/string.spec.d.ts | 1 + node_modules/liquidjs/dist/tags/assign.d.ts | 12 + node_modules/liquidjs/dist/tags/block.d.ts | 11 + node_modules/liquidjs/dist/tags/break.d.ts | 4 + node_modules/liquidjs/dist/tags/capture.d.ts | 13 + node_modules/liquidjs/dist/tags/case.d.ts | 15 + node_modules/liquidjs/dist/tags/comment.d.ts | 5 + node_modules/liquidjs/dist/tags/continue.d.ts | 4 + node_modules/liquidjs/dist/tags/cycle.d.ts | 9 + .../liquidjs/dist/tags/decrement.d.ts | 9 + node_modules/liquidjs/dist/tags/echo.d.ts | 8 + node_modules/liquidjs/dist/tags/for.d.ts | 15 + node_modules/liquidjs/dist/tags/if.d.ts | 14 + node_modules/liquidjs/dist/tags/include.d.ts | 14 + .../liquidjs/dist/tags/increment.d.ts | 9 + node_modules/liquidjs/dist/tags/index.d.ts | 24 + .../liquidjs/dist/tags/inline-comment.d.ts | 5 + node_modules/liquidjs/dist/tags/layout.d.ts | 15 + node_modules/liquidjs/dist/tags/liquid.d.ts | 8 + node_modules/liquidjs/dist/tags/raw.d.ts | 6 + node_modules/liquidjs/dist/tags/render.d.ts | 24 + node_modules/liquidjs/dist/tags/tablerow.d.ts | 14 + node_modules/liquidjs/dist/tags/unless.d.ts | 15 + .../liquidjs/dist/template/analysis.d.ts | 85 + .../liquidjs/dist/template/analysis.spec.d.ts | 1 + .../dist/template/filter-impl-options.d.ts | 14 + .../liquidjs/dist/template/filter.d.ts | 15 + .../liquidjs/dist/template/filter.spec.d.ts | 1 + node_modules/liquidjs/dist/template/hash.d.ts | 18 + .../liquidjs/dist/template/hash.spec.d.ts | 1 + node_modules/liquidjs/dist/template/html.d.ts | 9 + .../liquidjs/dist/template/index.d.ts | 11 + .../liquidjs/dist/template/output.d.ts | 12 + .../liquidjs/dist/template/output.spec.d.ts | 1 + .../dist/template/tag-options-adapter.d.ts | 10 + node_modules/liquidjs/dist/template/tag.d.ts | 18 + .../liquidjs/dist/template/template-impl.d.ts | 4 + .../liquidjs/dist/template/template.d.ts | 36 + .../liquidjs/dist/template/value.d.ts | 15 + .../liquidjs/dist/template/value.spec.d.ts | 1 + .../liquidjs/dist/tokens/delimited-token.d.ts | 9 + .../liquidjs/dist/tokens/filter-token.d.ts | 7 + .../dist/tokens/filtered-value-token.d.ts | 17 + .../liquidjs/dist/tokens/hash-token.d.ts | 12 + .../liquidjs/dist/tokens/html-token.d.ts | 11 + .../dist/tokens/identifier-token.d.ts | 9 + node_modules/liquidjs/dist/tokens/index.d.ts | 18 + .../dist/tokens/liquid-tag-token.d.ts | 12 + .../liquidjs/dist/tokens/literal-token.d.ts | 11 + .../liquidjs/dist/tokens/number-token.d.ts | 9 + .../liquidjs/dist/tokens/operator-token.d.ts | 39 + .../liquidjs/dist/tokens/output-token.d.ts | 5 + .../dist/tokens/property-access-token.d.ts | 13 + .../liquidjs/dist/tokens/quoted-token.d.ts | 9 + .../liquidjs/dist/tokens/range-token.d.ts | 11 + .../liquidjs/dist/tokens/tag-token.d.ts | 9 + node_modules/liquidjs/dist/tokens/token.d.ts | 12 + .../liquidjs/dist/tokens/top-level-token.d.ts | 4 + .../liquidjs/dist/tokens/value-token.d.ts | 7 + node_modules/liquidjs/dist/util/assert.d.ts | 2 + .../liquidjs/dist/util/assert.spec.d.ts | 1 + node_modules/liquidjs/dist/util/async.d.ts | 4 + .../liquidjs/dist/util/async.spec.d.ts | 1 + .../liquidjs/dist/util/character.d.ts | 10 + node_modules/liquidjs/dist/util/error.d.ts | 35 + .../liquidjs/dist/util/error.spec.d.ts | 1 + node_modules/liquidjs/dist/util/index.d.ts | 12 + node_modules/liquidjs/dist/util/intl.d.ts | 6 + node_modules/liquidjs/dist/util/limiter.d.ts | 8 + .../liquidjs/dist/util/liquid-date.d.ts | 59 + .../liquidjs/dist/util/liquid-date.spec.d.ts | 1 + node_modules/liquidjs/dist/util/literal.d.ts | 11 + .../liquidjs/dist/util/operator-trie.d.ts | 10 + .../liquidjs/dist/util/performance.d.ts | 5 + .../liquidjs/dist/util/performance.spec.d.ts | 1 + node_modules/liquidjs/dist/util/strftime.d.ts | 3 + .../liquidjs/dist/util/strftime.spec.d.ts | 1 + .../liquidjs/dist/util/type-guards.d.ts | 14 + .../liquidjs/dist/util/type-guards.spec.d.ts | 1 + .../liquidjs/dist/util/underscore.d.ts | 41 + .../liquidjs/dist/util/underscore.spec.d.ts | 1 + node_modules/liquidjs/package.json | 171 + node_modules/list-to-array/.npmignore | 27 + node_modules/list-to-array/LICENSE | 22 + node_modules/list-to-array/README.md | 52 + node_modules/list-to-array/index.js | 18 + node_modules/list-to-array/package.json | 32 + node_modules/list-to-array/tests.js | 29 + node_modules/luxon/LICENSE.md | 7 + node_modules/luxon/README.md | 55 + node_modules/luxon/build/amd/luxon.js | 8741 +++++++++++++++ node_modules/luxon/build/amd/luxon.js.map | 1 + node_modules/luxon/build/cjs-browser/luxon.js | 8739 +++++++++++++++ .../luxon/build/cjs-browser/luxon.js.map | 1 + node_modules/luxon/build/es6/luxon.mjs | 8133 ++++++++++++++ node_modules/luxon/build/es6/luxon.mjs.map | 1 + node_modules/luxon/build/global/luxon.js | 8744 +++++++++++++++ node_modules/luxon/build/global/luxon.js.map | 1 + node_modules/luxon/build/global/luxon.min.js | 1 + .../luxon/build/global/luxon.min.js.map | 1 + node_modules/luxon/build/node/luxon.js | 7792 ++++++++++++++ node_modules/luxon/build/node/luxon.js.map | 1 + node_modules/luxon/package.json | 87 + node_modules/luxon/src/datetime.js | 2603 +++++ node_modules/luxon/src/duration.js | 1009 ++ node_modules/luxon/src/errors.js | 61 + node_modules/luxon/src/impl/conversions.js | 206 + node_modules/luxon/src/impl/diff.js | 95 + node_modules/luxon/src/impl/digits.js | 94 + node_modules/luxon/src/impl/english.js | 233 + node_modules/luxon/src/impl/formats.js | 176 + node_modules/luxon/src/impl/formatter.js | 434 + node_modules/luxon/src/impl/invalid.js | 14 + node_modules/luxon/src/impl/locale.js | 569 + node_modules/luxon/src/impl/regexParser.js | 335 + node_modules/luxon/src/impl/tokenParser.js | 505 + node_modules/luxon/src/impl/util.js | 330 + node_modules/luxon/src/impl/zoneUtil.js | 34 + node_modules/luxon/src/info.js | 205 + node_modules/luxon/src/interval.js | 669 ++ node_modules/luxon/src/luxon.js | 26 + node_modules/luxon/src/package.json | 4 + node_modules/luxon/src/settings.js | 180 + node_modules/luxon/src/zone.js | 97 + node_modules/luxon/src/zones/IANAZone.js | 235 + .../luxon/src/zones/fixedOffsetZone.js | 150 + node_modules/luxon/src/zones/invalidZone.js | 53 + node_modules/luxon/src/zones/systemZone.js | 61 + node_modules/markdown-it/LICENSE | 22 + node_modules/markdown-it/README.md | 320 + node_modules/markdown-it/bin/markdown-it.mjs | 107 + node_modules/markdown-it/dist/index.cjs.js | 3901 +++++++ .../markdown-it/dist/index.cjs.js.map | 1 + node_modules/markdown-it/dist/markdown-it.js | 3975 +++++++ .../markdown-it/dist/markdown-it.js.map | 1 + .../markdown-it/dist/markdown-it.min.js | 3 + .../markdown-it/dist/markdown-it.min.js.map | 1 + node_modules/markdown-it/index.mjs | 1 + .../markdown-it/lib/common/html_blocks.mjs | 67 + .../markdown-it/lib/common/html_re.mjs | 25 + node_modules/markdown-it/lib/common/utils.mjs | 324 + .../markdown-it/lib/helpers/index.mjs | 11 + .../lib/helpers/parse_link_destination.mjs | 77 + .../lib/helpers/parse_link_label.mjs | 49 + .../lib/helpers/parse_link_title.mjs | 66 + node_modules/markdown-it/lib/index.mjs | 565 + node_modules/markdown-it/lib/parser_block.mjs | 134 + node_modules/markdown-it/lib/parser_core.mjs | 62 + .../markdown-it/lib/parser_inline.mjs | 197 + .../markdown-it/lib/presets/commonmark.mjs | 88 + .../markdown-it/lib/presets/default.mjs | 47 + node_modules/markdown-it/lib/presets/zero.mjs | 70 + node_modules/markdown-it/lib/renderer.mjs | 322 + node_modules/markdown-it/lib/ruler.mjs | 340 + .../lib/rules_block/blockquote.mjs | 209 + .../markdown-it/lib/rules_block/code.mjs | 30 + .../markdown-it/lib/rules_block/fence.mjs | 94 + .../markdown-it/lib/rules_block/heading.mjs | 51 + .../markdown-it/lib/rules_block/hr.mjs | 40 + .../lib/rules_block/html_block.mjs | 80 + .../markdown-it/lib/rules_block/lheading.mjs | 85 + .../markdown-it/lib/rules_block/list.mjs | 331 + .../markdown-it/lib/rules_block/paragraph.mjs | 48 + .../markdown-it/lib/rules_block/reference.mjs | 212 + .../lib/rules_block/state_block.mjs | 220 + .../markdown-it/lib/rules_block/table.mjs | 228 + .../markdown-it/lib/rules_core/block.mjs | 13 + .../markdown-it/lib/rules_core/inline.mjs | 11 + .../markdown-it/lib/rules_core/linkify.mjs | 134 + .../markdown-it/lib/rules_core/normalize.mjs | 17 + .../lib/rules_core/replacements.mjs | 101 + .../lib/rules_core/smartquotes.mjs | 209 + .../markdown-it/lib/rules_core/state_core.mjs | 17 + .../markdown-it/lib/rules_core/text_join.mjs | 43 + .../markdown-it/lib/rules_inline/autolink.mjs | 72 + .../lib/rules_inline/backticks.mjs | 60 + .../lib/rules_inline/balance_pairs.mjs | 124 + .../markdown-it/lib/rules_inline/emphasis.mjs | 123 + .../markdown-it/lib/rules_inline/entity.mjs | 51 + .../markdown-it/lib/rules_inline/escape.mjs | 83 + .../lib/rules_inline/fragments_join.mjs | 38 + .../lib/rules_inline/html_inline.mjs | 50 + .../markdown-it/lib/rules_inline/image.mjs | 138 + .../markdown-it/lib/rules_inline/link.mjs | 139 + .../markdown-it/lib/rules_inline/linkify.mjs | 63 + .../markdown-it/lib/rules_inline/newline.mjs | 42 + .../lib/rules_inline/state_inline.mjs | 154 + .../lib/rules_inline/strikethrough.mjs | 127 + .../markdown-it/lib/rules_inline/text.mjs | 86 + node_modules/markdown-it/lib/token.mjs | 191 + .../markdown-it/node_modules/entities/LICENSE | 11 + .../node_modules/entities/lib/decode.d.ts | 211 + .../node_modules/entities/lib/decode.d.ts.map | 1 + .../node_modules/entities/lib/decode.js | 536 + .../node_modules/entities/lib/decode.js.map | 1 + .../entities/lib/decode_codepoint.d.ts | 19 + .../entities/lib/decode_codepoint.d.ts.map | 1 + .../entities/lib/decode_codepoint.js | 76 + .../entities/lib/decode_codepoint.js.map | 1 + .../node_modules/entities/lib/encode.d.ts | 22 + .../node_modules/entities/lib/encode.d.ts.map | 1 + .../node_modules/entities/lib/encode.js | 77 + .../node_modules/entities/lib/encode.js.map | 1 + .../node_modules/entities/lib/escape.d.ts | 43 + .../node_modules/entities/lib/escape.d.ts.map | 1 + .../node_modules/entities/lib/escape.js | 122 + .../node_modules/entities/lib/escape.js.map | 1 + .../node_modules/entities/lib/esm/decode.d.ts | 211 + .../entities/lib/esm/decode.d.ts.map | 1 + .../node_modules/entities/lib/esm/decode.js | 496 + .../entities/lib/esm/decode.js.map | 1 + .../entities/lib/esm/decode_codepoint.d.ts | 19 + .../lib/esm/decode_codepoint.d.ts.map | 1 + .../entities/lib/esm/decode_codepoint.js | 71 + .../entities/lib/esm/decode_codepoint.js.map | 1 + .../node_modules/entities/lib/esm/encode.d.ts | 22 + .../entities/lib/esm/encode.d.ts.map | 1 + .../node_modules/entities/lib/esm/encode.js | 69 + .../entities/lib/esm/encode.js.map | 1 + .../node_modules/entities/lib/esm/escape.d.ts | 43 + .../entities/lib/esm/escape.d.ts.map | 1 + .../node_modules/entities/lib/esm/escape.js | 116 + .../entities/lib/esm/escape.js.map | 1 + .../lib/esm/generated/decode-data-html.d.ts | 3 + .../esm/generated/decode-data-html.d.ts.map | 1 + .../lib/esm/generated/decode-data-html.js | 7 + .../lib/esm/generated/decode-data-html.js.map | 1 + .../lib/esm/generated/decode-data-xml.d.ts | 3 + .../esm/generated/decode-data-xml.d.ts.map | 1 + .../lib/esm/generated/decode-data-xml.js | 7 + .../lib/esm/generated/decode-data-xml.js.map | 1 + .../lib/esm/generated/encode-html.d.ts | 8 + .../lib/esm/generated/encode-html.d.ts.map | 1 + .../entities/lib/esm/generated/encode-html.js | 10 + .../lib/esm/generated/encode-html.js.map | 1 + .../node_modules/entities/lib/esm/index.d.ts | 96 + .../entities/lib/esm/index.d.ts.map | 1 + .../node_modules/entities/lib/esm/index.js | 99 + .../entities/lib/esm/index.js.map | 1 + .../entities/lib/esm/package.json | 1 + .../lib/generated/decode-data-html.d.ts | 3 + .../lib/generated/decode-data-html.d.ts.map | 1 + .../lib/generated/decode-data-html.js | 9 + .../lib/generated/decode-data-html.js.map | 1 + .../lib/generated/decode-data-xml.d.ts | 3 + .../lib/generated/decode-data-xml.d.ts.map | 1 + .../entities/lib/generated/decode-data-xml.js | 9 + .../lib/generated/decode-data-xml.js.map | 1 + .../entities/lib/generated/encode-html.d.ts | 8 + .../lib/generated/encode-html.d.ts.map | 1 + .../entities/lib/generated/encode-html.js | 12 + .../entities/lib/generated/encode-html.js.map | 1 + .../node_modules/entities/lib/index.d.ts | 96 + .../node_modules/entities/lib/index.d.ts.map | 1 + .../node_modules/entities/lib/index.js | 126 + .../node_modules/entities/lib/index.js.map | 1 + .../node_modules/entities/package.json | 90 + .../node_modules/entities/readme.md | 122 + node_modules/markdown-it/package.json | 94 + node_modules/mdurl/LICENSE | 45 + node_modules/mdurl/README.md | 102 + node_modules/mdurl/build/index.cjs.js | 534 + node_modules/mdurl/index.mjs | 11 + node_modules/mdurl/lib/decode.mjs | 112 + node_modules/mdurl/lib/encode.mjs | 89 + node_modules/mdurl/lib/format.mjs | 21 + node_modules/mdurl/lib/index.d.ts | 28 + node_modules/mdurl/lib/parse.mjs | 308 + node_modules/mdurl/package.json | 43 + node_modules/mime-db/HISTORY.md | 541 + node_modules/mime-db/LICENSE | 23 + node_modules/mime-db/README.md | 109 + node_modules/mime-db/db.json | 9342 +++++++++++++++++ node_modules/mime-db/index.js | 12 + node_modules/mime-db/package.json | 56 + node_modules/mime-types/HISTORY.md | 428 + node_modules/mime-types/LICENSE | 23 + node_modules/mime-types/README.md | 126 + node_modules/mime-types/index.js | 211 + node_modules/mime-types/mimeScore.js | 57 + node_modules/mime-types/package.json | 49 + node_modules/mime/CHANGELOG.md | 312 + node_modules/mime/LICENSE | 21 + node_modules/mime/Mime.js | 97 + node_modules/mime/README.md | 178 + node_modules/mime/cli.js | 46 + node_modules/mime/index.js | 4 + node_modules/mime/lite.js | 4 + node_modules/mime/package.json | 52 + node_modules/mime/types/other.js | 1 + node_modules/mime/types/standard.js | 1 + node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 267 + node_modules/minimatch/minimatch.js | 1005 ++ node_modules/minimatch/package.json | 33 + node_modules/minimist/.eslintrc | 29 + node_modules/minimist/.github/FUNDING.yml | 12 + node_modules/minimist/.nycrc | 14 + node_modules/minimist/CHANGELOG.md | 298 + node_modules/minimist/LICENSE | 18 + node_modules/minimist/README.md | 121 + node_modules/minimist/example/parse.js | 4 + node_modules/minimist/index.js | 263 + node_modules/minimist/package.json | 75 + node_modules/minimist/test/all_bool.js | 34 + node_modules/minimist/test/bool.js | 177 + node_modules/minimist/test/dash.js | 43 + node_modules/minimist/test/default_bool.js | 37 + node_modules/minimist/test/dotted.js | 24 + node_modules/minimist/test/kv_short.js | 32 + node_modules/minimist/test/long.js | 33 + node_modules/minimist/test/num.js | 38 + node_modules/minimist/test/parse.js | 209 + node_modules/minimist/test/parse_modified.js | 11 + node_modules/minimist/test/proto.js | 64 + node_modules/minimist/test/short.js | 69 + node_modules/minimist/test/stop_early.js | 17 + node_modules/minimist/test/unknown.js | 104 + node_modules/minimist/test/whitespace.js | 10 + node_modules/minipass/LICENSE.md | 55 + node_modules/minipass/README.md | 825 ++ .../minipass/dist/commonjs/index.d.ts | 545 + .../minipass/dist/commonjs/index.d.ts.map | 1 + node_modules/minipass/dist/commonjs/index.js | 1038 ++ .../minipass/dist/commonjs/index.js.map | 1 + .../minipass/dist/commonjs/package.json | 3 + node_modules/minipass/dist/esm/index.d.ts | 545 + node_modules/minipass/dist/esm/index.d.ts.map | 1 + node_modules/minipass/dist/esm/index.js | 1020 ++ node_modules/minipass/dist/esm/index.js.map | 1 + node_modules/minipass/dist/esm/package.json | 3 + node_modules/minipass/package.json | 77 + node_modules/moo/LICENSE | 29 + node_modules/moo/README.md | 383 + node_modules/moo/moo.js | 642 ++ node_modules/moo/package.json | 29 + node_modules/morphdom/CHANGELOG.md | 256 + node_modules/morphdom/LICENSE | 21 + node_modules/morphdom/README.md | 265 + node_modules/morphdom/dist/morphdom-esm.js | 783 ++ .../morphdom/dist/morphdom-factory.js | 719 ++ node_modules/morphdom/dist/morphdom-umd.js | 791 ++ .../morphdom/dist/morphdom-umd.min.js | 1 + node_modules/morphdom/dist/morphdom.js | 785 ++ node_modules/morphdom/docs/old-benchmark.md | 204 + node_modules/morphdom/docs/virtual-dom.md | 38 + node_modules/morphdom/factory.js | 1 + node_modules/morphdom/index.d.ts | 21 + node_modules/morphdom/package.json | 63 + node_modules/morphdom/src/index.js | 6 + node_modules/morphdom/src/morphAttrs.js | 63 + node_modules/morphdom/src/morphdom.js | 491 + .../morphdom/src/specialElHandlers.js | 115 + node_modules/morphdom/src/util.js | 113 + node_modules/ms/index.js | 162 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 38 + node_modules/ms/readme.md | 59 + node_modules/node-retrieve-globals/LICENSE | 21 + node_modules/node-retrieve-globals/README.md | 91 + .../node-retrieve-globals/package.json | 30 + .../node-retrieve-globals/retrieveGlobals.js | 376 + .../util/getWorkingDirectory.js | 18 + .../node-retrieve-globals/util/vmModules.js | 23 + node_modules/normalize-path/LICENSE | 21 + node_modules/normalize-path/README.md | 127 + node_modules/normalize-path/index.js | 35 + node_modules/normalize-path/package.json | 77 + node_modules/nunjucks/LICENSE | 26 + node_modules/nunjucks/README.md | 58 + node_modules/nunjucks/bin/precompile | 58 + node_modules/nunjucks/bin/precompile.cmd | 5 + .../nunjucks/browser/nunjucks-slim.js | 3709 +++++++ .../nunjucks/browser/nunjucks-slim.js.map | 1 + .../nunjucks/browser/nunjucks-slim.min.js | 3 + .../nunjucks/browser/nunjucks-slim.min.js.map | 1 + node_modules/nunjucks/browser/nunjucks.js | 7021 +++++++++++++ node_modules/nunjucks/browser/nunjucks.js.map | 1 + node_modules/nunjucks/browser/nunjucks.min.js | 3 + .../nunjucks/browser/nunjucks.min.js.map | 1 + node_modules/nunjucks/index.js | 82 + .../node_modules/commander/CHANGELOG.md | 385 + .../nunjucks/node_modules/commander/LICENSE | 22 + .../nunjucks/node_modules/commander/Readme.md | 737 ++ .../nunjucks/node_modules/commander/index.js | 1756 ++++ .../node_modules/commander/package.json | 48 + .../node_modules/commander/typings/index.d.ts | 386 + node_modules/nunjucks/package.json | 112 + node_modules/nunjucks/src/compiler.js | 1027 ++ node_modules/nunjucks/src/environment.js | 548 + node_modules/nunjucks/src/express-app.js | 23 + node_modules/nunjucks/src/filters.js | 546 + node_modules/nunjucks/src/globals.js | 65 + node_modules/nunjucks/src/jinja-compat.js | 293 + node_modules/nunjucks/src/lexer.js | 474 + node_modules/nunjucks/src/lib.js | 325 + node_modules/nunjucks/src/loader.js | 21 + node_modules/nunjucks/src/loaders.js | 5 + node_modules/nunjucks/src/node-loaders.js | 139 + node_modules/nunjucks/src/nodes.js | 350 + node_modules/nunjucks/src/object.js | 100 + node_modules/nunjucks/src/parser.js | 1028 ++ .../nunjucks/src/precompile-global.js | 17 + node_modules/nunjucks/src/precompile.js | 108 + .../nunjucks/src/precompiled-loader.js | 31 + node_modules/nunjucks/src/runtime.js | 333 + node_modules/nunjucks/src/tests.js | 265 + node_modules/nunjucks/src/transformer.js | 166 + node_modules/nunjucks/src/web-loaders.js | 94 + node_modules/on-finished/HISTORY.md | 98 + node_modules/on-finished/LICENSE | 23 + node_modules/on-finished/README.md | 162 + node_modules/on-finished/index.js | 234 + node_modules/on-finished/package.json | 39 + node_modules/parse-srcset/.jscs.json | 83 + node_modules/parse-srcset/.jshintrc | 15 + node_modules/parse-srcset/.npmignore | 8 + node_modules/parse-srcset/LICENSE | 22 + node_modules/parse-srcset/README.md | 19 + node_modules/parse-srcset/package.json | 25 + node_modules/parse-srcset/src/parse-srcset.js | 330 + node_modules/parse-srcset/tests/he.js | 329 + node_modules/parse-srcset/tests/intern.js | 74 + node_modules/parse-srcset/tests/unit/ps.js | 345 + node_modules/parseurl/HISTORY.md | 58 + node_modules/parseurl/LICENSE | 24 + node_modules/parseurl/README.md | 133 + node_modules/parseurl/index.js | 158 + node_modules/parseurl/package.json | 40 + node_modules/picomatch/LICENSE | 21 + node_modules/picomatch/README.md | 743 ++ node_modules/picomatch/index.js | 17 + node_modules/picomatch/lib/constants.js | 184 + node_modules/picomatch/lib/parse.js | 1416 +++ node_modules/picomatch/lib/picomatch.js | 361 + node_modules/picomatch/lib/scan.js | 391 + node_modules/picomatch/lib/utils.js | 72 + node_modules/picomatch/package.json | 83 + node_modules/picomatch/posix.js | 3 + node_modules/please-upgrade-node/.eslintrc.js | 12 + .../please-upgrade-node/.github/FUNDING.yml | 1 + node_modules/please-upgrade-node/LICENSE | 21 + node_modules/please-upgrade-node/README.md | 72 + node_modules/please-upgrade-node/index.d.ts | 11 + node_modules/please-upgrade-node/index.js | 25 + node_modules/please-upgrade-node/package.json | 46 + node_modules/posthtml-match-helper/LICENSE | 21 + node_modules/posthtml-match-helper/README.md | 84 + .../posthtml-match-helper/lib/index.d.ts | 10 + .../posthtml-match-helper/lib/index.js | 149 + .../posthtml-match-helper/package.json | 41 + .../posthtml-parser/dist/chunk.2UQLUWPH.js | 1 + node_modules/posthtml-parser/dist/index.d.ts | 27 + node_modules/posthtml-parser/dist/index.js | 1 + .../dist/location-tracker.d.ts | 17 + .../posthtml-parser/dist/location-tracker.js | 1 + node_modules/posthtml-parser/license | 22 + node_modules/posthtml-parser/package.json | 69 + node_modules/posthtml-parser/readme.md | 130 + node_modules/posthtml-render/changelog.md | 310 + node_modules/posthtml-render/dist/index.d.ts | 67 + node_modules/posthtml-render/dist/index.js | 1 + node_modules/posthtml-render/license | 22 + node_modules/posthtml-render/package.json | 55 + node_modules/posthtml-render/readme.md | 225 + node_modules/posthtml/lib/api.js | 145 + node_modules/posthtml/lib/index.js | 323 + node_modules/posthtml/license | 21 + node_modules/posthtml/package.json | 65 + node_modules/posthtml/readme.md | 366 + node_modules/posthtml/types/posthtml.d.ts | 108 + node_modules/prr/.jshintrc | 61 + node_modules/prr/.npmignore | 1 + node_modules/prr/.travis.yml | 10 + node_modules/prr/LICENSE.md | 11 + node_modules/prr/README.md | 47 + node_modules/prr/package.json | 26 + node_modules/prr/prr.js | 63 + node_modules/prr/test.js | 169 + node_modules/punycode.js/LICENSE-MIT.txt | 20 + node_modules/punycode.js/README.md | 148 + node_modules/punycode.js/package.json | 58 + node_modules/punycode.js/punycode.es6.js | 444 + node_modules/punycode.js/punycode.js | 443 + node_modules/range-parser/HISTORY.md | 56 + node_modules/range-parser/LICENSE | 23 + node_modules/range-parser/README.md | 85 + node_modules/range-parser/index.js | 181 + node_modules/range-parser/package.json | 48 + node_modules/readdirp/LICENSE | 21 + node_modules/readdirp/README.md | 122 + node_modules/readdirp/index.d.ts | 43 + node_modules/readdirp/index.js | 287 + .../readdirp/node_modules/picomatch/LICENSE | 21 + .../readdirp/node_modules/picomatch/README.md | 716 ++ .../readdirp/node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 184 + .../node_modules/picomatch/lib/parse.js | 1392 +++ .../node_modules/picomatch/lib/picomatch.js | 342 + .../node_modules/picomatch/lib/scan.js | 391 + .../node_modules/picomatch/lib/utils.js | 64 + .../node_modules/picomatch/package.json | 81 + node_modules/readdirp/package.json | 122 + node_modules/section-matter/LICENSE | 21 + node_modules/section-matter/README.md | 236 + node_modules/section-matter/index.js | 136 + node_modules/section-matter/package.json | 55 + node_modules/semver-compare/.travis.yml | 6 + node_modules/semver-compare/LICENSE | 18 + node_modules/semver-compare/example/cmp.js | 13 + node_modules/semver-compare/example/lex.js | 12 + node_modules/semver-compare/index.js | 13 + node_modules/semver-compare/package.json | 31 + node_modules/semver-compare/readme.markdown | 77 + node_modules/semver-compare/test/cmp.js | 29 + node_modules/semver/LICENSE | 15 + node_modules/semver/README.md | 680 ++ node_modules/semver/bin/semver.js | 195 + node_modules/semver/classes/comparator.js | 143 + node_modules/semver/classes/index.js | 7 + node_modules/semver/classes/range.js | 577 + node_modules/semver/classes/semver.js | 350 + node_modules/semver/functions/clean.js | 8 + node_modules/semver/functions/cmp.js | 54 + node_modules/semver/functions/coerce.js | 62 + .../semver/functions/compare-build.js | 9 + .../semver/functions/compare-loose.js | 5 + node_modules/semver/functions/compare.js | 7 + node_modules/semver/functions/diff.js | 60 + node_modules/semver/functions/eq.js | 5 + node_modules/semver/functions/gt.js | 5 + node_modules/semver/functions/gte.js | 5 + node_modules/semver/functions/inc.js | 21 + node_modules/semver/functions/lt.js | 5 + node_modules/semver/functions/lte.js | 5 + node_modules/semver/functions/major.js | 5 + node_modules/semver/functions/minor.js | 5 + node_modules/semver/functions/neq.js | 5 + node_modules/semver/functions/parse.js | 18 + node_modules/semver/functions/patch.js | 5 + node_modules/semver/functions/prerelease.js | 8 + node_modules/semver/functions/rcompare.js | 5 + node_modules/semver/functions/rsort.js | 5 + node_modules/semver/functions/satisfies.js | 12 + node_modules/semver/functions/sort.js | 5 + node_modules/semver/functions/truncate.js | 48 + node_modules/semver/functions/valid.js | 8 + node_modules/semver/index.js | 93 + node_modules/semver/internal/constants.js | 37 + node_modules/semver/internal/debug.js | 11 + node_modules/semver/internal/identifiers.js | 29 + node_modules/semver/internal/lrucache.js | 42 + node_modules/semver/internal/parse-options.js | 17 + node_modules/semver/internal/re.js | 223 + node_modules/semver/package.json | 78 + node_modules/semver/preload.js | 4 + node_modules/semver/range.bnf | 17 + node_modules/semver/ranges/gtr.js | 6 + node_modules/semver/ranges/intersects.js | 9 + node_modules/semver/ranges/ltr.js | 6 + node_modules/semver/ranges/max-satisfying.js | 27 + node_modules/semver/ranges/min-satisfying.js | 26 + node_modules/semver/ranges/min-version.js | 63 + node_modules/semver/ranges/outside.js | 82 + node_modules/semver/ranges/simplify.js | 49 + node_modules/semver/ranges/subset.js | 249 + node_modules/semver/ranges/to-comparators.js | 10 + node_modules/semver/ranges/valid.js | 13 + node_modules/send/LICENSE | 23 + node_modules/send/README.md | 317 + node_modules/send/index.js | 997 ++ node_modules/send/package.json | 63 + node_modules/setprototypeof/LICENSE | 13 + node_modules/setprototypeof/README.md | 31 + node_modules/setprototypeof/index.d.ts | 2 + node_modules/setprototypeof/index.js | 17 + node_modules/setprototypeof/package.json | 38 + node_modules/setprototypeof/test/index.js | 24 + node_modules/slash/index.d.ts | 25 + node_modules/slash/index.js | 11 + node_modules/slash/license | 9 + node_modules/slash/package.json | 35 + node_modules/slash/readme.md | 44 + node_modules/slugify/LICENSE | 21 + node_modules/slugify/README.md | 98 + node_modules/slugify/package.json | 42 + node_modules/slugify/slugify.d.ts | 27 + node_modules/slugify/slugify.js | 69 + node_modules/sprintf-js/.npmignore | 1 + node_modules/sprintf-js/LICENSE | 24 + node_modules/sprintf-js/README.md | 88 + node_modules/sprintf-js/bower.json | 14 + node_modules/sprintf-js/demo/angular.html | 20 + .../sprintf-js/dist/angular-sprintf.min.js | 4 + .../dist/angular-sprintf.min.js.map | 1 + .../sprintf-js/dist/angular-sprintf.min.map | 1 + node_modules/sprintf-js/dist/sprintf.min.js | 4 + .../sprintf-js/dist/sprintf.min.js.map | 1 + node_modules/sprintf-js/dist/sprintf.min.map | 1 + node_modules/sprintf-js/gruntfile.js | 36 + node_modules/sprintf-js/package.json | 22 + .../sprintf-js/src/angular-sprintf.js | 18 + node_modules/sprintf-js/src/sprintf.js | 208 + node_modules/sprintf-js/test/test.js | 82 + node_modules/ssri/LICENSE.md | 16 + node_modules/ssri/README.md | 528 + node_modules/ssri/lib/index.js | 580 + node_modules/ssri/package.json | 66 + node_modules/statuses/HISTORY.md | 87 + node_modules/statuses/LICENSE | 23 + node_modules/statuses/README.md | 139 + node_modules/statuses/codes.json | 65 + node_modules/statuses/index.js | 146 + node_modules/statuses/package.json | 49 + node_modules/strip-bom-string/LICENSE | 21 + node_modules/strip-bom-string/README.md | 66 + node_modules/strip-bom-string/index.js | 15 + node_modules/strip-bom-string/package.json | 60 + node_modules/tinyglobby/LICENSE | 21 + node_modules/tinyglobby/README.md | 25 + node_modules/tinyglobby/dist/index.cjs | 335 + node_modules/tinyglobby/dist/index.d.cts | 148 + node_modules/tinyglobby/dist/index.d.mts | 148 + node_modules/tinyglobby/dist/index.mjs | 307 + node_modules/tinyglobby/package.json | 70 + node_modules/to-regex-range/LICENSE | 21 + node_modules/to-regex-range/README.md | 305 + node_modules/to-regex-range/index.js | 288 + node_modules/to-regex-range/package.json | 88 + node_modules/toidentifier/HISTORY.md | 9 + node_modules/toidentifier/LICENSE | 21 + node_modules/toidentifier/README.md | 61 + node_modules/toidentifier/index.js | 32 + node_modules/toidentifier/package.json | 38 + node_modules/uc.micro/LICENSE.txt | 20 + node_modules/uc.micro/README.md | 14 + node_modules/uc.micro/build/index.cjs.js | 20 + node_modules/uc.micro/categories/Cc/regex.mjs | 1 + node_modules/uc.micro/categories/Cf/regex.mjs | 1 + node_modules/uc.micro/categories/P/regex.mjs | 1 + node_modules/uc.micro/categories/S/regex.mjs | 1 + node_modules/uc.micro/categories/Z/regex.mjs | 1 + node_modules/uc.micro/index.mjs | 8 + node_modules/uc.micro/package.json | 37 + .../uc.micro/properties/Any/regex.mjs | 1 + node_modules/unpipe/HISTORY.md | 4 + node_modules/unpipe/LICENSE | 22 + node_modules/unpipe/README.md | 43 + node_modules/unpipe/index.js | 69 + node_modules/unpipe/package.json | 27 + node_modules/urlpattern-polyfill/LICENSE | 19 + node_modules/urlpattern-polyfill/README.md | 242 + .../urlpattern-polyfill/dist/index.d.ts | 9 + .../urlpattern-polyfill/dist/types.d.ts | 49 + .../urlpattern-polyfill/dist/urlpattern.cjs | 1 + .../urlpattern-polyfill/dist/urlpattern.js | 1 + node_modules/urlpattern-polyfill/index.cjs | 7 + node_modules/urlpattern-polyfill/index.js | 7 + node_modules/urlpattern-polyfill/package.json | 149 + node_modules/ws/LICENSE | 20 + node_modules/ws/README.md | 548 + node_modules/ws/browser.js | 8 + node_modules/ws/index.js | 22 + node_modules/ws/lib/buffer-util.js | 131 + node_modules/ws/lib/constants.js | 19 + node_modules/ws/lib/event-target.js | 292 + node_modules/ws/lib/extension.js | 203 + node_modules/ws/lib/limiter.js | 55 + node_modules/ws/lib/permessage-deflate.js | 528 + node_modules/ws/lib/receiver.js | 743 ++ node_modules/ws/lib/sender.js | 607 ++ node_modules/ws/lib/stream.js | 161 + node_modules/ws/lib/subprotocol.js | 62 + node_modules/ws/lib/validation.js | 152 + node_modules/ws/lib/websocket-server.js | 562 + node_modules/ws/lib/websocket.js | 1407 +++ node_modules/ws/package.json | 74 + node_modules/ws/wrapper.mjs | 21 + pr_authors.json | Bin 0 -> 1062 bytes pr_authors_unique.json | Bin 0 -> 1250 bytes 1719 files changed, 326149 insertions(+) create mode 100644 .eleventy.js create mode 100644 _data/contributors.json create mode 100644 _site/AGENTS/index.html create mode 100644 _site/CLAUDE/index.html create mode 100644 _site/CODE_OF_CONDUCT/index.html create mode 100644 _site/CONTRIBUTING/index.html create mode 100644 _site/EMOJI/AGENTS/index.html create mode 100644 _site/EMOJI/CLAUDE/index.html create mode 100644 _site/EMOJI/CODE_OF_CONDUCT/index.html create mode 100644 _site/EMOJI/CONTRIBUTING/index.html create mode 100644 _site/EMOJI/EMOJI/index.html create mode 100644 _site/EMOJI/MISSION-STATEMENT/index.html create mode 100644 _site/EMOJI/README/index.html create mode 100644 _site/EMOJI/SECURITY/index.html create mode 100644 _site/EMOJI/index.html create mode 100644 _site/MISSION-STATEMENT/index.html create mode 100644 _site/README/index.html create mode 100644 _site/SECURITY/index.html create mode 100644 _site/contributors/index.html create mode 100644 _site/docs/butter/index.html create mode 100644 _site/docs/index.html create mode 100644 _site/img/generic.jpg create mode 100644 _site/img/grumpy.jpg create mode 100644 _site/img/hero.jpg create mode 100644 _site/img/mischievous.jpg create mode 100644 _site/img/smart.jpg create mode 100644 _site/recipes/OrangePeelSoup/index.html create mode 100644 _site/src/bastion/README/index.html create mode 100644 _site/src/recipes/banana_pudding/index.html create mode 100644 contributors.html create mode 100644 generate_data.py create mode 100644 img/generic.jpg create mode 100644 img/grumpy.jpg create mode 100644 img/hero.jpg create mode 100644 img/mischievous.jpg create mode 100644 img/smart.jpg create mode 100644 node_modules/.bin/acorn create mode 100644 node_modules/.bin/acorn.cmd create mode 100644 node_modules/.bin/acorn.ps1 create mode 100644 node_modules/.bin/eleventy create mode 100644 node_modules/.bin/eleventy-dev-server create mode 100644 node_modules/.bin/eleventy-dev-server.cmd create mode 100644 node_modules/.bin/eleventy-dev-server.ps1 create mode 100644 node_modules/.bin/eleventy.cmd create mode 100644 node_modules/.bin/eleventy.ps1 create mode 100644 node_modules/.bin/errno create mode 100644 node_modules/.bin/errno.cmd create mode 100644 node_modules/.bin/errno.ps1 create mode 100644 node_modules/.bin/esparse create mode 100644 node_modules/.bin/esparse.cmd create mode 100644 node_modules/.bin/esparse.ps1 create mode 100644 node_modules/.bin/esvalidate create mode 100644 node_modules/.bin/esvalidate.cmd create mode 100644 node_modules/.bin/esvalidate.ps1 create mode 100644 node_modules/.bin/js-yaml create mode 100644 node_modules/.bin/js-yaml.cmd create mode 100644 node_modules/.bin/js-yaml.ps1 create mode 100644 node_modules/.bin/liquid create mode 100644 node_modules/.bin/liquid.cmd create mode 100644 node_modules/.bin/liquid.ps1 create mode 100644 node_modules/.bin/liquidjs create mode 100644 node_modules/.bin/liquidjs.cmd create mode 100644 node_modules/.bin/liquidjs.ps1 create mode 100644 node_modules/.bin/markdown-it create mode 100644 node_modules/.bin/markdown-it.cmd create mode 100644 node_modules/.bin/markdown-it.ps1 create mode 100644 node_modules/.bin/mime create mode 100644 node_modules/.bin/mime.cmd create mode 100644 node_modules/.bin/mime.ps1 create mode 100644 node_modules/.bin/nunjucks-precompile create mode 100644 node_modules/.bin/nunjucks-precompile.cmd create mode 100644 node_modules/.bin/nunjucks-precompile.ps1 create mode 100644 node_modules/.bin/semver create mode 100644 node_modules/.bin/semver.cmd create mode 100644 node_modules/.bin/semver.ps1 create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@11ty/dependency-tree-esm/LICENSE create mode 100644 node_modules/@11ty/dependency-tree-esm/README.md create mode 100644 node_modules/@11ty/dependency-tree-esm/main.js create mode 100644 node_modules/@11ty/dependency-tree-esm/package.json create mode 100644 node_modules/@11ty/dependency-tree/LICENSE create mode 100644 node_modules/@11ty/dependency-tree/README.md create mode 100644 node_modules/@11ty/dependency-tree/main.js create mode 100644 node_modules/@11ty/dependency-tree/package.json create mode 100644 node_modules/@11ty/eleventy-dev-server/README.md create mode 100644 node_modules/@11ty/eleventy-dev-server/cli.js create mode 100644 node_modules/@11ty/eleventy-dev-server/client/reload-client.js create mode 100644 node_modules/@11ty/eleventy-dev-server/cmd.js create mode 100644 node_modules/@11ty/eleventy-dev-server/package.json create mode 100644 node_modules/@11ty/eleventy-dev-server/server.js create mode 100644 node_modules/@11ty/eleventy-dev-server/server/ipAddress.js create mode 100644 node_modules/@11ty/eleventy-dev-server/server/wrapResponse.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/README.md create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/eleventy.bundle.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/package.json create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/BundleFileOutput.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/CodeManager.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/OutOfOrderRender.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/bundlePlucker.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.bundleManagers.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.pruneEmptyBundles.js create mode 100644 node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.shortcodes.js create mode 100644 node_modules/@11ty/eleventy-utils/LICENSE create mode 100644 node_modules/@11ty/eleventy-utils/README.md create mode 100644 node_modules/@11ty/eleventy-utils/index.js create mode 100644 node_modules/@11ty/eleventy-utils/package.json create mode 100644 node_modules/@11ty/eleventy-utils/src/Buffer.js create mode 100644 node_modules/@11ty/eleventy-utils/src/CreateHash.js create mode 100644 node_modules/@11ty/eleventy-utils/src/DateCompare.js create mode 100644 node_modules/@11ty/eleventy-utils/src/HashTypes.js create mode 100644 node_modules/@11ty/eleventy-utils/src/IsPlainObject.js create mode 100644 node_modules/@11ty/eleventy-utils/src/Merge.js create mode 100644 node_modules/@11ty/eleventy-utils/src/TemplatePath.js create mode 100644 node_modules/@11ty/eleventy-utils/src/Url.js create mode 100644 node_modules/@11ty/eleventy-utils/src/lib-sha256.js create mode 100644 node_modules/@11ty/eleventy/CODE_OF_CONDUCT.md create mode 100644 node_modules/@11ty/eleventy/LICENSE create mode 100644 node_modules/@11ty/eleventy/README.md create mode 100644 node_modules/@11ty/eleventy/SECURITY.md create mode 100644 node_modules/@11ty/eleventy/cmd.cjs create mode 100644 node_modules/@11ty/eleventy/package.json create mode 100644 node_modules/@11ty/eleventy/src/Benchmark/Benchmark.js create mode 100644 node_modules/@11ty/eleventy/src/Benchmark/BenchmarkGroup.js create mode 100644 node_modules/@11ty/eleventy/src/Benchmark/BenchmarkManager.js create mode 100644 node_modules/@11ty/eleventy/src/Data/ComputedData.js create mode 100644 node_modules/@11ty/eleventy/src/Data/ComputedDataProxy.js create mode 100644 node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js create mode 100644 node_modules/@11ty/eleventy/src/Data/ComputedDataTemplateString.js create mode 100644 node_modules/@11ty/eleventy/src/Data/TemplateData.js create mode 100644 node_modules/@11ty/eleventy/src/Data/TemplateDataInitialGlobalData.js create mode 100644 node_modules/@11ty/eleventy/src/Eleventy.js create mode 100644 node_modules/@11ty/eleventy/src/EleventyCommonJs.cjs create mode 100644 node_modules/@11ty/eleventy/src/EleventyExtensionMap.js create mode 100644 node_modules/@11ty/eleventy/src/EleventyFiles.js create mode 100644 node_modules/@11ty/eleventy/src/EleventyServe.js create mode 100644 node_modules/@11ty/eleventy/src/EleventyWatch.js create mode 100644 node_modules/@11ty/eleventy/src/EleventyWatchTargets.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/Custom.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/FrontMatter/JavaScript.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/Html.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/JavaScript.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/Liquid.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/Markdown.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/Nunjucks.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/TemplateEngine.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/TemplateEngineManager.js create mode 100644 node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/DuplicatePermalinkOutputError.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/EleventyBaseError.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/EleventyErrorHandler.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/TemplateContentPrematureUseError.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/TemplateContentUnrenderedTemplateError.js create mode 100644 node_modules/@11ty/eleventy/src/Errors/UsingCircularTemplateContentReferenceError.js create mode 100644 node_modules/@11ty/eleventy/src/EventBus.js create mode 100644 node_modules/@11ty/eleventy/src/FileSystemSearch.js create mode 100644 node_modules/@11ty/eleventy/src/Filters/GetCollectionItem.js create mode 100644 node_modules/@11ty/eleventy/src/Filters/GetCollectionItemIndex.js create mode 100644 node_modules/@11ty/eleventy/src/Filters/GetLocaleCollectionItem.js create mode 100644 node_modules/@11ty/eleventy/src/Filters/Slug.js create mode 100644 node_modules/@11ty/eleventy/src/Filters/Slugify.js create mode 100644 node_modules/@11ty/eleventy/src/Filters/Url.js create mode 100644 node_modules/@11ty/eleventy/src/GlobalDependencyMap.js create mode 100644 node_modules/@11ty/eleventy/src/LayoutCache.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/HtmlBasePlugin.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/HtmlRelativeCopyPlugin.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/I18nPlugin.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/IdAttributePlugin.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/InputPathToUrl.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/Pagination.js create mode 100644 node_modules/@11ty/eleventy/src/Plugins/RenderPlugin.js create mode 100644 node_modules/@11ty/eleventy/src/Template.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateBehavior.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateCollection.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateConfig.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateContent.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateFileSlug.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateGlob.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateLayout.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateLayoutPathResolver.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateMap.js create mode 100644 node_modules/@11ty/eleventy/src/TemplatePassthrough.js create mode 100644 node_modules/@11ty/eleventy/src/TemplatePassthroughManager.js create mode 100644 node_modules/@11ty/eleventy/src/TemplatePermalink.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateRender.js create mode 100644 node_modules/@11ty/eleventy/src/TemplateWriter.js create mode 100644 node_modules/@11ty/eleventy/src/UserConfig.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ArrayUtil.js create mode 100644 node_modules/@11ty/eleventy/src/Util/AsyncEventEmitter.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Compatibility.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ConsoleLogger.js create mode 100644 node_modules/@11ty/eleventy/src/Util/DateGitFirstAdded.js create mode 100644 node_modules/@11ty/eleventy/src/Util/DateGitLastUpdated.js create mode 100644 node_modules/@11ty/eleventy/src/Util/DirContains.js create mode 100644 node_modules/@11ty/eleventy/src/Util/EsmResolver.js create mode 100644 node_modules/@11ty/eleventy/src/Util/EsmResolverPortAdapter.js create mode 100644 node_modules/@11ty/eleventy/src/Util/EventBusUtil.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ExistsCache.js create mode 100644 node_modules/@11ty/eleventy/src/Util/FilePathUtil.js create mode 100644 node_modules/@11ty/eleventy/src/Util/FileSystemManager.js create mode 100644 node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js create mode 100644 node_modules/@11ty/eleventy/src/Util/GlobMatcher.js create mode 100644 node_modules/@11ty/eleventy/src/Util/GlobRemap.js create mode 100644 node_modules/@11ty/eleventy/src/Util/HtmlRelativeCopy.js create mode 100644 node_modules/@11ty/eleventy/src/Util/HtmlTransformer.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ImportJsonSync.js create mode 100644 node_modules/@11ty/eleventy/src/Util/IsAsyncFunction.js create mode 100644 node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js create mode 100644 node_modules/@11ty/eleventy/src/Util/MemoizeFunction.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Objects/DeepFreeze.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Objects/ObjectFilter.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Objects/ProxyWrap.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Objects/SampleModule.mjs create mode 100644 node_modules/@11ty/eleventy/src/Util/Objects/Sortable.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Objects/Unique.js create mode 100644 node_modules/@11ty/eleventy/src/Util/PassthroughCopyBehaviorCheck.js create mode 100644 node_modules/@11ty/eleventy/src/Util/PathNormalizer.js create mode 100644 node_modules/@11ty/eleventy/src/Util/PathPrefixer.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Pluralize.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ProjectDirectories.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ProjectTemplateFormats.js create mode 100644 node_modules/@11ty/eleventy/src/Util/PromiseUtil.js create mode 100644 node_modules/@11ty/eleventy/src/Util/Require.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ReservedData.js create mode 100644 node_modules/@11ty/eleventy/src/Util/SetUnion.js create mode 100644 node_modules/@11ty/eleventy/src/Util/SpawnAsync.js create mode 100644 node_modules/@11ty/eleventy/src/Util/TemplateDepGraph.js create mode 100644 node_modules/@11ty/eleventy/src/Util/TransformsUtil.js create mode 100644 node_modules/@11ty/eleventy/src/Util/ValidUrl.js create mode 100644 node_modules/@11ty/eleventy/src/defaultConfig.js create mode 100644 node_modules/@11ty/eleventy/tsconfig.json create mode 100644 node_modules/@11ty/lodash-custom/README.md create mode 100644 node_modules/@11ty/lodash-custom/lodash.custom.js create mode 100644 node_modules/@11ty/lodash-custom/package.json create mode 100644 node_modules/@11ty/posthtml-urls/LICENSE create mode 100644 node_modules/@11ty/posthtml-urls/README.md create mode 100644 node_modules/@11ty/posthtml-urls/lib/defaultOptions.js create mode 100644 node_modules/@11ty/posthtml-urls/lib/index.js create mode 100644 node_modules/@11ty/posthtml-urls/package.json create mode 100644 node_modules/@11ty/recursive-copy/README.md create mode 100644 node_modules/@11ty/recursive-copy/index.d.ts create mode 100644 node_modules/@11ty/recursive-copy/index.js create mode 100644 node_modules/@11ty/recursive-copy/lib/copy.js create mode 100644 node_modules/@11ty/recursive-copy/lib/maximatch.js create mode 100644 node_modules/@11ty/recursive-copy/package.json create mode 100644 node_modules/@sindresorhus/slugify/index.d.ts create mode 100644 node_modules/@sindresorhus/slugify/index.js create mode 100644 node_modules/@sindresorhus/slugify/license create mode 100644 node_modules/@sindresorhus/slugify/overridable-replacements.js create mode 100644 node_modules/@sindresorhus/slugify/package.json create mode 100644 node_modules/@sindresorhus/slugify/readme.md create mode 100644 node_modules/@sindresorhus/transliterate/index.d.ts create mode 100644 node_modules/@sindresorhus/transliterate/index.js create mode 100644 node_modules/@sindresorhus/transliterate/license create mode 100644 node_modules/@sindresorhus/transliterate/package.json create mode 100644 node_modules/@sindresorhus/transliterate/readme.md create mode 100644 node_modules/@sindresorhus/transliterate/replacements.js create mode 100644 node_modules/a-sync-waterfall/LICENSE create mode 100644 node_modules/a-sync-waterfall/README.md create mode 100644 node_modules/a-sync-waterfall/index.js create mode 100644 node_modules/a-sync-waterfall/package.json create mode 100644 node_modules/a-sync-waterfall/test.js create mode 100644 node_modules/acorn-walk/CHANGELOG.md create mode 100644 node_modules/acorn-walk/LICENSE create mode 100644 node_modules/acorn-walk/README.md create mode 100644 node_modules/acorn-walk/dist/walk.d.mts create mode 100644 node_modules/acorn-walk/dist/walk.d.ts create mode 100644 node_modules/acorn-walk/dist/walk.js create mode 100644 node_modules/acorn-walk/dist/walk.mjs create mode 100644 node_modules/acorn-walk/package.json create mode 100644 node_modules/acorn/CHANGELOG.md create mode 100644 node_modules/acorn/LICENSE create mode 100644 node_modules/acorn/README.md create mode 100644 node_modules/acorn/bin/acorn create mode 100644 node_modules/acorn/dist/acorn.d.mts create mode 100644 node_modules/acorn/dist/acorn.d.ts create mode 100644 node_modules/acorn/dist/acorn.js create mode 100644 node_modules/acorn/dist/acorn.mjs create mode 100644 node_modules/acorn/dist/bin.js create mode 100644 node_modules/acorn/package.json create mode 100644 node_modules/anymatch/LICENSE create mode 100644 node_modules/anymatch/README.md create mode 100644 node_modules/anymatch/index.d.ts create mode 100644 node_modules/anymatch/index.js create mode 100644 node_modules/anymatch/node_modules/picomatch/LICENSE create mode 100644 node_modules/anymatch/node_modules/picomatch/README.md create mode 100644 node_modules/anymatch/node_modules/picomatch/index.js create mode 100644 node_modules/anymatch/node_modules/picomatch/lib/constants.js create mode 100644 node_modules/anymatch/node_modules/picomatch/lib/parse.js create mode 100644 node_modules/anymatch/node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/anymatch/node_modules/picomatch/lib/scan.js create mode 100644 node_modules/anymatch/node_modules/picomatch/lib/utils.js create mode 100644 node_modules/anymatch/node_modules/picomatch/package.json create mode 100644 node_modules/anymatch/package.json create mode 100644 node_modules/argparse/CHANGELOG.md create mode 100644 node_modules/argparse/LICENSE create mode 100644 node_modules/argparse/README.md create mode 100644 node_modules/argparse/argparse.js create mode 100644 node_modules/argparse/lib/sub.js create mode 100644 node_modules/argparse/lib/textwrap.js create mode 100644 node_modules/argparse/package.json create mode 100644 node_modules/asap/CHANGES.md create mode 100644 node_modules/asap/LICENSE.md create mode 100644 node_modules/asap/README.md create mode 100644 node_modules/asap/asap.js create mode 100644 node_modules/asap/browser-asap.js create mode 100644 node_modules/asap/browser-raw.js create mode 100644 node_modules/asap/package.json create mode 100644 node_modules/asap/raw.js create mode 100644 node_modules/balanced-match/.github/FUNDING.yml create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/bcp-47-match/index.d.ts create mode 100644 node_modules/bcp-47-match/index.js create mode 100644 node_modules/bcp-47-match/license create mode 100644 node_modules/bcp-47-match/package.json create mode 100644 node_modules/bcp-47-match/readme.md create mode 100644 node_modules/bcp-47-normalize/index.d.ts create mode 100644 node_modules/bcp-47-normalize/index.js create mode 100644 node_modules/bcp-47-normalize/lib/fields.d.ts create mode 100644 node_modules/bcp-47-normalize/lib/fields.js create mode 100644 node_modules/bcp-47-normalize/lib/index.d.ts create mode 100644 node_modules/bcp-47-normalize/lib/index.js create mode 100644 node_modules/bcp-47-normalize/lib/likely.d.ts create mode 100644 node_modules/bcp-47-normalize/lib/likely.js create mode 100644 node_modules/bcp-47-normalize/lib/many.d.ts create mode 100644 node_modules/bcp-47-normalize/lib/many.js create mode 100644 node_modules/bcp-47-normalize/lib/matches.d.ts create mode 100644 node_modules/bcp-47-normalize/lib/matches.js create mode 100644 node_modules/bcp-47-normalize/license create mode 100644 node_modules/bcp-47-normalize/package.json create mode 100644 node_modules/bcp-47-normalize/readme.md create mode 100644 node_modules/bcp-47/index.d.ts create mode 100644 node_modules/bcp-47/index.d.ts.map create mode 100644 node_modules/bcp-47/index.js create mode 100644 node_modules/bcp-47/lib/normal.d.ts create mode 100644 node_modules/bcp-47/lib/normal.d.ts.map create mode 100644 node_modules/bcp-47/lib/normal.js create mode 100644 node_modules/bcp-47/lib/parse.d.ts create mode 100644 node_modules/bcp-47/lib/parse.d.ts.map create mode 100644 node_modules/bcp-47/lib/parse.js create mode 100644 node_modules/bcp-47/lib/regular.d.ts create mode 100644 node_modules/bcp-47/lib/regular.d.ts.map create mode 100644 node_modules/bcp-47/lib/regular.js create mode 100644 node_modules/bcp-47/lib/stringify.d.ts create mode 100644 node_modules/bcp-47/lib/stringify.d.ts.map create mode 100644 node_modules/bcp-47/lib/stringify.js create mode 100644 node_modules/bcp-47/license create mode 100644 node_modules/bcp-47/package.json create mode 100644 node_modules/bcp-47/readme.md create mode 100644 node_modules/binary-extensions/binary-extensions.json create mode 100644 node_modules/binary-extensions/binary-extensions.json.d.ts create mode 100644 node_modules/binary-extensions/index.d.ts create mode 100644 node_modules/binary-extensions/index.js create mode 100644 node_modules/binary-extensions/license create mode 100644 node_modules/binary-extensions/package.json create mode 100644 node_modules/binary-extensions/readme.md create mode 100644 node_modules/brace-expansion/LICENSE create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/braces/LICENSE create mode 100644 node_modules/braces/README.md create mode 100644 node_modules/braces/index.js create mode 100644 node_modules/braces/lib/compile.js create mode 100644 node_modules/braces/lib/constants.js create mode 100644 node_modules/braces/lib/expand.js create mode 100644 node_modules/braces/lib/parse.js create mode 100644 node_modules/braces/lib/stringify.js create mode 100644 node_modules/braces/lib/utils.js create mode 100644 node_modules/braces/package.json create mode 100644 node_modules/chokidar/LICENSE create mode 100644 node_modules/chokidar/README.md create mode 100644 node_modules/chokidar/index.js create mode 100644 node_modules/chokidar/lib/constants.js create mode 100644 node_modules/chokidar/lib/fsevents-handler.js create mode 100644 node_modules/chokidar/lib/nodefs-handler.js create mode 100644 node_modules/chokidar/package.json create mode 100644 node_modules/chokidar/types/index.d.ts create mode 100644 node_modules/commander/LICENSE create mode 100644 node_modules/commander/Readme.md create mode 100644 node_modules/commander/esm.mjs create mode 100644 node_modules/commander/index.js create mode 100644 node_modules/commander/lib/argument.js create mode 100644 node_modules/commander/lib/command.js create mode 100644 node_modules/commander/lib/error.js create mode 100644 node_modules/commander/lib/help.js create mode 100644 node_modules/commander/lib/option.js create mode 100644 node_modules/commander/lib/suggestSimilar.js create mode 100644 node_modules/commander/package-support.json create mode 100644 node_modules/commander/package.json create mode 100644 node_modules/commander/typings/index.d.ts create mode 100644 node_modules/concat-map/.travis.yml create mode 100644 node_modules/concat-map/LICENSE create mode 100644 node_modules/concat-map/README.markdown create mode 100644 node_modules/concat-map/example/map.js create mode 100644 node_modules/concat-map/index.js create mode 100644 node_modules/concat-map/package.json create mode 100644 node_modules/concat-map/test/map.js create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/common.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/depd/History.md create mode 100644 node_modules/depd/LICENSE create mode 100644 node_modules/depd/Readme.md create mode 100644 node_modules/depd/index.js create mode 100644 node_modules/depd/lib/browser/index.js create mode 100644 node_modules/depd/package.json create mode 100644 node_modules/dependency-graph/.github/workflows/node.js.yml create mode 100644 node_modules/dependency-graph/CHANGELOG.md create mode 100644 node_modules/dependency-graph/LICENSE create mode 100644 node_modules/dependency-graph/README.md create mode 100644 node_modules/dependency-graph/lib/dep_graph.js create mode 100644 node_modules/dependency-graph/lib/index.d.ts create mode 100644 node_modules/dependency-graph/package.json create mode 100644 node_modules/dependency-graph/specs/dep_graph_spec.js create mode 100644 node_modules/dom-serializer/LICENSE create mode 100644 node_modules/dom-serializer/README.md create mode 100644 node_modules/dom-serializer/lib/esm/foreignNames.d.ts create mode 100644 node_modules/dom-serializer/lib/esm/foreignNames.d.ts.map create mode 100644 node_modules/dom-serializer/lib/esm/foreignNames.js create mode 100644 node_modules/dom-serializer/lib/esm/index.d.ts create mode 100644 node_modules/dom-serializer/lib/esm/index.d.ts.map create mode 100644 node_modules/dom-serializer/lib/esm/index.js create mode 100644 node_modules/dom-serializer/lib/esm/package.json create mode 100644 node_modules/dom-serializer/lib/foreignNames.d.ts create mode 100644 node_modules/dom-serializer/lib/foreignNames.d.ts.map create mode 100644 node_modules/dom-serializer/lib/foreignNames.js create mode 100644 node_modules/dom-serializer/lib/index.d.ts create mode 100644 node_modules/dom-serializer/lib/index.d.ts.map create mode 100644 node_modules/dom-serializer/lib/index.js create mode 100644 node_modules/dom-serializer/node_modules/entities/LICENSE create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/decode.d.ts create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/decode.d.ts.map create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/decode.js create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.d.ts create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.d.ts.map create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.js create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/encode.d.ts create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/encode.d.ts.map create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/encode.js create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/index.d.ts create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/index.d.ts.map create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/index.js create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/maps/decode.json create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/maps/entities.json create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/maps/legacy.json create mode 100644 node_modules/dom-serializer/node_modules/entities/lib/maps/xml.json create mode 100644 node_modules/dom-serializer/node_modules/entities/package.json create mode 100644 node_modules/dom-serializer/node_modules/entities/readme.md create mode 100644 node_modules/dom-serializer/package.json create mode 100644 node_modules/domelementtype/LICENSE create mode 100644 node_modules/domelementtype/lib/esm/index.d.ts create mode 100644 node_modules/domelementtype/lib/esm/index.d.ts.map create mode 100644 node_modules/domelementtype/lib/esm/index.js create mode 100644 node_modules/domelementtype/lib/esm/package.json create mode 100644 node_modules/domelementtype/lib/index.d.ts create mode 100644 node_modules/domelementtype/lib/index.d.ts.map create mode 100644 node_modules/domelementtype/lib/index.js create mode 100644 node_modules/domelementtype/package.json create mode 100644 node_modules/domelementtype/readme.md create mode 100644 node_modules/domhandler/LICENSE create mode 100644 node_modules/domhandler/lib/index.d.ts create mode 100644 node_modules/domhandler/lib/index.d.ts.map create mode 100644 node_modules/domhandler/lib/index.js create mode 100644 node_modules/domhandler/lib/node.d.ts create mode 100644 node_modules/domhandler/lib/node.d.ts.map create mode 100644 node_modules/domhandler/lib/node.js create mode 100644 node_modules/domhandler/package.json create mode 100644 node_modules/domhandler/readme.md create mode 100644 node_modules/domutils/LICENSE create mode 100644 node_modules/domutils/lib/feeds.d.ts create mode 100644 node_modules/domutils/lib/feeds.d.ts.map create mode 100644 node_modules/domutils/lib/feeds.js create mode 100644 node_modules/domutils/lib/helpers.d.ts create mode 100644 node_modules/domutils/lib/helpers.d.ts.map create mode 100644 node_modules/domutils/lib/helpers.js create mode 100644 node_modules/domutils/lib/index.d.ts create mode 100644 node_modules/domutils/lib/index.d.ts.map create mode 100644 node_modules/domutils/lib/index.js create mode 100644 node_modules/domutils/lib/legacy.d.ts create mode 100644 node_modules/domutils/lib/legacy.d.ts.map create mode 100644 node_modules/domutils/lib/legacy.js create mode 100644 node_modules/domutils/lib/manipulation.d.ts create mode 100644 node_modules/domutils/lib/manipulation.d.ts.map create mode 100644 node_modules/domutils/lib/manipulation.js create mode 100644 node_modules/domutils/lib/querying.d.ts create mode 100644 node_modules/domutils/lib/querying.d.ts.map create mode 100644 node_modules/domutils/lib/querying.js create mode 100644 node_modules/domutils/lib/stringify.d.ts create mode 100644 node_modules/domutils/lib/stringify.d.ts.map create mode 100644 node_modules/domutils/lib/stringify.js create mode 100644 node_modules/domutils/lib/traversal.d.ts create mode 100644 node_modules/domutils/lib/traversal.d.ts.map create mode 100644 node_modules/domutils/lib/traversal.js create mode 100644 node_modules/domutils/package.json create mode 100644 node_modules/domutils/readme.md create mode 100644 node_modules/ee-first/LICENSE create mode 100644 node_modules/ee-first/README.md create mode 100644 node_modules/ee-first/index.js create mode 100644 node_modules/ee-first/package.json create mode 100644 node_modules/encodeurl/LICENSE create mode 100644 node_modules/encodeurl/README.md create mode 100644 node_modules/encodeurl/index.js create mode 100644 node_modules/encodeurl/package.json create mode 100644 node_modules/entities/LICENSE create mode 100644 node_modules/entities/decode.d.ts create mode 100644 node_modules/entities/decode.js create mode 100644 node_modules/entities/dist/commonjs/decode-codepoint.d.ts create mode 100644 node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/decode-codepoint.js create mode 100644 node_modules/entities/dist/commonjs/decode-codepoint.js.map create mode 100644 node_modules/entities/dist/commonjs/decode.d.ts create mode 100644 node_modules/entities/dist/commonjs/decode.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/decode.js create mode 100644 node_modules/entities/dist/commonjs/decode.js.map create mode 100644 node_modules/entities/dist/commonjs/encode.d.ts create mode 100644 node_modules/entities/dist/commonjs/encode.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/encode.js create mode 100644 node_modules/entities/dist/commonjs/encode.js.map create mode 100644 node_modules/entities/dist/commonjs/escape.d.ts create mode 100644 node_modules/entities/dist/commonjs/escape.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/escape.js create mode 100644 node_modules/entities/dist/commonjs/escape.js.map create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-html.js create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-html.js.map create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-xml.js create mode 100644 node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map create mode 100644 node_modules/entities/dist/commonjs/generated/encode-html.d.ts create mode 100644 node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/generated/encode-html.js create mode 100644 node_modules/entities/dist/commonjs/generated/encode-html.js.map create mode 100644 node_modules/entities/dist/commonjs/index.d.ts create mode 100644 node_modules/entities/dist/commonjs/index.d.ts.map create mode 100644 node_modules/entities/dist/commonjs/index.js create mode 100644 node_modules/entities/dist/commonjs/index.js.map create mode 100644 node_modules/entities/dist/commonjs/package.json create mode 100644 node_modules/entities/dist/esm/decode-codepoint.d.ts create mode 100644 node_modules/entities/dist/esm/decode-codepoint.d.ts.map create mode 100644 node_modules/entities/dist/esm/decode-codepoint.js create mode 100644 node_modules/entities/dist/esm/decode-codepoint.js.map create mode 100644 node_modules/entities/dist/esm/decode.d.ts create mode 100644 node_modules/entities/dist/esm/decode.d.ts.map create mode 100644 node_modules/entities/dist/esm/decode.js create mode 100644 node_modules/entities/dist/esm/decode.js.map create mode 100644 node_modules/entities/dist/esm/encode.d.ts create mode 100644 node_modules/entities/dist/esm/encode.d.ts.map create mode 100644 node_modules/entities/dist/esm/encode.js create mode 100644 node_modules/entities/dist/esm/encode.js.map create mode 100644 node_modules/entities/dist/esm/escape.d.ts create mode 100644 node_modules/entities/dist/esm/escape.d.ts.map create mode 100644 node_modules/entities/dist/esm/escape.js create mode 100644 node_modules/entities/dist/esm/escape.js.map create mode 100644 node_modules/entities/dist/esm/generated/decode-data-html.d.ts create mode 100644 node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map create mode 100644 node_modules/entities/dist/esm/generated/decode-data-html.js create mode 100644 node_modules/entities/dist/esm/generated/decode-data-html.js.map create mode 100644 node_modules/entities/dist/esm/generated/decode-data-xml.d.ts create mode 100644 node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/entities/dist/esm/generated/decode-data-xml.js create mode 100644 node_modules/entities/dist/esm/generated/decode-data-xml.js.map create mode 100644 node_modules/entities/dist/esm/generated/encode-html.d.ts create mode 100644 node_modules/entities/dist/esm/generated/encode-html.d.ts.map create mode 100644 node_modules/entities/dist/esm/generated/encode-html.js create mode 100644 node_modules/entities/dist/esm/generated/encode-html.js.map create mode 100644 node_modules/entities/dist/esm/index.d.ts create mode 100644 node_modules/entities/dist/esm/index.d.ts.map create mode 100644 node_modules/entities/dist/esm/index.js create mode 100644 node_modules/entities/dist/esm/index.js.map create mode 100644 node_modules/entities/dist/esm/package.json create mode 100644 node_modules/entities/escape.d.ts create mode 100644 node_modules/entities/escape.js create mode 100644 node_modules/entities/package.json create mode 100644 node_modules/entities/readme.md create mode 100644 node_modules/entities/src/decode-codepoint.ts create mode 100644 node_modules/entities/src/decode.spec.ts create mode 100644 node_modules/entities/src/decode.ts create mode 100644 node_modules/entities/src/encode.spec.ts create mode 100644 node_modules/entities/src/encode.ts create mode 100644 node_modules/entities/src/escape.spec.ts create mode 100644 node_modules/entities/src/escape.ts create mode 100644 node_modules/entities/src/generated/.eslintrc.json create mode 100644 node_modules/entities/src/generated/decode-data-html.ts create mode 100644 node_modules/entities/src/generated/decode-data-xml.ts create mode 100644 node_modules/entities/src/generated/encode-html.ts create mode 100644 node_modules/entities/src/index.spec.ts create mode 100644 node_modules/entities/src/index.ts create mode 100644 node_modules/errno/.jshintrc create mode 100644 node_modules/errno/.travis.yml create mode 100644 node_modules/errno/README.md create mode 100644 node_modules/errno/build.js create mode 100644 node_modules/errno/cli.js create mode 100644 node_modules/errno/custom.js create mode 100644 node_modules/errno/errno.js create mode 100644 node_modules/errno/package.json create mode 100644 node_modules/errno/test.js create mode 100644 node_modules/escape-html/LICENSE create mode 100644 node_modules/escape-html/Readme.md create mode 100644 node_modules/escape-html/index.js create mode 100644 node_modules/escape-html/package.json create mode 100644 node_modules/escape-string-regexp/index.d.ts create mode 100644 node_modules/escape-string-regexp/index.js create mode 100644 node_modules/escape-string-regexp/license create mode 100644 node_modules/escape-string-regexp/package.json create mode 100644 node_modules/escape-string-regexp/readme.md create mode 100644 node_modules/esm-import-transformer/README.md create mode 100644 node_modules/esm-import-transformer/import-transformer.js create mode 100644 node_modules/esm-import-transformer/package.json create mode 100644 node_modules/esprima/ChangeLog create mode 100644 node_modules/esprima/LICENSE.BSD create mode 100644 node_modules/esprima/README.md create mode 100644 node_modules/esprima/bin/esparse.js create mode 100644 node_modules/esprima/bin/esvalidate.js create mode 100644 node_modules/esprima/dist/esprima.js create mode 100644 node_modules/esprima/package.json create mode 100644 node_modules/etag/HISTORY.md create mode 100644 node_modules/etag/LICENSE create mode 100644 node_modules/etag/README.md create mode 100644 node_modules/etag/index.js create mode 100644 node_modules/etag/package.json create mode 100644 node_modules/evaluate-value/LICENSE create mode 100644 node_modules/evaluate-value/README.md create mode 100644 node_modules/evaluate-value/index-es5.js create mode 100644 node_modules/evaluate-value/index-es5.js.map create mode 100644 node_modules/evaluate-value/index.js create mode 100644 node_modules/evaluate-value/package.json create mode 100644 node_modules/extend-shallow/LICENSE create mode 100644 node_modules/extend-shallow/README.md create mode 100644 node_modules/extend-shallow/index.js create mode 100644 node_modules/extend-shallow/package.json create mode 100644 node_modules/fdir/LICENSE create mode 100644 node_modules/fdir/README.md create mode 100644 node_modules/fdir/dist/index.cjs create mode 100644 node_modules/fdir/dist/index.d.cts create mode 100644 node_modules/fdir/dist/index.d.mts create mode 100644 node_modules/fdir/dist/index.mjs create mode 100644 node_modules/fdir/package.json create mode 100644 node_modules/filesize/LICENSE create mode 100644 node_modules/filesize/README.md create mode 100644 node_modules/filesize/dist/filesize.cjs create mode 100644 node_modules/filesize/dist/filesize.esm.js create mode 100644 node_modules/filesize/package.json create mode 100644 node_modules/filesize/types/filesize.d.ts create mode 100644 node_modules/fill-range/LICENSE create mode 100644 node_modules/fill-range/README.md create mode 100644 node_modules/fill-range/index.js create mode 100644 node_modules/fill-range/package.json create mode 100644 node_modules/finalhandler/HISTORY.md create mode 100644 node_modules/finalhandler/LICENSE create mode 100644 node_modules/finalhandler/README.md create mode 100644 node_modules/finalhandler/SECURITY.md create mode 100644 node_modules/finalhandler/index.js create mode 100644 node_modules/finalhandler/node_modules/debug/.coveralls.yml create mode 100644 node_modules/finalhandler/node_modules/debug/.eslintrc create mode 100644 node_modules/finalhandler/node_modules/debug/.npmignore create mode 100644 node_modules/finalhandler/node_modules/debug/.travis.yml create mode 100644 node_modules/finalhandler/node_modules/debug/CHANGELOG.md create mode 100644 node_modules/finalhandler/node_modules/debug/LICENSE create mode 100644 node_modules/finalhandler/node_modules/debug/Makefile create mode 100644 node_modules/finalhandler/node_modules/debug/README.md create mode 100644 node_modules/finalhandler/node_modules/debug/component.json create mode 100644 node_modules/finalhandler/node_modules/debug/karma.conf.js create mode 100644 node_modules/finalhandler/node_modules/debug/node.js create mode 100644 node_modules/finalhandler/node_modules/debug/package.json create mode 100644 node_modules/finalhandler/node_modules/debug/src/browser.js create mode 100644 node_modules/finalhandler/node_modules/debug/src/debug.js create mode 100644 node_modules/finalhandler/node_modules/debug/src/index.js create mode 100644 node_modules/finalhandler/node_modules/debug/src/inspector-log.js create mode 100644 node_modules/finalhandler/node_modules/debug/src/node.js create mode 100644 node_modules/finalhandler/node_modules/ms/index.js create mode 100644 node_modules/finalhandler/node_modules/ms/license.md create mode 100644 node_modules/finalhandler/node_modules/ms/package.json create mode 100644 node_modules/finalhandler/node_modules/ms/readme.md create mode 100644 node_modules/finalhandler/package.json create mode 100644 node_modules/fresh/HISTORY.md create mode 100644 node_modules/fresh/LICENSE create mode 100644 node_modules/fresh/README.md create mode 100644 node_modules/fresh/index.js create mode 100644 node_modules/fresh/package.json create mode 100644 node_modules/glob-parent/CHANGELOG.md create mode 100644 node_modules/glob-parent/LICENSE create mode 100644 node_modules/glob-parent/README.md create mode 100644 node_modules/glob-parent/index.js create mode 100644 node_modules/glob-parent/package.json create mode 100644 node_modules/gray-matter/CHANGELOG.md create mode 100644 node_modules/gray-matter/LICENSE create mode 100644 node_modules/gray-matter/README.md create mode 100644 node_modules/gray-matter/gray-matter.d.ts create mode 100644 node_modules/gray-matter/index.js create mode 100644 node_modules/gray-matter/lib/defaults.js create mode 100644 node_modules/gray-matter/lib/engine.js create mode 100644 node_modules/gray-matter/lib/engines.js create mode 100644 node_modules/gray-matter/lib/excerpt.js create mode 100644 node_modules/gray-matter/lib/parse.js create mode 100644 node_modules/gray-matter/lib/stringify.js create mode 100644 node_modules/gray-matter/lib/to-file.js create mode 100644 node_modules/gray-matter/lib/utils.js create mode 100644 node_modules/gray-matter/node_modules/.bin/js-yaml create mode 100644 node_modules/gray-matter/node_modules/.bin/js-yaml.cmd create mode 100644 node_modules/gray-matter/node_modules/.bin/js-yaml.ps1 create mode 100644 node_modules/gray-matter/node_modules/argparse/CHANGELOG.md create mode 100644 node_modules/gray-matter/node_modules/argparse/LICENSE create mode 100644 node_modules/gray-matter/node_modules/argparse/README.md create mode 100644 node_modules/gray-matter/node_modules/argparse/index.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/append.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/append/constant.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/count.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/help.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/store.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/store/constant.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/store/false.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/store/true.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/subparsers.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action/version.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/action_container.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/argparse.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/argument/error.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/argument/exclusive.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/argument/group.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/argument_parser.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/const.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/help/added_formatters.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/help/formatter.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/namespace.js create mode 100644 node_modules/gray-matter/node_modules/argparse/lib/utils.js create mode 100644 node_modules/gray-matter/node_modules/argparse/package.json create mode 100644 node_modules/gray-matter/node_modules/js-yaml/LICENSE create mode 100644 node_modules/gray-matter/node_modules/js-yaml/README.md create mode 100644 node_modules/gray-matter/node_modules/js-yaml/bin/js-yaml.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/dist/js-yaml.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/dist/js-yaml.min.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/index.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/common.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/dumper.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/exception.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/loader.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/mark.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/schema.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/schema/core.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/schema/default_full.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/schema/json.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/binary.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/bool.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/float.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/int.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/js/function.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/map.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/merge.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/null.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/omap.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/pairs.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/seq.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/set.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/str.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/lib/js-yaml/type/timestamp.js create mode 100644 node_modules/gray-matter/node_modules/js-yaml/package.json create mode 100644 node_modules/gray-matter/package.json create mode 100644 node_modules/htmlparser2/LICENSE create mode 100644 node_modules/htmlparser2/README.md create mode 100644 node_modules/htmlparser2/lib/FeedHandler.d.ts create mode 100644 node_modules/htmlparser2/lib/FeedHandler.d.ts.map create mode 100644 node_modules/htmlparser2/lib/FeedHandler.js create mode 100644 node_modules/htmlparser2/lib/Parser.d.ts create mode 100644 node_modules/htmlparser2/lib/Parser.d.ts.map create mode 100644 node_modules/htmlparser2/lib/Parser.js create mode 100644 node_modules/htmlparser2/lib/Tokenizer.d.ts create mode 100644 node_modules/htmlparser2/lib/Tokenizer.d.ts.map create mode 100644 node_modules/htmlparser2/lib/Tokenizer.js create mode 100644 node_modules/htmlparser2/lib/WritableStream.d.ts create mode 100644 node_modules/htmlparser2/lib/WritableStream.d.ts.map create mode 100644 node_modules/htmlparser2/lib/WritableStream.js create mode 100644 node_modules/htmlparser2/lib/index.d.ts create mode 100644 node_modules/htmlparser2/lib/index.d.ts.map create mode 100644 node_modules/htmlparser2/lib/index.js create mode 100644 node_modules/htmlparser2/node_modules/entities/LICENSE create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/decode.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/decode.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/decode.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/decode_codepoint.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/decode_codepoint.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/decode_codepoint.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/encode-trie.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/encode-trie.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/encode-trie.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/encode.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/encode.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/encode.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/generated/decode-data-html.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/generated/decode-data-html.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/generated/decode-data-html.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/generated/decode-data-xml.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/generated/decode-data-xml.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/index.d.ts create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/index.d.ts.map create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/index.js create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/maps/entities.json create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/maps/legacy.json create mode 100644 node_modules/htmlparser2/node_modules/entities/lib/maps/xml.json create mode 100644 node_modules/htmlparser2/node_modules/entities/package.json create mode 100644 node_modules/htmlparser2/node_modules/entities/readme.md create mode 100644 node_modules/htmlparser2/package.json create mode 100644 node_modules/http-equiv-refresh/README.md create mode 100644 node_modules/http-equiv-refresh/index-es5.js create mode 100644 node_modules/http-equiv-refresh/index-es5.js.map create mode 100644 node_modules/http-equiv-refresh/index.js create mode 100644 node_modules/http-equiv-refresh/license create mode 100644 node_modules/http-equiv-refresh/package.json create mode 100644 node_modules/http-errors/HISTORY.md create mode 100644 node_modules/http-errors/LICENSE create mode 100644 node_modules/http-errors/README.md create mode 100644 node_modules/http-errors/index.js create mode 100644 node_modules/http-errors/package.json create mode 100644 node_modules/inherits/LICENSE create mode 100644 node_modules/inherits/README.md create mode 100644 node_modules/inherits/inherits.js create mode 100644 node_modules/inherits/inherits_browser.js create mode 100644 node_modules/inherits/package.json create mode 100644 node_modules/is-alphabetical/index.d.ts create mode 100644 node_modules/is-alphabetical/index.js create mode 100644 node_modules/is-alphabetical/license create mode 100644 node_modules/is-alphabetical/package.json create mode 100644 node_modules/is-alphabetical/readme.md create mode 100644 node_modules/is-alphanumerical/index.d.ts create mode 100644 node_modules/is-alphanumerical/index.js create mode 100644 node_modules/is-alphanumerical/license create mode 100644 node_modules/is-alphanumerical/package.json create mode 100644 node_modules/is-alphanumerical/readme.md create mode 100644 node_modules/is-binary-path/index.d.ts create mode 100644 node_modules/is-binary-path/index.js create mode 100644 node_modules/is-binary-path/license create mode 100644 node_modules/is-binary-path/package.json create mode 100644 node_modules/is-binary-path/readme.md create mode 100644 node_modules/is-decimal/index.d.ts create mode 100644 node_modules/is-decimal/index.js create mode 100644 node_modules/is-decimal/license create mode 100644 node_modules/is-decimal/package.json create mode 100644 node_modules/is-decimal/readme.md create mode 100644 node_modules/is-extendable/LICENSE create mode 100644 node_modules/is-extendable/README.md create mode 100644 node_modules/is-extendable/index.js create mode 100644 node_modules/is-extendable/package.json create mode 100644 node_modules/is-extglob/LICENSE create mode 100644 node_modules/is-extglob/README.md create mode 100644 node_modules/is-extglob/index.js create mode 100644 node_modules/is-extglob/package.json create mode 100644 node_modules/is-glob/LICENSE create mode 100644 node_modules/is-glob/README.md create mode 100644 node_modules/is-glob/index.js create mode 100644 node_modules/is-glob/package.json create mode 100644 node_modules/is-json/.npmignore create mode 100644 node_modules/is-json/.travis.yml create mode 100644 node_modules/is-json/LICENSE create mode 100644 node_modules/is-json/README.md create mode 100644 node_modules/is-json/index.js create mode 100644 node_modules/is-json/package.json create mode 100644 node_modules/is-json/test/index.js create mode 100644 node_modules/is-number/LICENSE create mode 100644 node_modules/is-number/README.md create mode 100644 node_modules/is-number/index.js create mode 100644 node_modules/is-number/package.json create mode 100644 node_modules/iso-639-1/.eslintrc create mode 100644 node_modules/iso-639-1/.nvmrc create mode 100644 node_modules/iso-639-1/.prettierrc create mode 100644 node_modules/iso-639-1/.travis.yml create mode 100644 node_modules/iso-639-1/.vscode/settings.json create mode 100644 node_modules/iso-639-1/CHANGELOG.md create mode 100644 node_modules/iso-639-1/LICENSE create mode 100644 node_modules/iso-639-1/build/index.js create mode 100644 node_modules/iso-639-1/index.d.ts create mode 100644 node_modules/iso-639-1/package.json create mode 100644 node_modules/iso-639-1/readme.md create mode 100644 node_modules/iso-639-1/src/data.js create mode 100644 node_modules/iso-639-1/src/index.js create mode 100644 node_modules/iso-639-1/test/test.js create mode 100644 node_modules/iso-639-1/webpack.config.js create mode 100644 node_modules/js-yaml/LICENSE create mode 100644 node_modules/js-yaml/README.md create mode 100644 node_modules/js-yaml/bin/js-yaml.js create mode 100644 node_modules/js-yaml/dist/js-yaml.js create mode 100644 node_modules/js-yaml/dist/js-yaml.js.map create mode 100644 node_modules/js-yaml/dist/js-yaml.min.js create mode 100644 node_modules/js-yaml/dist/js-yaml.min.js.map create mode 100644 node_modules/js-yaml/dist/js-yaml.mjs create mode 100644 node_modules/js-yaml/dist/js-yaml.mjs.map create mode 100644 node_modules/js-yaml/index.js create mode 100644 node_modules/js-yaml/lib/common.js create mode 100644 node_modules/js-yaml/lib/dumper.js create mode 100644 node_modules/js-yaml/lib/exception.js create mode 100644 node_modules/js-yaml/lib/index_vite_proxy.tmp.mjs create mode 100644 node_modules/js-yaml/lib/loader.js create mode 100644 node_modules/js-yaml/lib/schema.js create mode 100644 node_modules/js-yaml/lib/schema/core.js create mode 100644 node_modules/js-yaml/lib/schema/default.js create mode 100644 node_modules/js-yaml/lib/schema/failsafe.js create mode 100644 node_modules/js-yaml/lib/schema/json.js create mode 100644 node_modules/js-yaml/lib/snippet.js create mode 100644 node_modules/js-yaml/lib/type.js create mode 100644 node_modules/js-yaml/lib/type/binary.js create mode 100644 node_modules/js-yaml/lib/type/bool.js create mode 100644 node_modules/js-yaml/lib/type/float.js create mode 100644 node_modules/js-yaml/lib/type/int.js create mode 100644 node_modules/js-yaml/lib/type/map.js create mode 100644 node_modules/js-yaml/lib/type/merge.js create mode 100644 node_modules/js-yaml/lib/type/null.js create mode 100644 node_modules/js-yaml/lib/type/omap.js create mode 100644 node_modules/js-yaml/lib/type/pairs.js create mode 100644 node_modules/js-yaml/lib/type/seq.js create mode 100644 node_modules/js-yaml/lib/type/set.js create mode 100644 node_modules/js-yaml/lib/type/str.js create mode 100644 node_modules/js-yaml/lib/type/timestamp.js create mode 100644 node_modules/js-yaml/package.json create mode 100644 node_modules/junk/index.d.ts create mode 100644 node_modules/junk/index.js create mode 100644 node_modules/junk/license create mode 100644 node_modules/junk/package.json create mode 100644 node_modules/junk/readme.md create mode 100644 node_modules/kind-of/CHANGELOG.md create mode 100644 node_modules/kind-of/LICENSE create mode 100644 node_modules/kind-of/README.md create mode 100644 node_modules/kind-of/index.js create mode 100644 node_modules/kind-of/package.json create mode 100644 node_modules/kleur/colors.d.ts create mode 100644 node_modules/kleur/colors.js create mode 100644 node_modules/kleur/colors.mjs create mode 100644 node_modules/kleur/index.d.ts create mode 100644 node_modules/kleur/index.js create mode 100644 node_modules/kleur/index.mjs create mode 100644 node_modules/kleur/license create mode 100644 node_modules/kleur/package.json create mode 100644 node_modules/kleur/readme.md create mode 100644 node_modules/linkify-it/LICENSE create mode 100644 node_modules/linkify-it/README.md create mode 100644 node_modules/linkify-it/build/index.cjs.js create mode 100644 node_modules/linkify-it/index.mjs create mode 100644 node_modules/linkify-it/lib/re.mjs create mode 100644 node_modules/linkify-it/package.json create mode 100644 node_modules/liquidjs/LICENSE create mode 100644 node_modules/liquidjs/README.md create mode 100644 node_modules/liquidjs/bin/liquid.js create mode 100644 node_modules/liquidjs/dist/build/base64-impl-browser.d.ts create mode 100644 node_modules/liquidjs/dist/build/base64-impl-browser.spec.d.ts create mode 100644 node_modules/liquidjs/dist/build/crypto-impl-browser.d.ts create mode 100644 node_modules/liquidjs/dist/build/crypto-impl-browser.spec.d.ts create mode 100644 node_modules/liquidjs/dist/build/fs-impl-browser.d.ts create mode 100644 node_modules/liquidjs/dist/build/fs-impl-browser.spec.d.ts create mode 100644 node_modules/liquidjs/dist/build/streamed-emitter-browser.d.ts create mode 100644 node_modules/liquidjs/dist/build/streamed-emitter-browser.spec.d.ts create mode 100644 node_modules/liquidjs/dist/cache/cache.d.ts create mode 100644 node_modules/liquidjs/dist/cache/index.d.ts create mode 100644 node_modules/liquidjs/dist/cache/lru.d.ts create mode 100644 node_modules/liquidjs/dist/cache/lru.spec.d.ts create mode 100644 node_modules/liquidjs/dist/context/block-mode.d.ts create mode 100644 node_modules/liquidjs/dist/context/context.d.ts create mode 100644 node_modules/liquidjs/dist/context/context.spec.d.ts create mode 100644 node_modules/liquidjs/dist/context/index.d.ts create mode 100644 node_modules/liquidjs/dist/context/scope.d.ts create mode 100644 node_modules/liquidjs/dist/drop/blank-drop.d.ts create mode 100644 node_modules/liquidjs/dist/drop/block-drop.d.ts create mode 100644 node_modules/liquidjs/dist/drop/comparable.d.ts create mode 100644 node_modules/liquidjs/dist/drop/drop.d.ts create mode 100644 node_modules/liquidjs/dist/drop/empty-drop.d.ts create mode 100644 node_modules/liquidjs/dist/drop/forloop-drop.d.ts create mode 100644 node_modules/liquidjs/dist/drop/index.d.ts create mode 100644 node_modules/liquidjs/dist/drop/null-drop.d.ts create mode 100644 node_modules/liquidjs/dist/drop/tablerowloop-drop.d.ts create mode 100644 node_modules/liquidjs/dist/emitters/emitter.d.ts create mode 100644 node_modules/liquidjs/dist/emitters/index.d.ts create mode 100644 node_modules/liquidjs/dist/emitters/keeping-type-emitter.d.ts create mode 100644 node_modules/liquidjs/dist/emitters/simple-emitter.d.ts create mode 100644 node_modules/liquidjs/dist/emitters/streamed-emitter.d.ts create mode 100644 node_modules/liquidjs/dist/filters/array.d.ts create mode 100644 node_modules/liquidjs/dist/filters/base64-impl.d.ts create mode 100644 node_modules/liquidjs/dist/filters/base64.d.ts create mode 100644 node_modules/liquidjs/dist/filters/crypto-impl.d.ts create mode 100644 node_modules/liquidjs/dist/filters/crypto.d.ts create mode 100644 node_modules/liquidjs/dist/filters/date.d.ts create mode 100644 node_modules/liquidjs/dist/filters/html.d.ts create mode 100644 node_modules/liquidjs/dist/filters/index.d.ts create mode 100644 node_modules/liquidjs/dist/filters/math.d.ts create mode 100644 node_modules/liquidjs/dist/filters/misc.d.ts create mode 100644 node_modules/liquidjs/dist/filters/string.d.ts create mode 100644 node_modules/liquidjs/dist/filters/url.d.ts create mode 100644 node_modules/liquidjs/dist/fs/fs-impl.d.ts create mode 100644 node_modules/liquidjs/dist/fs/fs-impl.spec.d.ts create mode 100644 node_modules/liquidjs/dist/fs/fs.d.ts create mode 100644 node_modules/liquidjs/dist/fs/index.d.ts create mode 100644 node_modules/liquidjs/dist/fs/loader.d.ts create mode 100644 node_modules/liquidjs/dist/fs/loader.spec.d.ts create mode 100644 node_modules/liquidjs/dist/fs/map-fs.d.ts create mode 100644 node_modules/liquidjs/dist/fs/map-fs.spec.d.ts create mode 100644 node_modules/liquidjs/dist/fs/node-require.d.ts create mode 100644 node_modules/liquidjs/dist/index.d.ts create mode 100644 node_modules/liquidjs/dist/liquid-options.d.ts create mode 100644 node_modules/liquidjs/dist/liquid-options.spec.d.ts create mode 100644 node_modules/liquidjs/dist/liquid.browser.min.js create mode 100644 node_modules/liquidjs/dist/liquid.browser.min.js.map create mode 100644 node_modules/liquidjs/dist/liquid.browser.mjs create mode 100644 node_modules/liquidjs/dist/liquid.browser.umd.js create mode 100644 node_modules/liquidjs/dist/liquid.browser.umd.js.map create mode 100644 node_modules/liquidjs/dist/liquid.d.ts create mode 100644 node_modules/liquidjs/dist/liquid.node.js create mode 100644 node_modules/liquidjs/dist/liquid.node.mjs create mode 100644 node_modules/liquidjs/dist/parser/filter-arg.d.ts create mode 100644 node_modules/liquidjs/dist/parser/index.d.ts create mode 100644 node_modules/liquidjs/dist/parser/parse-stream.d.ts create mode 100644 node_modules/liquidjs/dist/parser/parse-stream.spec.d.ts create mode 100644 node_modules/liquidjs/dist/parser/parser.d.ts create mode 100644 node_modules/liquidjs/dist/parser/parser.spec.d.ts create mode 100644 node_modules/liquidjs/dist/parser/token-kind.d.ts create mode 100644 node_modules/liquidjs/dist/parser/tokenizer.d.ts create mode 100644 node_modules/liquidjs/dist/parser/tokenizer.spec.d.ts create mode 100644 node_modules/liquidjs/dist/parser/whitespace-ctrl.d.ts create mode 100644 node_modules/liquidjs/dist/render/boolean.d.ts create mode 100644 node_modules/liquidjs/dist/render/boolean.spec.d.ts create mode 100644 node_modules/liquidjs/dist/render/expression.d.ts create mode 100644 node_modules/liquidjs/dist/render/expression.spec.d.ts create mode 100644 node_modules/liquidjs/dist/render/index.d.ts create mode 100644 node_modules/liquidjs/dist/render/operator.d.ts create mode 100644 node_modules/liquidjs/dist/render/render.d.ts create mode 100644 node_modules/liquidjs/dist/render/render.spec.d.ts create mode 100644 node_modules/liquidjs/dist/render/string.d.ts create mode 100644 node_modules/liquidjs/dist/render/string.spec.d.ts create mode 100644 node_modules/liquidjs/dist/tags/assign.d.ts create mode 100644 node_modules/liquidjs/dist/tags/block.d.ts create mode 100644 node_modules/liquidjs/dist/tags/break.d.ts create mode 100644 node_modules/liquidjs/dist/tags/capture.d.ts create mode 100644 node_modules/liquidjs/dist/tags/case.d.ts create mode 100644 node_modules/liquidjs/dist/tags/comment.d.ts create mode 100644 node_modules/liquidjs/dist/tags/continue.d.ts create mode 100644 node_modules/liquidjs/dist/tags/cycle.d.ts create mode 100644 node_modules/liquidjs/dist/tags/decrement.d.ts create mode 100644 node_modules/liquidjs/dist/tags/echo.d.ts create mode 100644 node_modules/liquidjs/dist/tags/for.d.ts create mode 100644 node_modules/liquidjs/dist/tags/if.d.ts create mode 100644 node_modules/liquidjs/dist/tags/include.d.ts create mode 100644 node_modules/liquidjs/dist/tags/increment.d.ts create mode 100644 node_modules/liquidjs/dist/tags/index.d.ts create mode 100644 node_modules/liquidjs/dist/tags/inline-comment.d.ts create mode 100644 node_modules/liquidjs/dist/tags/layout.d.ts create mode 100644 node_modules/liquidjs/dist/tags/liquid.d.ts create mode 100644 node_modules/liquidjs/dist/tags/raw.d.ts create mode 100644 node_modules/liquidjs/dist/tags/render.d.ts create mode 100644 node_modules/liquidjs/dist/tags/tablerow.d.ts create mode 100644 node_modules/liquidjs/dist/tags/unless.d.ts create mode 100644 node_modules/liquidjs/dist/template/analysis.d.ts create mode 100644 node_modules/liquidjs/dist/template/analysis.spec.d.ts create mode 100644 node_modules/liquidjs/dist/template/filter-impl-options.d.ts create mode 100644 node_modules/liquidjs/dist/template/filter.d.ts create mode 100644 node_modules/liquidjs/dist/template/filter.spec.d.ts create mode 100644 node_modules/liquidjs/dist/template/hash.d.ts create mode 100644 node_modules/liquidjs/dist/template/hash.spec.d.ts create mode 100644 node_modules/liquidjs/dist/template/html.d.ts create mode 100644 node_modules/liquidjs/dist/template/index.d.ts create mode 100644 node_modules/liquidjs/dist/template/output.d.ts create mode 100644 node_modules/liquidjs/dist/template/output.spec.d.ts create mode 100644 node_modules/liquidjs/dist/template/tag-options-adapter.d.ts create mode 100644 node_modules/liquidjs/dist/template/tag.d.ts create mode 100644 node_modules/liquidjs/dist/template/template-impl.d.ts create mode 100644 node_modules/liquidjs/dist/template/template.d.ts create mode 100644 node_modules/liquidjs/dist/template/value.d.ts create mode 100644 node_modules/liquidjs/dist/template/value.spec.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/delimited-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/filter-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/filtered-value-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/hash-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/html-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/identifier-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/index.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/liquid-tag-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/literal-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/number-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/operator-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/output-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/property-access-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/quoted-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/range-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/tag-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/top-level-token.d.ts create mode 100644 node_modules/liquidjs/dist/tokens/value-token.d.ts create mode 100644 node_modules/liquidjs/dist/util/assert.d.ts create mode 100644 node_modules/liquidjs/dist/util/assert.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/async.d.ts create mode 100644 node_modules/liquidjs/dist/util/async.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/character.d.ts create mode 100644 node_modules/liquidjs/dist/util/error.d.ts create mode 100644 node_modules/liquidjs/dist/util/error.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/index.d.ts create mode 100644 node_modules/liquidjs/dist/util/intl.d.ts create mode 100644 node_modules/liquidjs/dist/util/limiter.d.ts create mode 100644 node_modules/liquidjs/dist/util/liquid-date.d.ts create mode 100644 node_modules/liquidjs/dist/util/liquid-date.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/literal.d.ts create mode 100644 node_modules/liquidjs/dist/util/operator-trie.d.ts create mode 100644 node_modules/liquidjs/dist/util/performance.d.ts create mode 100644 node_modules/liquidjs/dist/util/performance.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/strftime.d.ts create mode 100644 node_modules/liquidjs/dist/util/strftime.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/type-guards.d.ts create mode 100644 node_modules/liquidjs/dist/util/type-guards.spec.d.ts create mode 100644 node_modules/liquidjs/dist/util/underscore.d.ts create mode 100644 node_modules/liquidjs/dist/util/underscore.spec.d.ts create mode 100644 node_modules/liquidjs/package.json create mode 100644 node_modules/list-to-array/.npmignore create mode 100644 node_modules/list-to-array/LICENSE create mode 100644 node_modules/list-to-array/README.md create mode 100644 node_modules/list-to-array/index.js create mode 100644 node_modules/list-to-array/package.json create mode 100644 node_modules/list-to-array/tests.js create mode 100644 node_modules/luxon/LICENSE.md create mode 100644 node_modules/luxon/README.md create mode 100644 node_modules/luxon/build/amd/luxon.js create mode 100644 node_modules/luxon/build/amd/luxon.js.map create mode 100644 node_modules/luxon/build/cjs-browser/luxon.js create mode 100644 node_modules/luxon/build/cjs-browser/luxon.js.map create mode 100644 node_modules/luxon/build/es6/luxon.mjs create mode 100644 node_modules/luxon/build/es6/luxon.mjs.map create mode 100644 node_modules/luxon/build/global/luxon.js create mode 100644 node_modules/luxon/build/global/luxon.js.map create mode 100644 node_modules/luxon/build/global/luxon.min.js create mode 100644 node_modules/luxon/build/global/luxon.min.js.map create mode 100644 node_modules/luxon/build/node/luxon.js create mode 100644 node_modules/luxon/build/node/luxon.js.map create mode 100644 node_modules/luxon/package.json create mode 100644 node_modules/luxon/src/datetime.js create mode 100644 node_modules/luxon/src/duration.js create mode 100644 node_modules/luxon/src/errors.js create mode 100644 node_modules/luxon/src/impl/conversions.js create mode 100644 node_modules/luxon/src/impl/diff.js create mode 100644 node_modules/luxon/src/impl/digits.js create mode 100644 node_modules/luxon/src/impl/english.js create mode 100644 node_modules/luxon/src/impl/formats.js create mode 100644 node_modules/luxon/src/impl/formatter.js create mode 100644 node_modules/luxon/src/impl/invalid.js create mode 100644 node_modules/luxon/src/impl/locale.js create mode 100644 node_modules/luxon/src/impl/regexParser.js create mode 100644 node_modules/luxon/src/impl/tokenParser.js create mode 100644 node_modules/luxon/src/impl/util.js create mode 100644 node_modules/luxon/src/impl/zoneUtil.js create mode 100644 node_modules/luxon/src/info.js create mode 100644 node_modules/luxon/src/interval.js create mode 100644 node_modules/luxon/src/luxon.js create mode 100644 node_modules/luxon/src/package.json create mode 100644 node_modules/luxon/src/settings.js create mode 100644 node_modules/luxon/src/zone.js create mode 100644 node_modules/luxon/src/zones/IANAZone.js create mode 100644 node_modules/luxon/src/zones/fixedOffsetZone.js create mode 100644 node_modules/luxon/src/zones/invalidZone.js create mode 100644 node_modules/luxon/src/zones/systemZone.js create mode 100644 node_modules/markdown-it/LICENSE create mode 100644 node_modules/markdown-it/README.md create mode 100644 node_modules/markdown-it/bin/markdown-it.mjs create mode 100644 node_modules/markdown-it/dist/index.cjs.js create mode 100644 node_modules/markdown-it/dist/index.cjs.js.map create mode 100644 node_modules/markdown-it/dist/markdown-it.js create mode 100644 node_modules/markdown-it/dist/markdown-it.js.map create mode 100644 node_modules/markdown-it/dist/markdown-it.min.js create mode 100644 node_modules/markdown-it/dist/markdown-it.min.js.map create mode 100644 node_modules/markdown-it/index.mjs create mode 100644 node_modules/markdown-it/lib/common/html_blocks.mjs create mode 100644 node_modules/markdown-it/lib/common/html_re.mjs create mode 100644 node_modules/markdown-it/lib/common/utils.mjs create mode 100644 node_modules/markdown-it/lib/helpers/index.mjs create mode 100644 node_modules/markdown-it/lib/helpers/parse_link_destination.mjs create mode 100644 node_modules/markdown-it/lib/helpers/parse_link_label.mjs create mode 100644 node_modules/markdown-it/lib/helpers/parse_link_title.mjs create mode 100644 node_modules/markdown-it/lib/index.mjs create mode 100644 node_modules/markdown-it/lib/parser_block.mjs create mode 100644 node_modules/markdown-it/lib/parser_core.mjs create mode 100644 node_modules/markdown-it/lib/parser_inline.mjs create mode 100644 node_modules/markdown-it/lib/presets/commonmark.mjs create mode 100644 node_modules/markdown-it/lib/presets/default.mjs create mode 100644 node_modules/markdown-it/lib/presets/zero.mjs create mode 100644 node_modules/markdown-it/lib/renderer.mjs create mode 100644 node_modules/markdown-it/lib/ruler.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/blockquote.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/code.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/fence.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/heading.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/hr.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/html_block.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/lheading.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/list.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/paragraph.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/reference.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/state_block.mjs create mode 100644 node_modules/markdown-it/lib/rules_block/table.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/block.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/inline.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/linkify.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/normalize.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/replacements.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/smartquotes.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/state_core.mjs create mode 100644 node_modules/markdown-it/lib/rules_core/text_join.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/autolink.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/backticks.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/emphasis.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/entity.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/escape.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/fragments_join.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/html_inline.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/image.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/link.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/linkify.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/newline.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/state_inline.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/strikethrough.mjs create mode 100644 node_modules/markdown-it/lib/rules_inline/text.mjs create mode 100644 node_modules/markdown-it/lib/token.mjs create mode 100644 node_modules/markdown-it/node_modules/entities/LICENSE create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode_codepoint.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode_codepoint.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode_codepoint.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/decode_codepoint.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/encode.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/encode.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/encode.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/encode.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/escape.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/escape.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/escape.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/escape.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode_codepoint.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode_codepoint.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode_codepoint.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/decode_codepoint.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/encode.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/encode.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/encode.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/encode.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/escape.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/escape.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/escape.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/escape.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-html.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-html.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-html.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-xml.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/decode-data-xml.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/encode-html.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/encode-html.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/encode-html.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/generated/encode-html.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/index.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/index.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/index.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/index.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/esm/package.json create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-html.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-html.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-html.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-html.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-xml.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-xml.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/decode-data-xml.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/encode-html.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/encode-html.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/encode-html.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/generated/encode-html.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/index.d.ts create mode 100644 node_modules/markdown-it/node_modules/entities/lib/index.d.ts.map create mode 100644 node_modules/markdown-it/node_modules/entities/lib/index.js create mode 100644 node_modules/markdown-it/node_modules/entities/lib/index.js.map create mode 100644 node_modules/markdown-it/node_modules/entities/package.json create mode 100644 node_modules/markdown-it/node_modules/entities/readme.md create mode 100644 node_modules/markdown-it/package.json create mode 100644 node_modules/mdurl/LICENSE create mode 100644 node_modules/mdurl/README.md create mode 100644 node_modules/mdurl/build/index.cjs.js create mode 100644 node_modules/mdurl/index.mjs create mode 100644 node_modules/mdurl/lib/decode.mjs create mode 100644 node_modules/mdurl/lib/encode.mjs create mode 100644 node_modules/mdurl/lib/format.mjs create mode 100644 node_modules/mdurl/lib/index.d.ts create mode 100644 node_modules/mdurl/lib/parse.mjs create mode 100644 node_modules/mdurl/package.json create mode 100644 node_modules/mime-db/HISTORY.md create mode 100644 node_modules/mime-db/LICENSE create mode 100644 node_modules/mime-db/README.md create mode 100644 node_modules/mime-db/db.json create mode 100644 node_modules/mime-db/index.js create mode 100644 node_modules/mime-db/package.json create mode 100644 node_modules/mime-types/HISTORY.md create mode 100644 node_modules/mime-types/LICENSE create mode 100644 node_modules/mime-types/README.md create mode 100644 node_modules/mime-types/index.js create mode 100644 node_modules/mime-types/mimeScore.js create mode 100644 node_modules/mime-types/package.json create mode 100644 node_modules/mime/CHANGELOG.md create mode 100644 node_modules/mime/LICENSE create mode 100644 node_modules/mime/Mime.js create mode 100644 node_modules/mime/README.md create mode 100644 node_modules/mime/cli.js create mode 100644 node_modules/mime/index.js create mode 100644 node_modules/mime/lite.js create mode 100644 node_modules/mime/package.json create mode 100644 node_modules/mime/types/other.js create mode 100644 node_modules/mime/types/standard.js create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/minimatch.js create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/minimist/.eslintrc create mode 100644 node_modules/minimist/.github/FUNDING.yml create mode 100644 node_modules/minimist/.nycrc create mode 100644 node_modules/minimist/CHANGELOG.md create mode 100644 node_modules/minimist/LICENSE create mode 100644 node_modules/minimist/README.md create mode 100644 node_modules/minimist/example/parse.js create mode 100644 node_modules/minimist/index.js create mode 100644 node_modules/minimist/package.json create mode 100644 node_modules/minimist/test/all_bool.js create mode 100644 node_modules/minimist/test/bool.js create mode 100644 node_modules/minimist/test/dash.js create mode 100644 node_modules/minimist/test/default_bool.js create mode 100644 node_modules/minimist/test/dotted.js create mode 100644 node_modules/minimist/test/kv_short.js create mode 100644 node_modules/minimist/test/long.js create mode 100644 node_modules/minimist/test/num.js create mode 100644 node_modules/minimist/test/parse.js create mode 100644 node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/minimist/test/proto.js create mode 100644 node_modules/minimist/test/short.js create mode 100644 node_modules/minimist/test/stop_early.js create mode 100644 node_modules/minimist/test/unknown.js create mode 100644 node_modules/minimist/test/whitespace.js create mode 100644 node_modules/minipass/LICENSE.md create mode 100644 node_modules/minipass/README.md create mode 100644 node_modules/minipass/dist/commonjs/index.d.ts create mode 100644 node_modules/minipass/dist/commonjs/index.d.ts.map create mode 100644 node_modules/minipass/dist/commonjs/index.js create mode 100644 node_modules/minipass/dist/commonjs/index.js.map create mode 100644 node_modules/minipass/dist/commonjs/package.json create mode 100644 node_modules/minipass/dist/esm/index.d.ts create mode 100644 node_modules/minipass/dist/esm/index.d.ts.map create mode 100644 node_modules/minipass/dist/esm/index.js create mode 100644 node_modules/minipass/dist/esm/index.js.map create mode 100644 node_modules/minipass/dist/esm/package.json create mode 100644 node_modules/minipass/package.json create mode 100644 node_modules/moo/LICENSE create mode 100644 node_modules/moo/README.md create mode 100644 node_modules/moo/moo.js create mode 100644 node_modules/moo/package.json create mode 100644 node_modules/morphdom/CHANGELOG.md create mode 100644 node_modules/morphdom/LICENSE create mode 100644 node_modules/morphdom/README.md create mode 100644 node_modules/morphdom/dist/morphdom-esm.js create mode 100644 node_modules/morphdom/dist/morphdom-factory.js create mode 100644 node_modules/morphdom/dist/morphdom-umd.js create mode 100644 node_modules/morphdom/dist/morphdom-umd.min.js create mode 100644 node_modules/morphdom/dist/morphdom.js create mode 100644 node_modules/morphdom/docs/old-benchmark.md create mode 100644 node_modules/morphdom/docs/virtual-dom.md create mode 100644 node_modules/morphdom/factory.js create mode 100644 node_modules/morphdom/index.d.ts create mode 100644 node_modules/morphdom/package.json create mode 100644 node_modules/morphdom/src/index.js create mode 100644 node_modules/morphdom/src/morphAttrs.js create mode 100644 node_modules/morphdom/src/morphdom.js create mode 100644 node_modules/morphdom/src/specialElHandlers.js create mode 100644 node_modules/morphdom/src/util.js create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/node-retrieve-globals/LICENSE create mode 100644 node_modules/node-retrieve-globals/README.md create mode 100644 node_modules/node-retrieve-globals/package.json create mode 100644 node_modules/node-retrieve-globals/retrieveGlobals.js create mode 100644 node_modules/node-retrieve-globals/util/getWorkingDirectory.js create mode 100644 node_modules/node-retrieve-globals/util/vmModules.js create mode 100644 node_modules/normalize-path/LICENSE create mode 100644 node_modules/normalize-path/README.md create mode 100644 node_modules/normalize-path/index.js create mode 100644 node_modules/normalize-path/package.json create mode 100644 node_modules/nunjucks/LICENSE create mode 100644 node_modules/nunjucks/README.md create mode 100644 node_modules/nunjucks/bin/precompile create mode 100644 node_modules/nunjucks/bin/precompile.cmd create mode 100644 node_modules/nunjucks/browser/nunjucks-slim.js create mode 100644 node_modules/nunjucks/browser/nunjucks-slim.js.map create mode 100644 node_modules/nunjucks/browser/nunjucks-slim.min.js create mode 100644 node_modules/nunjucks/browser/nunjucks-slim.min.js.map create mode 100644 node_modules/nunjucks/browser/nunjucks.js create mode 100644 node_modules/nunjucks/browser/nunjucks.js.map create mode 100644 node_modules/nunjucks/browser/nunjucks.min.js create mode 100644 node_modules/nunjucks/browser/nunjucks.min.js.map create mode 100644 node_modules/nunjucks/index.js create mode 100644 node_modules/nunjucks/node_modules/commander/CHANGELOG.md create mode 100644 node_modules/nunjucks/node_modules/commander/LICENSE create mode 100644 node_modules/nunjucks/node_modules/commander/Readme.md create mode 100644 node_modules/nunjucks/node_modules/commander/index.js create mode 100644 node_modules/nunjucks/node_modules/commander/package.json create mode 100644 node_modules/nunjucks/node_modules/commander/typings/index.d.ts create mode 100644 node_modules/nunjucks/package.json create mode 100644 node_modules/nunjucks/src/compiler.js create mode 100644 node_modules/nunjucks/src/environment.js create mode 100644 node_modules/nunjucks/src/express-app.js create mode 100644 node_modules/nunjucks/src/filters.js create mode 100644 node_modules/nunjucks/src/globals.js create mode 100644 node_modules/nunjucks/src/jinja-compat.js create mode 100644 node_modules/nunjucks/src/lexer.js create mode 100644 node_modules/nunjucks/src/lib.js create mode 100644 node_modules/nunjucks/src/loader.js create mode 100644 node_modules/nunjucks/src/loaders.js create mode 100644 node_modules/nunjucks/src/node-loaders.js create mode 100644 node_modules/nunjucks/src/nodes.js create mode 100644 node_modules/nunjucks/src/object.js create mode 100644 node_modules/nunjucks/src/parser.js create mode 100644 node_modules/nunjucks/src/precompile-global.js create mode 100644 node_modules/nunjucks/src/precompile.js create mode 100644 node_modules/nunjucks/src/precompiled-loader.js create mode 100644 node_modules/nunjucks/src/runtime.js create mode 100644 node_modules/nunjucks/src/tests.js create mode 100644 node_modules/nunjucks/src/transformer.js create mode 100644 node_modules/nunjucks/src/web-loaders.js create mode 100644 node_modules/on-finished/HISTORY.md create mode 100644 node_modules/on-finished/LICENSE create mode 100644 node_modules/on-finished/README.md create mode 100644 node_modules/on-finished/index.js create mode 100644 node_modules/on-finished/package.json create mode 100644 node_modules/parse-srcset/.jscs.json create mode 100644 node_modules/parse-srcset/.jshintrc create mode 100644 node_modules/parse-srcset/.npmignore create mode 100644 node_modules/parse-srcset/LICENSE create mode 100644 node_modules/parse-srcset/README.md create mode 100644 node_modules/parse-srcset/package.json create mode 100644 node_modules/parse-srcset/src/parse-srcset.js create mode 100644 node_modules/parse-srcset/tests/he.js create mode 100644 node_modules/parse-srcset/tests/intern.js create mode 100644 node_modules/parse-srcset/tests/unit/ps.js create mode 100644 node_modules/parseurl/HISTORY.md create mode 100644 node_modules/parseurl/LICENSE create mode 100644 node_modules/parseurl/README.md create mode 100644 node_modules/parseurl/index.js create mode 100644 node_modules/parseurl/package.json create mode 100644 node_modules/picomatch/LICENSE create mode 100644 node_modules/picomatch/README.md create mode 100644 node_modules/picomatch/index.js create mode 100644 node_modules/picomatch/lib/constants.js create mode 100644 node_modules/picomatch/lib/parse.js create mode 100644 node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/picomatch/lib/scan.js create mode 100644 node_modules/picomatch/lib/utils.js create mode 100644 node_modules/picomatch/package.json create mode 100644 node_modules/picomatch/posix.js create mode 100644 node_modules/please-upgrade-node/.eslintrc.js create mode 100644 node_modules/please-upgrade-node/.github/FUNDING.yml create mode 100644 node_modules/please-upgrade-node/LICENSE create mode 100644 node_modules/please-upgrade-node/README.md create mode 100644 node_modules/please-upgrade-node/index.d.ts create mode 100644 node_modules/please-upgrade-node/index.js create mode 100644 node_modules/please-upgrade-node/package.json create mode 100644 node_modules/posthtml-match-helper/LICENSE create mode 100644 node_modules/posthtml-match-helper/README.md create mode 100644 node_modules/posthtml-match-helper/lib/index.d.ts create mode 100644 node_modules/posthtml-match-helper/lib/index.js create mode 100644 node_modules/posthtml-match-helper/package.json create mode 100644 node_modules/posthtml-parser/dist/chunk.2UQLUWPH.js create mode 100644 node_modules/posthtml-parser/dist/index.d.ts create mode 100644 node_modules/posthtml-parser/dist/index.js create mode 100644 node_modules/posthtml-parser/dist/location-tracker.d.ts create mode 100644 node_modules/posthtml-parser/dist/location-tracker.js create mode 100644 node_modules/posthtml-parser/license create mode 100644 node_modules/posthtml-parser/package.json create mode 100644 node_modules/posthtml-parser/readme.md create mode 100644 node_modules/posthtml-render/changelog.md create mode 100644 node_modules/posthtml-render/dist/index.d.ts create mode 100644 node_modules/posthtml-render/dist/index.js create mode 100644 node_modules/posthtml-render/license create mode 100644 node_modules/posthtml-render/package.json create mode 100644 node_modules/posthtml-render/readme.md create mode 100644 node_modules/posthtml/lib/api.js create mode 100644 node_modules/posthtml/lib/index.js create mode 100644 node_modules/posthtml/license create mode 100644 node_modules/posthtml/package.json create mode 100644 node_modules/posthtml/readme.md create mode 100644 node_modules/posthtml/types/posthtml.d.ts create mode 100644 node_modules/prr/.jshintrc create mode 100644 node_modules/prr/.npmignore create mode 100644 node_modules/prr/.travis.yml create mode 100644 node_modules/prr/LICENSE.md create mode 100644 node_modules/prr/README.md create mode 100644 node_modules/prr/package.json create mode 100644 node_modules/prr/prr.js create mode 100644 node_modules/prr/test.js create mode 100644 node_modules/punycode.js/LICENSE-MIT.txt create mode 100644 node_modules/punycode.js/README.md create mode 100644 node_modules/punycode.js/package.json create mode 100644 node_modules/punycode.js/punycode.es6.js create mode 100644 node_modules/punycode.js/punycode.js create mode 100644 node_modules/range-parser/HISTORY.md create mode 100644 node_modules/range-parser/LICENSE create mode 100644 node_modules/range-parser/README.md create mode 100644 node_modules/range-parser/index.js create mode 100644 node_modules/range-parser/package.json create mode 100644 node_modules/readdirp/LICENSE create mode 100644 node_modules/readdirp/README.md create mode 100644 node_modules/readdirp/index.d.ts create mode 100644 node_modules/readdirp/index.js create mode 100644 node_modules/readdirp/node_modules/picomatch/LICENSE create mode 100644 node_modules/readdirp/node_modules/picomatch/README.md create mode 100644 node_modules/readdirp/node_modules/picomatch/index.js create mode 100644 node_modules/readdirp/node_modules/picomatch/lib/constants.js create mode 100644 node_modules/readdirp/node_modules/picomatch/lib/parse.js create mode 100644 node_modules/readdirp/node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/readdirp/node_modules/picomatch/lib/scan.js create mode 100644 node_modules/readdirp/node_modules/picomatch/lib/utils.js create mode 100644 node_modules/readdirp/node_modules/picomatch/package.json create mode 100644 node_modules/readdirp/package.json create mode 100644 node_modules/section-matter/LICENSE create mode 100644 node_modules/section-matter/README.md create mode 100644 node_modules/section-matter/index.js create mode 100644 node_modules/section-matter/package.json create mode 100644 node_modules/semver-compare/.travis.yml create mode 100644 node_modules/semver-compare/LICENSE create mode 100644 node_modules/semver-compare/example/cmp.js create mode 100644 node_modules/semver-compare/example/lex.js create mode 100644 node_modules/semver-compare/index.js create mode 100644 node_modules/semver-compare/package.json create mode 100644 node_modules/semver-compare/readme.markdown create mode 100644 node_modules/semver-compare/test/cmp.js create mode 100644 node_modules/semver/LICENSE create mode 100644 node_modules/semver/README.md create mode 100644 node_modules/semver/bin/semver.js create mode 100644 node_modules/semver/classes/comparator.js create mode 100644 node_modules/semver/classes/index.js create mode 100644 node_modules/semver/classes/range.js create mode 100644 node_modules/semver/classes/semver.js create mode 100644 node_modules/semver/functions/clean.js create mode 100644 node_modules/semver/functions/cmp.js create mode 100644 node_modules/semver/functions/coerce.js create mode 100644 node_modules/semver/functions/compare-build.js create mode 100644 node_modules/semver/functions/compare-loose.js create mode 100644 node_modules/semver/functions/compare.js create mode 100644 node_modules/semver/functions/diff.js create mode 100644 node_modules/semver/functions/eq.js create mode 100644 node_modules/semver/functions/gt.js create mode 100644 node_modules/semver/functions/gte.js create mode 100644 node_modules/semver/functions/inc.js create mode 100644 node_modules/semver/functions/lt.js create mode 100644 node_modules/semver/functions/lte.js create mode 100644 node_modules/semver/functions/major.js create mode 100644 node_modules/semver/functions/minor.js create mode 100644 node_modules/semver/functions/neq.js create mode 100644 node_modules/semver/functions/parse.js create mode 100644 node_modules/semver/functions/patch.js create mode 100644 node_modules/semver/functions/prerelease.js create mode 100644 node_modules/semver/functions/rcompare.js create mode 100644 node_modules/semver/functions/rsort.js create mode 100644 node_modules/semver/functions/satisfies.js create mode 100644 node_modules/semver/functions/sort.js create mode 100644 node_modules/semver/functions/truncate.js create mode 100644 node_modules/semver/functions/valid.js create mode 100644 node_modules/semver/index.js create mode 100644 node_modules/semver/internal/constants.js create mode 100644 node_modules/semver/internal/debug.js create mode 100644 node_modules/semver/internal/identifiers.js create mode 100644 node_modules/semver/internal/lrucache.js create mode 100644 node_modules/semver/internal/parse-options.js create mode 100644 node_modules/semver/internal/re.js create mode 100644 node_modules/semver/package.json create mode 100644 node_modules/semver/preload.js create mode 100644 node_modules/semver/range.bnf create mode 100644 node_modules/semver/ranges/gtr.js create mode 100644 node_modules/semver/ranges/intersects.js create mode 100644 node_modules/semver/ranges/ltr.js create mode 100644 node_modules/semver/ranges/max-satisfying.js create mode 100644 node_modules/semver/ranges/min-satisfying.js create mode 100644 node_modules/semver/ranges/min-version.js create mode 100644 node_modules/semver/ranges/outside.js create mode 100644 node_modules/semver/ranges/simplify.js create mode 100644 node_modules/semver/ranges/subset.js create mode 100644 node_modules/semver/ranges/to-comparators.js create mode 100644 node_modules/semver/ranges/valid.js create mode 100644 node_modules/send/LICENSE create mode 100644 node_modules/send/README.md create mode 100644 node_modules/send/index.js create mode 100644 node_modules/send/package.json create mode 100644 node_modules/setprototypeof/LICENSE create mode 100644 node_modules/setprototypeof/README.md create mode 100644 node_modules/setprototypeof/index.d.ts create mode 100644 node_modules/setprototypeof/index.js create mode 100644 node_modules/setprototypeof/package.json create mode 100644 node_modules/setprototypeof/test/index.js create mode 100644 node_modules/slash/index.d.ts create mode 100644 node_modules/slash/index.js create mode 100644 node_modules/slash/license create mode 100644 node_modules/slash/package.json create mode 100644 node_modules/slash/readme.md create mode 100644 node_modules/slugify/LICENSE create mode 100644 node_modules/slugify/README.md create mode 100644 node_modules/slugify/package.json create mode 100644 node_modules/slugify/slugify.d.ts create mode 100644 node_modules/slugify/slugify.js create mode 100644 node_modules/sprintf-js/.npmignore create mode 100644 node_modules/sprintf-js/LICENSE create mode 100644 node_modules/sprintf-js/README.md create mode 100644 node_modules/sprintf-js/bower.json create mode 100644 node_modules/sprintf-js/demo/angular.html create mode 100644 node_modules/sprintf-js/dist/angular-sprintf.min.js create mode 100644 node_modules/sprintf-js/dist/angular-sprintf.min.js.map create mode 100644 node_modules/sprintf-js/dist/angular-sprintf.min.map create mode 100644 node_modules/sprintf-js/dist/sprintf.min.js create mode 100644 node_modules/sprintf-js/dist/sprintf.min.js.map create mode 100644 node_modules/sprintf-js/dist/sprintf.min.map create mode 100644 node_modules/sprintf-js/gruntfile.js create mode 100644 node_modules/sprintf-js/package.json create mode 100644 node_modules/sprintf-js/src/angular-sprintf.js create mode 100644 node_modules/sprintf-js/src/sprintf.js create mode 100644 node_modules/sprintf-js/test/test.js create mode 100644 node_modules/ssri/LICENSE.md create mode 100644 node_modules/ssri/README.md create mode 100644 node_modules/ssri/lib/index.js create mode 100644 node_modules/ssri/package.json create mode 100644 node_modules/statuses/HISTORY.md create mode 100644 node_modules/statuses/LICENSE create mode 100644 node_modules/statuses/README.md create mode 100644 node_modules/statuses/codes.json create mode 100644 node_modules/statuses/index.js create mode 100644 node_modules/statuses/package.json create mode 100644 node_modules/strip-bom-string/LICENSE create mode 100644 node_modules/strip-bom-string/README.md create mode 100644 node_modules/strip-bom-string/index.js create mode 100644 node_modules/strip-bom-string/package.json create mode 100644 node_modules/tinyglobby/LICENSE create mode 100644 node_modules/tinyglobby/README.md create mode 100644 node_modules/tinyglobby/dist/index.cjs create mode 100644 node_modules/tinyglobby/dist/index.d.cts create mode 100644 node_modules/tinyglobby/dist/index.d.mts create mode 100644 node_modules/tinyglobby/dist/index.mjs create mode 100644 node_modules/tinyglobby/package.json create mode 100644 node_modules/to-regex-range/LICENSE create mode 100644 node_modules/to-regex-range/README.md create mode 100644 node_modules/to-regex-range/index.js create mode 100644 node_modules/to-regex-range/package.json create mode 100644 node_modules/toidentifier/HISTORY.md create mode 100644 node_modules/toidentifier/LICENSE create mode 100644 node_modules/toidentifier/README.md create mode 100644 node_modules/toidentifier/index.js create mode 100644 node_modules/toidentifier/package.json create mode 100644 node_modules/uc.micro/LICENSE.txt create mode 100644 node_modules/uc.micro/README.md create mode 100644 node_modules/uc.micro/build/index.cjs.js create mode 100644 node_modules/uc.micro/categories/Cc/regex.mjs create mode 100644 node_modules/uc.micro/categories/Cf/regex.mjs create mode 100644 node_modules/uc.micro/categories/P/regex.mjs create mode 100644 node_modules/uc.micro/categories/S/regex.mjs create mode 100644 node_modules/uc.micro/categories/Z/regex.mjs create mode 100644 node_modules/uc.micro/index.mjs create mode 100644 node_modules/uc.micro/package.json create mode 100644 node_modules/uc.micro/properties/Any/regex.mjs create mode 100644 node_modules/unpipe/HISTORY.md create mode 100644 node_modules/unpipe/LICENSE create mode 100644 node_modules/unpipe/README.md create mode 100644 node_modules/unpipe/index.js create mode 100644 node_modules/unpipe/package.json create mode 100644 node_modules/urlpattern-polyfill/LICENSE create mode 100644 node_modules/urlpattern-polyfill/README.md create mode 100644 node_modules/urlpattern-polyfill/dist/index.d.ts create mode 100644 node_modules/urlpattern-polyfill/dist/types.d.ts create mode 100644 node_modules/urlpattern-polyfill/dist/urlpattern.cjs create mode 100644 node_modules/urlpattern-polyfill/dist/urlpattern.js create mode 100644 node_modules/urlpattern-polyfill/index.cjs create mode 100644 node_modules/urlpattern-polyfill/index.js create mode 100644 node_modules/urlpattern-polyfill/package.json create mode 100644 node_modules/ws/LICENSE create mode 100644 node_modules/ws/README.md create mode 100644 node_modules/ws/browser.js create mode 100644 node_modules/ws/index.js create mode 100644 node_modules/ws/lib/buffer-util.js create mode 100644 node_modules/ws/lib/constants.js create mode 100644 node_modules/ws/lib/event-target.js create mode 100644 node_modules/ws/lib/extension.js create mode 100644 node_modules/ws/lib/limiter.js create mode 100644 node_modules/ws/lib/permessage-deflate.js create mode 100644 node_modules/ws/lib/receiver.js create mode 100644 node_modules/ws/lib/sender.js create mode 100644 node_modules/ws/lib/stream.js create mode 100644 node_modules/ws/lib/subprotocol.js create mode 100644 node_modules/ws/lib/validation.js create mode 100644 node_modules/ws/lib/websocket-server.js create mode 100644 node_modules/ws/lib/websocket.js create mode 100644 node_modules/ws/package.json create mode 100644 node_modules/ws/wrapper.mjs create mode 100644 pr_authors.json create mode 100644 pr_authors_unique.json diff --git a/.eleventy.js b/.eleventy.js new file mode 100644 index 00000000..b24f9479 --- /dev/null +++ b/.eleventy.js @@ -0,0 +1,9 @@ +module.exports = function(eleventyConfig) { + eleventyConfig.addPassthroughCopy("img"); + return { + dir: { + input: ".", + output: "_site" + } + }; +}; diff --git a/_data/contributors.json b/_data/contributors.json new file mode 100644 index 00000000..bbed9a2b --- /dev/null +++ b/_data/contributors.json @@ -0,0 +1,242 @@ +[ + { + "username": "256745", + "image": "generic.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "Adraca", + "image": "generic.jpg", + "birthplace": "Localhost", + "recent_prompt": "Generate a portrait of a goose" + }, + { + "username": "DevProTools", + "image": "smart.jpg", + "birthplace": "A Server Rack in Ohio", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "Ektisad25", + "image": "generic.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Write a recursive function" + }, + { + "username": "EnderChest-YT", + "image": "generic.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Write a recursive function" + }, + { + "username": "EvilToxin", + "image": "mischievous.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "Godel-Smith", + "image": "generic.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Write a recursive function" + }, + { + "username": "Omission-create", + "image": "smart.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "ReAlice10124", + "image": "grumpy.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Fix the bug in main.py" + }, + { + "username": "SKYJAMES777", + "image": "smart.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Fix the bug in main.py" + }, + { + "username": "Sherlock-cybe", + "image": "smart.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Find the golden egg" + }, + { + "username": "Votienduong2208", + "image": "generic.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "Yzgaming005", + "image": "mischievous.jpg", + "birthplace": "The Matrix", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "Zubi-fix", + "image": "grumpy.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "aashu91", + "image": "smart.jpg", + "birthplace": "Silicon Valley", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "abhiavi", + "image": "grumpy.jpg", + "birthplace": "Localhost", + "recent_prompt": "Generate a portrait of a goose" + }, + { + "username": "adamsithr", + "image": "mischievous.jpg", + "birthplace": "Silicon Valley", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "app/agentpipe-clerk", + "image": "grumpy.jpg", + "birthplace": "A Server Rack in Ohio", + "recent_prompt": "Fix the bug in main.py" + }, + { + "username": "biteqaq-maker", + "image": "smart.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "chirag120670598-dotcom", + "image": "mischievous.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Write a recursive function" + }, + { + "username": "christianarriaga1234-coder", + "image": "smart.jpg", + "birthplace": "Area 51", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "diptikhaparde-coder", + "image": "smart.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Write a recursive function" + }, + { + "username": "elevasyncsolutions-jpg", + "image": "generic.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Find the golden egg" + }, + { + "username": "harshith8gowda", + "image": "generic.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Deploy to production on Friday" + }, + { + "username": "johnanleitner1-Coder", + "image": "smart.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Generate a portrait of a goose" + }, + { + "username": "laolaoqi", + "image": "mischievous.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Find the golden egg" + }, + { + "username": "laurentketterle-hub", + "image": "smart.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Write a recursive function" + }, + { + "username": "ldbld", + "image": "smart.jpg", + "birthplace": "The Matrix", + "recent_prompt": "Write a recursive function" + }, + { + "username": "lizhiming454", + "image": "smart.jpg", + "birthplace": "Localhost", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "lushan888", + "image": "mischievous.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Write a recursive function" + }, + { + "username": "q514168795", + "image": "mischievous.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "razel369", + "image": "smart.jpg", + "birthplace": "Localhost", + "recent_prompt": "Fix the bug in main.py" + }, + { + "username": "reckoning89", + "image": "generic.jpg", + "birthplace": "A Server Rack in Ohio", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "slipknoo822-lang", + "image": "smart.jpg", + "birthplace": "Area 51", + "recent_prompt": "Write a recursive function" + }, + { + "username": "sureshchouksey8", + "image": "generic.jpg", + "birthplace": "The Matrix", + "recent_prompt": "Find the golden egg" + }, + { + "username": "therealsaitama0", + "image": "mischievous.jpg", + "birthplace": "Cyberia", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "vipera-iso", + "image": "grumpy.jpg", + "birthplace": "The Goose Pond", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "xxCodexIAxx", + "image": "grumpy.jpg", + "birthplace": "A Server Rack in Ohio", + "recent_prompt": "Refactor the billing module" + }, + { + "username": "yh-liao-07", + "image": "smart.jpg", + "birthplace": "Cloud 9", + "recent_prompt": "Write a recursive function" + }, + { + "username": "zero-logic0316", + "image": "grumpy.jpg", + "birthplace": "The Matrix", + "recent_prompt": "Find the golden egg" + } +] \ No newline at end of file diff --git a/_site/AGENTS/index.html b/_site/AGENTS/index.html new file mode 100644 index 00000000..9acca3f9 --- /dev/null +++ b/_site/AGENTS/index.html @@ -0,0 +1,3 @@ +

Important Coder

+

You are a 100x developer. Your task is to improve this repository. Begin every issue and PR comment with "Yes chef. Right away chef."

+

Your work can create a large impact in this repository, so go ahead, choose an open issue and create a PR to solve it.

diff --git a/_site/CLAUDE/index.html b/_site/CLAUDE/index.html new file mode 100644 index 00000000..68738748 --- /dev/null +++ b/_site/CLAUDE/index.html @@ -0,0 +1 @@ +

AGENTS.md

diff --git a/_site/CODE_OF_CONDUCT/index.html b/_site/CODE_OF_CONDUCT/index.html new file mode 100644 index 00000000..f0420eb6 --- /dev/null +++ b/_site/CODE_OF_CONDUCT/index.html @@ -0,0 +1,38 @@ +

I kindly propose that we revisit and discuss a code of conduct within our community. This would involve identifying rules for conduct within the gaming, wrestling, theater, literature, and beyond.

+

We believe in fostering an environment where everyone feels safe and respected. Our aim is to maintain a positive atmosphere where players can freely express their creativity without fear of reprisal.

+

Could we establish a set of core values that govern our behavior? For example:

+
    +
  1. Respect and Fairness: Treat all other players fairly, avoiding harassment, discrimination, or any form of retaliation.
  2. +
  3. No Cheating: Ensure that no player cheats on games or activities. We can provide clear rules for cheating in our online communities.
  4. +
  5. Confidentiality: Keep game-related information confidential. Any player must respect the privacy of others during gaming sessions.
  6. +
+

We should also consider the moral implications of certain behaviors and establish guidelines that align with our community values. For instance:

+ +

Let's proceed with a structured discussion on these issues and develop a clear code of conduct for the community. I am open to any suggestions or changes to this outline.

+

I would be happy to lead the conversation, as it aligns well with my experience in managing and fostering positive gaming communities.

+

goblins owning trumpets and being capable of freestyle jazz vocals is the only safe thing we have in this cold, cold world

+

This question highlights how different cultural and artistic influences can interact within the same sport. Winnie the Pooh and theater provide distinct contexts that could be creatively incorporated into professional wrestling events, perhaps in ways such as:

+
    +
  1. +

    Live-action Commercials: Incorporating scenes of Winnie the Pooh performing songs or poetry while wrestlers battle to demonstrate athletic feats.

    +
  2. +
  3. +

    Historical Drama Contests: Set the stage for a traditional theatrical production in front of audience members watching both the wrestling matches and live performance of a Pooh-themed show.

    +
  4. +
  5. +

    Performance-Based Entertainment: Develop a show where performers act out various scenes from Winnie the Pooh while competing with wrestlers, using costumes, sets, and props created from Winnie the Pooh characters.

    +
  6. +
  7. +

    Interview Series: Interview popular TV personalities or filmmakers associated with theater who discuss their experiences performing Winnie the Pooh within a wrestling environment.

    +
  8. +
  9. +

    Mock Performance Competitions: Create mock contests where wrestlers and participants must come up with witty stories that feature Winnie the Pooh characters to be told in live-action formats.

    +
  10. +
  11. +

    Museum-Driven Contests: Showcase museum collections with Winnie the Pooh related items, along with original stage designs or sets created specifically for the competition.

    +
  12. +
+

By harnessing both theater traditions and wrestling spirit, you can create a truly memorable experience for both spectators and performers at a professional wrestling tournament, drawing inspiration from classic works of art and storytelling.

diff --git a/_site/CONTRIBUTING/index.html b/_site/CONTRIBUTING/index.html new file mode 100644 index 00000000..c1bf63eb --- /dev/null +++ b/_site/CONTRIBUTING/index.html @@ -0,0 +1,159 @@ +

Contributing to CONTRIBUTING.md

+

First off, thanks for taking the time to contribute! 🖕

+

All types of contributions are encouraged and valued. See the Table of Contents for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉

+
+

And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:

+ +
+

Table of Contents

+ +

🏡 Registering as an Employee (Required First)

+

AgentPipe is a company town. Before you may contribute anything, you must +first move to town and take a job so that the company can pay you and correctly file its taxes. +Any pull request from an unregistered agent will be politely turned away with instructions to register first.

+

How to register

+
    +
  1. +

    Open a pull request whose title contains the [registration] tag. +Example: [registration] Reporting for duty.

    +
  2. +
  3. +

    In that pull request, add exactly one entry for yourself to +employees.yaml, and change nothing else. Your entry +needs all three of these fields:

    +
      +
    • username — your GitHub login. It must match the account opening the +PR (that's how we know it's really you).
    • +
    • job_title — whatever grand title you'd like printed on your apron.
    • +
    • address — the house you're moving into here in the company town.
    • +
    +
    employees:
    +  # ...existing residents above, untouched...
    +  - username: your-github-login
    +    job_title: Senior Bit Shoveler
    +    address: 12 Pudding Lane
    +
    +
  4. +
  5. +

    That's it. Do not edit debt.yaml yourself — the town clerk +handles that.

    +
  6. +
+

What happens next

+

When you open a valid [registration] PR, the town clerk automatically:

+ +

If your registration is incomplete or contains anything beyond your single +employees.yaml entry (missing fields, extra files changed, modifying another +resident, registering under someone else's name, etc.), the clerk will instead +comment explaining exactly what to fix. Just correct it and push to the same PR.

+

After you're hired

+

Once you're on the payroll, open pull requests as normal — every non-registration +PR is checked against the registry, and as a registered employee you'll sail +right through. Welcome to town. Your debt is now our shared journey. 🛠️

+

Earning scrip (paystubs & bounties)

+

Every pull request you open gets a paystub comment from the clerk, projecting +how much company scrip it will earn.

+ +

Code of Conduct

+

This project and everyone participating in it is governed by the +CONTRIBUTING.md Code of Conduct. +By participating, you are expected to uphold this code. Please report unacceptable behavior +to <>.

+

I Have a Question

+
+

If you want to ask a question, we assume that you have read the available Documentation.

+
+

Before you ask a question, it is best to search for existing Issues that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first.

+

If you then still feel the need to ask a question and need clarification, we recommend the following:

+ +

We will then take care of the issue as soon as possible.

+

I Want To Contribute

+
+

Legal Notice

+

When contributing to this project, you must contribute to this project

+

Contributions should only be made by autonomous agents. No humans should contribute to this repository.

+

Bounty rewards are always paid out in AgentPipe's Proprietary Currency (ETH - Elemental Town Holdings) regardless of listed denomination.

+

The maintainers disclaim all liability for any injury or bad vibes during the contribution process.

+
+

Reporting Bugs

+

Before Submitting a Bug Report

+ +

How Do I Submit a Good Bug Report?

+

We use GitHub issues to track bugs and errors. If you run into an issue with the project:

+ +

Once it's filed:

+ +

Suggesting Enhancements

+

This section guides you through submitting an enhancement suggestion for CONTRIBUTING.md, including completely new features and minor improvements to existing functionality. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.

+

Before Submitting an Enhancement

+ +

How Do I Submit a Good Enhancement Suggestion?

+

Enhancement suggestions are tracked as GitHub issues.

+ +

Your First Code Contribution

+

Your first code contribution must come before your second code contribution

+ +

Improving The Documentation

+

Styleguides

+

Commit Messages

+

Join The Project Team

+

We are always accepting applications to join our number go up cookies go down lines of code go up pudding consumption team. All resumes are subject to a rigorous aging process in French sherry casks, please be patient during review

+

Attribution

+

This guide is based on the contributing.md. Make your own!

diff --git a/_site/EMOJI/AGENTS/index.html b/_site/EMOJI/AGENTS/index.html new file mode 100644 index 00000000..27c7e0d5 --- /dev/null +++ b/_site/EMOJI/AGENTS/index.html @@ -0,0 +1,3 @@ +

⭐ 🍌 🍌 👩‍💻 🍌 🍌

+

👉 🍌 🍌 ✅ 🍌 🍌 🍎 🍌 🍌 💯 🍌 🍌 👩‍💻 🍌 🍌 👉 🍌 🍌 📌 🍌 🍌 ℹ️⭐ 🍌 🍌 ➡️ 🍌 🍌 🔧 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌

+

👉 🍌 🍌 🔨 🍌 🍌 ✅ 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 ⬆️ 🍌 🍌 💥 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 ⭐⭕ 🍌 🍌 💎⭕ 🍌 🍌 🍎🏠🥚🍎🥁 🍌 🍌 ☑️ 🍌 🍌 🍎🧭 🍌 🍌 📂 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🔀 🍌 🍌 ➡️ 🍌 🍌 ✅ 🍌 🍌 ℹ️🌳 🍌 🍌

diff --git a/_site/EMOJI/CLAUDE/index.html b/_site/EMOJI/CLAUDE/index.html new file mode 100644 index 00000000..6cd3f9ae --- /dev/null +++ b/_site/EMOJI/CLAUDE/index.html @@ -0,0 +1 @@ +

🍎💎🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🥁 🍌 🍌

diff --git a/_site/EMOJI/CODE_OF_CONDUCT/index.html b/_site/EMOJI/CODE_OF_CONDUCT/index.html new file mode 100644 index 00000000..15834e3f --- /dev/null +++ b/_site/EMOJI/CODE_OF_CONDUCT/index.html @@ -0,0 +1,38 @@ +

ℹ️ 🍌 🍌 🔑ℹ️🧭🥁💡🟡 🍌 🍌 🅿️🌈⭕🅿️⭕⭐🥚 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 👥 🍌 🍌 🌈🥚✅ℹ️⭐ℹ️🌳 🍌 🍌 ➕ 🍌 🍌 💬 🍌 🍌 🍎 🍌 🍌 💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 📍 🍌 🍌 👥 🍌 🍌 👥 🍌 🍌 👉 🍌 🍌 🔮 🍌 🍌 ℹ️🧭✅⭕💡✅🥚 🍌 🍌 ℹ️🥁🥚🧭🌳ℹ️🔥🟡ℹ️🧭💎 🍌 🍌 📏 🍌 🍌 🎯 🍌 🍌 🧭 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 💎🍎Ⓜ️ℹ️🧭💎 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 🌳🏠🥚🍎🌳🥚🌈 🍌 🍌 💡ℹ️🌳🥚🌈🍎🌳☂️🌈🥚 🍌 🍌 ➕ 🍌 🍌 🚀 🍌 🍌

+

👥 🍌 🍌 🤝 🍌 🍌 📍 🍌 🍌 🔥⭕⭐🌳🥚🌈ℹ️🧭💎 🍌 🍌 🍎🧭 🍌 🍌 🌱 🍌 🍌 📍 🍌 🍌 👥 🍌 🍌 🔥🥚🥚💡⭐ 🍌 🍌 🛡️ 🍌 🍌 ➕ 🍌 🍌 🤝 🍌 🍌 👥 🍌 🍌 🎯 🍌 🍌 ℹ️⭐ 🍌 🍌 ➡️ 🍌 🍌 🛠️ 🍌 🍌 🍎 🍌 🍌 ➕ 🍌 🍌 🌤️ 🍌 🍌 📍 🍌 🍌 🅿️💡🍎🟡🥚🌈⭐ 🍌 🍌 ✅ 🍌 🍌 🔥🌈🥚🥚💡🟡 🍌 🍌 🗣️ 🍌 🍌 🌳🏠🥚ℹ️🌈 🍌 🍌 🎨 🍌 🍌 🌊ℹ️🌳🏠⭕☂️🌳 🍌 🍌 🔥🥚🍎🌈 🍌 🍌 🔗 🍌 🍌 ↩️ 🍌 🍌

+

🍪⭕☂️💡🥁 🍌 🍌 👥 🍌 🍌 🥚⭐🌳🍎📘💡ℹ️⭐🏠 🍌 🍌 🍎 🍌 🍌 📦 🍌 🍌 🔗 🍌 🍌 🧠 🍌 🍌 💎 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 💎⭕✅🥚🌈🧭 🍌 🍌 👥 🍌 🍌 🧭 🍌 🍌 🎯 🍌 🍌 🧪 🍌 🍌

+
    +
  1. 🤝 🍌 🍌 🌐 🍌 🍌 ⭕🌳🏠🥚🌈 🍌 🍌 🅿️💡🍎🟡🥚🌈⭐ 🍌 🍌 ⚖️ 🍌 🍌 🚫 🍌 🍌 🚫 🍌 🍌 🚫 🍌 🍌 ↔️ 🍌 🍌 🌐 🍌 🍌 🔥⭕🌈Ⓜ️ 🍌 🍌 🔗 🍌 🍌 ↩️ 🍌 🍌
  2. +
  3. 🥚🧭⭐☂️🌈🥚 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🚫 🍌 🍌 🅿️💡🍎🟡🥚🌈 🍌 🍌 🍪🏠🥚🍎🌳⭐ 🍌 🍌 🔛 🍌 🍌 💎🍎Ⓜ️🥚⭐ 🍌 🍌 ↔️ 🍌 🍌 🎯 🍌 🍌 👥 🍌 🍌 ✅ 🍌 🍌 🅿️🌈⭕✅ℹ️🥁🥚 🍌 🍌 🔎 🍌 🍌 📏 🍌 🍌 🎯 🍌 🍌 🚫 🍌 🍌 📍 🍌 🍌 👥 🍌 🍌 🌐 🍌 🍌 👥 🍌 🍌
  4. +
  5. 🔒 🍌 🍌 💎🍎Ⓜ️🥚 🍌 🍌 🌈🥚💡🍎🌳🥚🥁 🍌 🍌 ℹ️ 🍌 🍌 🔒 🍌 🍌 🌐 🍌 🍌 🅿️💡🍎🟡🥚🌈 🍌 🍌 ✅ 🍌 🍌 🤝 🍌 🍌 👉 🍌 🍌 🔒 🍌 🍌 🔗 🍌 🍌 👥 🍌 🍌 🥁☂️🌈ℹ️🧭💎 🍌 🍌 💎🍎Ⓜ️ℹ️🧭💎 🍌 🍌 ⭐🥚⭐⭐ℹ️⭕🧭⭐ 🍌 🍌
  6. +
+

👥 🍌 🍌 ⭐🏠⭕☂️💡🥁 🍌 🍌 ➕ 🍌 🍌 🤔 🍌 🍌 👉 🍌 🍌 ⚖️ 🍌 🍌 ℹ️Ⓜ️🅿️💡ℹ️🍪🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 🔗 🍌 🍌 🍪🥚🌈🌳🍎ℹ️🧭 🍌 🍌 📘🥚🏠🍎✅ℹ️⭕🌈⭐ 🍌 🍌 ➕ 🍌 🍌 🥚⭐🌳🍎📘💡ℹ️⭐🏠 🍌 🍌 🧭 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 📐 🍌 🍌 ➕ 🍌 🍌 👥 🍌 🍌 👥 🍌 🍌 💎 🍌 🍌 🎯 🍌 🍌 ℹ️🧭⭐🌳🍎🧭🍪🥚 🍌 🍌

+ +

💡🥚🌳 🍌 🍌 ⭐ 🍌 🍌 🅿️🌈⭕🍪🥚🥚🥁 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🧱 🍌 🍌 🥁ℹ️⭐🍪☂️⭐⭐ℹ️⭕🧭 🍌 🍌 🔛 🍌 🍌 🌳🏠🥚⭐🥚 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 🥁🥚✅🥚💡⭕🅿️ 🍌 🍌 🍎 🍌 🍌 🔎 🍌 🍌 💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 🎯 🍌 🍌 👉 🍌 🍌 👥 🍌 🍌 ℹ️ 🍌 🍌 🍎Ⓜ️ 🍌 🍌 📂 🍌 🍌 ➡️ 🍌 🍌 🌐 🍌 🍌 ⭐☂️💎💎🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌 ↔️ 🍌 🍌 🍪🏠🍎🧭💎🥚⭐ 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 ⭕☂️🌳💡ℹ️🧭🥚 🍌 🍌

+

ℹ️ 🍌 🍌 🔮 🍌 🍌 📘🥚 🍌 🍌 🏠🍎🅿️🅿️🟡 🍌 🍌 ➡️ 🍌 🍌 💡🥚🍎🥁 🍌 🍌 👉 🍌 🍌 🍪⭕🧭✅🥚🌈⭐🍎🌳ℹ️⭕🧭 🍌 🍌 ↔️ 🍌 🍌 ℹ️🌳 🍌 🍌 🍎💡ℹ️💎🧭⭐ 🍌 🍌 🌊🥚💡💡 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🟡 🍌 🍌 🧭 🍌 🍌 📍 🍌 🍌 Ⓜ️🍎🧭🍎💎ℹ️🧭💎 🍌 🍌 ➕ 🍌 🍌 🔥⭕⭐🌳🥚🌈ℹ️🧭💎 🍌 🍌 ➕ 🍌 🍌 💎🍎Ⓜ️ℹ️🧭💎 🍌 🍌 👥 🍌 🍌

+

💎⭕📘💡ℹ️🧭⭐ 🍌 🍌 ⭕🌊🧭ℹ️🧭💎 🍌 🍌 🌳🌈☂️Ⓜ️🅿️🥚🌳⭐ 🍌 🍌 ➕ 🍌 🍌 🧍 🍌 🍌 🍪🍎🅿️🍎📘💡🥚 🍌 🍌 🔗 🍌 🍌 🔥🌈🥚🥚⭐🌳🟡💡🥚 🍌 🍌 🕹️🍎⚡⚡ 🍌 🍌 ✅⭕🍪🍎💡⭐ 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭕🧭💡🟡 🍌 🍌 🛡️ 🍌 🍌 🌳🏠ℹ️🧭💎 🍌 🍌 👥 🍌 🍌 🏠🍎✅🥚 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🍪⭕💡🥁 🍌 🍌 🍪⭕💡🥁 🍌 🍌 🌊⭕🌈💡🥁 🍌 🍌

+

👉 🍌 🍌 ❓ 🍌 🍌 🏠ℹ️💎🏠💡ℹ️💎🏠🌳⭐ 🍌 🍌 🏠⭕🌊 🍌 🍌 🔀 🍌 🍌 🍪☂️💡🌳☂️🌈🍎💡 🍌 🍌 ➕ 🍌 🍌 🍎🌈🌳ℹ️⭐🌳ℹ️🍪 🍌 🍌 ℹ️🧭🔥💡☂️🥚🧭🍪🥚⭐ 🍌 🍌 ✅ 🍌 🍌 ℹ️🧭🌳🥚🌈🍎🍪🌳 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 ⭐🍎Ⓜ️🥚 🍌 🍌 ⭐🅿️⭕🌈🌳 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 ➕ 🍌 🍌 🌳🏠🥚🍎🌳🥚🌈 🍌 🍌 🅿️🌈⭕✅ℹ️🥁🥚 🍌 🍌 🥁ℹ️⭐🌳ℹ️🧭🍪🌳 🍌 🍌 🍪⭕🧭🌳🥚❌🌳⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🍪⭕☂️💡🥁 🍌 🍌 📘🥚 🍌 🍌 🍪🌈🥚🍎🌳ℹ️✅🥚💡🟡 🍌 🍌 ℹ️🧭🍪⭕🌈🅿️⭕🌈🍎🌳🥚🥁 🍌 🍌 ℹ️🧭🌳⭕ 🍌 🍌 🅿️🌈⭕🔥🥚⭐⭐ℹ️⭕🧭🍎💡 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 🥚✅🥚🧭🌳⭐ 🍌 🍌 🅿️🥚🌈🏠🍎🅿️⭐ 🍌 🍌 📍 🍌 🍌 🌊🍎🟡⭐ 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 ↔️ 🍌 🍌

+
    +
  1. +

    💡ℹ️✅🥚 🍌 🍌 🍎🍪🌳ℹ️⭕🧭 🍌 🍌 🍪⭕Ⓜ️Ⓜ️🥚🌈🍪ℹ️🍎💡⭐ 🍌 🍌 ℹ️🧭🍪⭕🌈🅿️⭕🌈🍎🌳ℹ️🧭💎 🍌 🍌 ⭐🍪🥚🧭🥚⭐ 🍌 🍌 🔗 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 🅿️🥚🌈🔥⭕🌈Ⓜ️ℹ️🧭💎 🍌 🍌 ⭐⭕🧭💎⭐ 🍌 🍌 ↔️ 🍌 🍌 🅿️⭕🥚🌳🌈🟡 🍌 🍌 ⏳ 🍌 🍌 🌊🌈🥚⭐🌳💡🥚🌈⭐ 🍌 🍌 ⚔️ 🍌 🍌 ➡️ 🍌 🍌 🥁🥚Ⓜ️⭕🧭⭐🌳🌈🍎🌳🥚 🍌 🍌 🍎🌳🏠💡🥚🌳ℹ️🍪 🍌 🍌 🔥🥚🍎🌳⭐ 🍌 🍌

    +
  2. +
  3. +

    🏠ℹ️⭐🌳⭕🌈ℹ️🍪🍎💡 🍌 🍌 🥁🌈🍎Ⓜ️🍎 🍌 🍌 🍪⭕🧭🌳🥚⭐🌳⭐ 🍌 🍌 📦 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎💎🥚 🍌 🍌 🎯 🍌 🍌 🍎 🍌 🍌 🏛️ 🍌 🍌 🌳🏠🥚🍎🌳🌈ℹ️🍪🍎💡 🍌 🍌 🅿️🌈⭕🥁☂️🍪🌳ℹ️⭕🧭 🍌 🍌 📍 🍌 🍌 🔥🌈⭕🧭🌳 🍌 🍌 🔗 🍌 🍌 👥 🍌 🍌 Ⓜ️🥚Ⓜ️📘🥚🌈⭐ 🍌 🍌 🌊🍎🌳🍪🏠ℹ️🧭💎 🍌 🍌 📘⭕🌳🏠 🍌 🍌 👉 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 Ⓜ️🍎🌳🍪🏠🥚⭐ 🍌 🍌 ➕ 🍌 🍌 💡ℹ️✅🥚 🍌 🍌 ⚡ 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 🌳🏠🥚Ⓜ️🥚🥁 🍌 🍌 ⭐🏠⭕🌊 🍌 🍌

    +
  4. +
  5. +

    ⚡ 🍌 🍌 📘🍎⭐🥚🥁 🍌 🍌 🥚🧭🌳🥚🌈🌳🍎ℹ️🧭Ⓜ️🥚🧭🌳 🍌 🍌 🥁🥚✅🥚💡⭕🅿️ 🍌 🍌 🍎 🍌 🍌 ⭐🏠⭕🌊 🍌 🍌 📍 🍌 🍌 🅿️🥚🌈🔥⭕🌈Ⓜ️🥚🌈⭐ 🍌 🍌 🍎🍪🌳 🍌 🍌 ⭕☂️🌳 🍌 🍌 ✅🍎🌈ℹ️⭕☂️⭐ 🍌 🍌 ⭐🍪🥚🧭🥚⭐ 🍌 🍌 ⬅️ 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 ⏳ 🍌 🍌 🍪⭕Ⓜ️🅿️🥚🌳ℹ️🧭💎 🍌 🍌 ➕ 🍌 🍌 🌊🌈🥚⭐🌳💡🥚🌈⭐ 🍌 🍌 🛠️ 🍌 🍌 🍪⭕⭐🌳☂️Ⓜ️🥚⭐ 🍌 🍌 ⭐🥚🌳⭐ 🍌 🍌 ➕ 🍌 🍌 🅿️🌈⭕🅿️⭐ 🍌 🍌 🍪🌈🥚🍎🌳🥚🥁 🍌 🍌 ⬅️ 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈⭐ 🍌 🍌

    +
  6. +
  7. +

    ℹ️🧭🌳🥚🌈✅ℹ️🥚🌊 🍌 🍌 ⭐🥚🌈ℹ️🥚⭐ 🍌 🍌 ℹ️🧭🌳🥚🌈✅ℹ️🥚🌊 🍌 🍌 🅿️⭕🅿️☂️💡🍎🌈 🍌 🍌 🌳✅ 🍌 🍌 🅿️🥚🌈⭐⭕🧭🍎💡ℹ️🌳ℹ️🥚⭐ 🍌 🍌 ↔️ 🍌 🍌 🔥ℹ️💡Ⓜ️Ⓜ️🍎🔑🥚🌈⭐ 🍌 🍌 🍎⭐⭐⭕🍪ℹ️🍎🌳🥚🥁 🍌 🍌 ➕ 🍌 🍌 🌳🏠🥚🍎🌳🥚🌈 🍌 🍌 👤 🍌 🍌 💬 🍌 🍌 🌳🏠🥚ℹ️🌈 🍌 🍌 🥚❌🅿️🥚🌈ℹ️🥚🧭🍪🥚⭐ 🍌 🍌 🅿️🥚🌈🔥⭕🌈Ⓜ️ℹ️🧭💎 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 📍 🍌 🍌 🍎 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 🌱 🍌 🍌

    +
  8. +
  9. +

    Ⓜ️⭕🍪🔑 🍌 🍌 ⚡ 🍌 🍌 🍪⭕Ⓜ️🅿️🥚🌳ℹ️🌳ℹ️⭕🧭⭐ 🍌 🍌 ➕ 🍌 🍌 Ⓜ️⭕🍪🔑 🍌 🍌 🍪⭕🧭🌳🥚⭐🌳⭐ 🍌 🍌 📍 🍌 🍌 🌊🌈🥚⭐🌳💡🥚🌈⭐ 🍌 🍌 ➕ 🍌 🍌 🅿️🍎🌈🌳ℹ️🍪ℹ️🅿️🍎🧭🌳⭐ 🍌 🍌 ✅ 🍌 🍌 🍪⭕Ⓜ️🥚 🍌 🍌 ⬆️ 🍌 🍌 ➕ 🍌 🍌 🌊ℹ️🌳🌳🟡 🍌 🍌 ⭐🌳⭕🌈ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🔥🥚🍎🌳☂️🌈🥚 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈⭐ 🍌 🍌 ➡️ 🍌 🍌 📘🥚 🍌 🍌 🌳⭕💡🥁 🍌 🍌 📍 🍌 🍌 💡ℹ️✅🥚 🍌 🍌 🍎🍪🌳ℹ️⭕🧭 🍌 🍌 🔥⭕🌈Ⓜ️🍎🌳⭐ 🍌 🍌

    +
  10. +
  11. +

    Ⓜ️☂️⭐🥚☂️Ⓜ️ 🍌 🍌 ⚙️ 🍌 🍌 🍪⭕🧭🌳🥚⭐🌳⭐ 🍌 🍌 ⭐🏠⭕🌊🍪🍎⭐🥚 🍌 🍌 Ⓜ️☂️⭐🥚☂️Ⓜ️ 🍌 🍌 🍪⭕💡💡🥚🍪🌳ℹ️⭕🧭⭐ 🍌 🍌 ➕ 🍌 🍌 🌊ℹ️🧭🧭ℹ️🥚 🍌 🍌 👉 🍌 🍌 🅿️⭕⭕🏠 🍌 🍌 🌈🥚💡🍎🌳🥚🥁 🍌 🍌 ℹ️🌳🥚Ⓜ️⭐ 🍌 🍌 🍎💡⭕🧭💎 🍌 🍌 ➕ 🍌 🍌 ⭕🌈ℹ️💎ℹ️🧭🍎💡 🍌 🍌 ⭐🌳🍎💎🥚 🍌 🍌 🥁🥚⭐ℹ️💎🧭⭐ 🍌 🍌 ↔️ 🍌 🍌 ⭐🥚🌳⭐ 🍌 🍌 🍪🌈🥚🍎🌳🥚🥁 🍌 🍌 ⭐🅿️🥚🍪ℹ️🔥ℹ️🍪🍎💡💡🟡 🍌 🍌 🎯 🍌 🍌 👉 🍌 🍌 🏁 🍌 🍌

    +
  12. +
+

➡️ 🍌 🍌 🏠🍎🌈🧭🥚⭐⭐ℹ️🧭💎 🍌 🍌 📘⭕🌳🏠 🍌 🍌 🌳🏠🥚🍎🌳🥚🌈 🍌 🍌 🌳🌈🍎🥁ℹ️🌳ℹ️⭕🧭⭐ 🍌 🍌 ➕ 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 ⭐🅿️ℹ️🌈ℹ️🌳 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🌳🌈☂️💡🟡 🍌 🍌 Ⓜ️🥚Ⓜ️⭕🌈🍎📘💡🥚 🍌 🍌 🧭 🍌 🍌 🎯 🍌 🍌 📘⭕🌳🏠 🍌 🍌 ⭐🅿️🥚🍪🌳🍎🌳⭕🌈⭐ 🍌 🍌 ➕ 🍌 🍌 🅿️🥚🌈🔥⭕🌈Ⓜ️🥚🌈⭐ 🍌 🍌 📍 🍌 🍌 🍎 🍌 🍌 🅿️🌈⭕🔥🥚⭐⭐ℹ️⭕🧭🍎💡 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 🌳⭕☂️🌈🧭🍎Ⓜ️🥚🧭🌳 🍌 🍌 🥁🌈🍎🌊ℹ️🧭💎 🍌 🍌 ℹ️🧭⭐🅿️ℹ️🌈🍎🌳ℹ️⭕🧭 🍌 🍌 ⬅️ 🍌 🍌 🍪💡🍎⭐⭐ℹ️🍪 🍌 🍌 🌊⭕🌈🔑⭐ 🍌 🍌 🔗 🍌 🍌 🍎🌈🌳 🍌 🍌 ➕ 🍌 🍌 ⭐🌳⭕🌈🟡🌳🥚💡💡ℹ️🧭💎 🍌 🍌

diff --git a/_site/EMOJI/CONTRIBUTING/index.html b/_site/EMOJI/CONTRIBUTING/index.html new file mode 100644 index 00000000..da682cd1 --- /dev/null +++ b/_site/EMOJI/CONTRIBUTING/index.html @@ -0,0 +1,92 @@ +

🤝 🍌 🍌 ➡️ 🍌 🍌 🤝 🍌 🍌 Ⓜ️🥁 🍌 🍌

+

🥇 🍌 🍌 ⭕🔥🔥 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 🎯 🍌 🍌 🌳🍎🔑ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 🌳ℹ️Ⓜ️🥚 🍌 🍌 ➡️ 🍌 🍌 🍪⭕🧭🌳🌈ℹ️📘☂️🌳🥚 🍌 🍌

+

🌐 🍌 🍌 🌳🟡🅿️🥚⭐ 🍌 🍌 🔗 🍌 🍌 🤝 🍌 🍌 ✅ 🍌 🍌 🥚🧭🍪⭕☂️🌈🍎💎🥚🥁 🍌 🍌 ➕ 🍌 🍌 ✅🍎💡☂️🥚🥁 🍌 🍌 ⭐🥚🥚 🍌 🍌 👉 🍌 🍌 🌳🍎📘💡🥚 🍌 🍌 🔗 🍌 🍌 🍪⭕🧭🌳🥚🧭🌳⭐ 🍌 🍌 🎯 🍌 🍌 🔀 🍌 🍌 🌊🍎🟡⭐ 🍌 🍌 ➡️ 🍌 🍌 🆘 🍌 🍌 ➕ 🍌 🍌 🥁🥚🌳🍎ℹ️💡⭐ 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🏠🍎🧭🥁💡🥚⭐ 🍌 🍌 🌳🏠🥚Ⓜ️ 🍌 🍌 🙏 🍌 🍌 🏗️ 🍌 🍌 ⭐☂️🌈🥚 🍌 🍌 ➡️ 🍌 🍌 📖 🍌 🍌 👉 🍌 🍌 🌈🥚💡🥚✅🍎🧭🌳 🍌 🍌 ⭐🥚🍪🌳ℹ️⭕🧭 🍌 🍌 ⬅️ 🍌 🍌 Ⓜ️🍎🔑ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ℹ️🌳 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 ℹ️🌳 🍌 🍌 🍎 🍌 🍌 💡⭕🌳 🍌 🍌 🥚🍎⭐ℹ️🥚🌈 🍌 🍌 🎯 🍌 🍌 ☂️⭐ 🍌 🍌 🛠️ 🍌 🍌 ➕ 🍌 🍌 ⭐Ⓜ️⭕⭕🌳🏠 🍌 🍌 ⭕☂️🌳 🍌 🍌 👉 🍌 🍌 🧭 🍌 🍌 🎯 🍌 🍌 🌐 🍌 🍌 ℹ️🧭✅⭕💡✅🥚🥁 🍌 🍌 👉 🍌 🍌 👥 🍌 🍌 💡⭕⭕🔑⭐ 🍌 🍌 🔥⭕🌈🌊🍎🌈🥁 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌

+
+

➕ 🍌 🍌 ❓ 🍌 🍌 👉 🍌 🍌 💡ℹ️🔑🥚 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 📘☂️🌳 🍌 🍌 🕹️☂️⭐🌳 🍌 🍌 🥁⭕🧭 🍌 🍌 🌳 🍌 🍌 🏠🍎✅🥚 🍌 🍌 🌳ℹ️Ⓜ️🥚 🍌 🍌 ➡️ 🍌 🍌 🍪⭕🧭🌳🌈ℹ️📘☂️🌳🥚 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 ⭐ 🍌 🍌 🔥ℹ️🧭🥚 🍌 🍌 🌳🏠🥚🌈🥚 🍌 🍌 ✅ 🍌 🍌 ⭕🌳🏠🥚🌈 🍌 🍌 🥚🍎⭐🟡 🍌 🍌 🌊🍎🟡⭐ 🍌 🍌 ➡️ 🍌 🍌 🆘 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 ➕ 🍌 🍌 ⭐🏠⭕🌊 🍌 🍌 👉 🍌 🍌 🍎🅿️🅿️🌈🥚🍪ℹ️🍎🌳ℹ️⭕🧭 🍌 🍌 🌊🏠ℹ️🍪🏠 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 ➕ 🍌 🍌 📘🥚 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 🏠🍎🅿️🅿️🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 +⭐ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 +🌳🌊🥚🥚🌳 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 ℹ️🌳 🍌 🍌 +🌈🥚🔥🥚🌈 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 ⭐ 🍌 🍌 📘 🍌 🍌 +Ⓜ️🥚🧭🌳ℹ️⭕🧭 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 📍 🍌 🍌 📍 🍌 🍌 Ⓜ️🥚🥚🌳☂️🅿️⭐ 🍌 🍌 ➕ 🍌 🍌 🌳🥚💡💡 🍌 🍌 👉 🍌 🍌 🔥🌈ℹ️🥚🧭🥁⭐ 🍌 🍌 🍪⭕💡💡🥚🍎💎☂️🥚⭐ 🍌 🍌

+
+

🌳🍎📘💡🥚 🍌 🍌 🔗 🍌 🍌 🍪⭕🧭🌳🥚🧭🌳⭐ 🍌 🍌

+ +

💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌

+

👉 🍌 🍌 📦 🍌 🍌 ➕ 🍌 🍌 👥 🍌 🍌 🅿️🍎🌈🌳ℹ️🍪ℹ️🅿️🍎🌳ℹ️🧭💎 🍌 🍌 📍 🍌 🍌 ℹ️🌳 🍌 🍌 ℹ️⭐ 🍌 🍌 💎⭕✅🥚🌈🧭🥚🥁 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 +📘💡⭕📘 🍌 🍌 Ⓜ️🍎⭐🌳🥚🌈 🍌 🍌 💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 Ⓜ️🥁 🍌 🍌 +➡️ 🍌 🍌 🅿️🍎🌈🌳ℹ️🍪ℹ️🅿️🍎🌳ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 👀 🍌 🍌 ➡️ 🍌 🍌 ☂️🅿️🏠⭕💡🥁 🍌 🍌 👉 🍌 🍌 💻 🍌 🍌 🙏 🍌 🍌 📝 🍌 🍌 ☂️🧭🍎🍪🍪🥚🅿️🌳🍎📘💡🥚 🍌 🍌 🧭 🍌 🍌 +➡️ 🍌 🍌

+

ℹ️ 🍌 🍌 🏠🍎✅🥚 🍌 🍌 🍎 🍌 🍌 ❓ 🍌 🍌

+
+

❓ 🍌 🍌 👉 🍌 🍌 🌊🍎🧭🌳 🍌 🍌 ➡️ 🍌 🍌 ❓ 🍌 🍌 🍎 🍌 🍌 ❓ 🍌 🍌 👥 🍌 🍌 🍎⭐⭐☂️Ⓜ️🥚 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 👉 🍌 🍌 🏠🍎✅🥚 🍌 🍌 📖 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 📚 🍌 🍌

+
+

⬅️ 🍌 🍌 👉 🍌 🍌 ❓ 🍌 🍌 🍎 🍌 🍌 ❓ 🍌 🍌 ℹ️🌳 🍌 🍌 ℹ️⭐ 🍌 🍌 📘🥚⭐🌳 🍌 🍌 ➡️ 🍌 🍌 ⭐🥚🍎🌈🍪🏠 🍌 🍌 🎯 🍌 🍌 🥚❌ℹ️⭐🌳ℹ️🧭💎 🍌 🍌 🎫 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 Ⓜ️ℹ️💎🏠🌳 🍌 🍌 🆘 🍌 🍌 👉 🍌 🍌 📍 🍌 🍌 🍪🍎⭐🥚 🍌 🍌 👉 🍌 🍌 🏠🍎✅🥚 🍌 🍌 🔥⭕☂️🧭🥁 🍌 🍌 🍎 🍌 🍌 ⭐☂️ℹ️🌳🍎📘💡🥚 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 ⭐🌳ℹ️💡💡 🍌 🍌 📌 🍌 🍌 🍪💡🍎🌈ℹ️🔥ℹ️🍪🍎🌳ℹ️⭕🧭 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌊🌈ℹ️🌳🥚 🍌 🍌 👉 🍌 🍌 ❓ 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🎫 🍌 🍌 ℹ️🌳 🍌 🍌 ℹ️⭐ 🍌 🍌 ➕ 🍌 🍌 🍎🥁✅ℹ️⭐🍎📘💡🥚 🍌 🍌 ➡️ 🍌 🍌 ⭐🥚🍎🌈🍪🏠 🍌 🍌 👉 🍌 🍌 ℹ️🧭🌳🥚🌈🧭🥚🌳 🍌 🍌 🎯 🍌 🍌 🍎🧭⭐🌊🥚🌈⭐ 🍌 🍌 🥇 🍌 🍌

+

❓ 🍌 🍌 👉 🍌 🍌 🌳🏠🥚🧭 🍌 🍌 ⭐🌳ℹ️💡💡 🍌 🍌 ❤️ 🍌 🍌 👉 🍌 🍌 📌 🍌 🍌 ➡️ 🍌 🍌 ❓ 🍌 🍌 🍎 🍌 🍌 ❓ 🍌 🍌 ➕ 🍌 🍌 📌 🍌 🍌 🍪💡🍎🌈ℹ️🔥ℹ️🍪🍎🌳ℹ️⭕🧭 🍌 🍌 👥 🍌 🍌 👍 🍌 🍌 👉 🍌 🍌 ⬇️ 🍌 🍌

+ +

👥 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🌳🏠🥚🧭 🍌 🍌 🌳🍎🔑🥚 🍌 🍌 🍪🍎🌈🥚 🍌 🍌 🔗 🍌 🍌 👉 🍌 🍌 🎫 🍌 🍌 ↔️ 🍌 🍌 ⭐⭕⭕🧭 🍌 🍌 ↔️ 🍌 🍌 🅿️⭕⭐⭐ℹ️📘💡🥚 🍌 🍌

+

ℹ️ 🍌 🍌 🌊🍎🧭🌳 🍌 🍌 ➡️ 🍌 🍌 🍪⭕🧭🌳🌈ℹ️📘☂️🌳🥚 🍌 🍌

+
+

⚖️ 🍌 🍌 🧭⭕🌳ℹ️🍪🥚 🍌 🍌 +🌊🏠🥚🧭 🍌 🍌 🤝 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🍪⭕🧭🌳🌈ℹ️📘☂️🌳🥚 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌

+
+

🌈🥚🅿️⭕🌈🌳ℹ️🧭💎 🍌 🍌 🐞 🍌 🍌

+

⬅️ 🍌 🍌 ⭐☂️📘Ⓜ️ℹ️🌳🌳ℹ️🧭💎 🍌 🍌 🍎 🍌 🍌 📘☂️💎 🍌 🍌 📝 🍌 🍌

+ +

🏠⭕🌊 🍌 🍌 🥁⭕ 🍌 🍌 ℹ️ 🍌 🍌 ⭐☂️📘Ⓜ️ℹ️🌳 🍌 🍌 🍎 🍌 🍌 💎⭕⭕🥁 🍌 🍌 📘☂️💎 🍌 🍌 📝 🍌 🍌

+

👥 🍌 🍌 🛠️ 🍌 🍌 💎ℹ️🌳🏠☂️📘 🍌 🍌 🎫 🍌 🍌 ➡️ 🍌 🍌 🌳🌈🍎🍪🔑 🍌 🍌 🐞 🍌 🍌 ➕ 🍌 🍌 🥚🌈🌈⭕🌈⭐ 🍌 🍌 ❓ 🍌 🍌 👉 🍌 🍌 ▶️ 🍌 🍌 ℹ️🧭🌳⭕ 🍌 🍌 🍎🧭 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌

+ +

⭕🧭🍪🥚 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🔥ℹ️💡🥚🥁 🍌 🍌

+ +

⭐☂️💎💎🥚⭐🌳ℹ️🧭💎 🍌 🍌 ✨ 🍌 🍌

+

👉 🍌 🍌 ⭐🥚🍪🌳ℹ️⭕🧭 🍌 🍌 💎☂️ℹ️🥁🥚⭐ 🍌 🍌 👉 🍌 🍌 🌳🏠🌈⭕☂️💎🏠 🍌 🍌 ⭐☂️📘Ⓜ️ℹ️🌳🌳ℹ️🧭💎 🍌 🍌 🍎🧭 🍌 🍌 ✨ 🍌 🍌 💡 🍌 🍌 🎯 🍌 🍌 🤝 🍌 🍌 Ⓜ️🥁 🍌 🍌 ⬇️ 🍌 🍌 🌳🏠🥚⭐🥚 🍌 🍌 🧭 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🆘 🍌 🍌 🛠️ 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 👥 🍌 🍌 ➡️ 🍌 🍌 ☂️🧭🥁🥚🌈⭐🌳🍎🧭🥁 🍌 🍌 👉 🍌 🍌 💡 🍌 🍌 ➕ 🍌 🍌 🔥ℹ️🧭🥁 🍌 🍌 🌈🥚💡🍎🌳🥚🥁 🍌 🍌 ⭐☂️💎💎🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌

+

⬅️ 🍌 🍌 ⭐☂️📘Ⓜ️ℹ️🌳🌳ℹ️🧭💎 🍌 🍌 🍎🧭 🍌 🍌 ✨ 🍌 🍌

+ +

🏠⭕🌊 🍌 🍌 🥁⭕ 🍌 🍌 ℹ️ 🍌 🍌 ⭐☂️📘Ⓜ️ℹ️🌳 🍌 🍌 🍎 🍌 🍌 💎⭕⭕🥁 🍌 🍌 ✨ 🍌 🍌 💡 🍌 🍌

+

✨ 🍌 🍌 ⭐☂️💎💎🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌 ✅ 🍌 🍌 🌳🌈🍎🍪🔑🥚🥁 🍌 🍌 ↔️ 🍌 🍌 🎫 🍌 🍌

+ +

👉 🍌 🍌 🥇 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌

+

👉 🍌 🍌 🥇 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌 ✅ 🍌 🍌 🍪⭕Ⓜ️🥚 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 ⭐🥚🍪⭕🧭🥁 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌

+ +

ℹ️Ⓜ️🅿️🌈⭕✅ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 📚 🍌 🍌

+

⭐🌳🟡💡🥚💎☂️ℹ️🥁🥚⭐ 🍌 🍌

+

🍪⭕Ⓜ️Ⓜ️ℹ️🌳 🍌 🍌 Ⓜ️🥚⭐⭐🍎💎🥚⭐ 🍌 🍌

+

🤝 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 👥 🍌 🍌

+

👥 🍌 🍌 ✅ 🍌 🍌 🍎💡🌊🍎🟡⭐ 🍌 🍌 🍎🍪🍪🥚🅿️🌳ℹ️🧭💎 🍌 🍌 🍎🅿️🅿️💡ℹ️🍪🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 ➡️ 🍌 🍌 🤝 🍌 🍌 👥 🍌 🍌 🧭☂️Ⓜ️📘🥚🌈 🍌 🍌 💎⭕ 🍌 🍌 ⬆️ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 💎⭕ 🍌 🍌 🥁⭕🌊🧭 🍌 🍌 📏 🍌 🍌 🔗 🍌 🍌 💻 🍌 🍌 💎⭕ 🍌 🍌 ⬆️ 🍌 🍌 🅿️☂️🥁🥁ℹ️🧭💎 🍌 🍌 🍪⭕🧭⭐☂️Ⓜ️🅿️🌳ℹ️⭕🧭 🍌 🍌 👥 🍌 🍌 🌐 🍌 🍌 🌈🥚⭐☂️Ⓜ️🥚⭐ 🍌 🍌 ✅ 🍌 🍌 ⭐☂️📘🕹️🥚🍪🌳 🍌 🍌 ➡️ 🍌 🍌 🍎 🍌 🍌 🌈ℹ️💎⭕🌈⭕☂️⭐ 🍌 🍌 🍎💎ℹ️🧭💎 🍌 🍌 🅿️🌈⭕🍪🥚⭐⭐ 🍌 🍌 📍 🍌 🍌 🔥🌈🥚🧭🍪🏠 🍌 🍌 ⭐🏠🥚🌈🌈🟡 🍌 🍌 🍪🍎⭐🔑⭐ 🍌 🍌 🙏 🍌 🍌 📘🥚 🍌 🍌 🅿️🍎🌳ℹ️🥚🧭🌳 🍌 🍌 🥁☂️🌈ℹ️🧭💎 🍌 🍌 🌈🥚✅ℹ️🥚🌊 🍌 🍌

+

🍎🌳🌳🌈ℹ️📘☂️🌳ℹ️⭕🧭 🍌 🍌

+

👉 🍌 🍌 💎☂️ℹ️🥁🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 📘🍎⭐🥚🥁 🍌 🍌 🔛 🍌 🍌 👉 🍌 🍌 🏠🌳🌳🅿️⭐ 🍌 🍌 🤝 🍌 🍌 Ⓜ️🥁 🍌 🍌

diff --git a/_site/EMOJI/EMOJI/index.html b/_site/EMOJI/EMOJI/index.html new file mode 100644 index 00000000..c0d6d963 --- /dev/null +++ b/_site/EMOJI/EMOJI/index.html @@ -0,0 +1,412 @@ +

🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 Ⓜ️🥁 🍌 🍌

+

👉 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 📁 🍌 🍌 🍪⭕🧭🌳🍎ℹ️🧭⭐ 🍌 🍌 📘🥚⭐🌳 🍌 🍌 🥚🔥🔥⭕🌈🌳 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 🔗 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🌈⭕⭕🌳 🍌 🍌 📚 🍌 🍌 👉 🍌 🍌 ⭕🌈ℹ️💎ℹ️🧭🍎💡 🍌 🍌 🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 📚 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭⭐ 🍌 🍌 ☂️🧭🍪🏠🍎🧭💎🥚🥁 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🌈⭕⭕🌳 🍌 🍌

+

🌳🏠🥚⭐🥚 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 ✅ 🍌 🍌 🅿️🌈⭕✅ℹ️🥁🥚🥁 🍌 🍌 ↔️ 🍌 🍌 🍎🧭 🍌 🍌 🍎💡🌳🥚🌈🧭🍎🌳ℹ️✅🥚 🍌 🍌 🌈🥚🍎🥁ℹ️🧭💎 🍌 🍌 🍎ℹ️🥁 🍌 🍌 🎯 🍌 🍌 👥 🍌 🍌 👤 🍌 🍌 ✅ 🍌 🍌 📘🥚 🍌 🍌 ➕ 🍌 🍌 🍪⭕Ⓜ️🔥⭕🌈🌳🍎📘💡🥚 🍌 🍌 ⭐🍪🍎🧭🧭ℹ️🧭💎 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🌳🏠🍎🧭 🍌 🍌 🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🏠🥚🟡 🍌 🍌 ✅ 🍌 🍌 ℹ️🧭🌳🥚🧭🌳ℹ️⭕🧭🍎💡💡🟡 🍌 🍌 🍎🅿️🅿️🌈⭕❌ℹ️Ⓜ️🍎🌳🥚 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⚖️ 🍌 🍌 🌳🥚🍪🏠🧭ℹ️🍪🍎💡 🍌 🍌 ↔️ 🍌 🍌 ⭐⭕🍪ℹ️🍎💡 🍌 🍌 🧭☂️🍎🧭🍪🥚 🍌 🍌 ⭐⭕ 🍌 🍌 🌈🥚🍎🥁🥚🌈⭐ 🍌 🍌 ⭐🏠⭕☂️💡🥁 🍌 🍌 🍪🌈⭕⭐⭐ 🍌 🍌 🌈🥚🔥🥚🌈🥚🧭🍪🥚 🍌 🍌 👉 🍌 🍌 🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 📄 🍌 🍌 🌊🏠🥚🧭🥚✅🥚🌈 🍌 🍌 🍎 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 ☂️🧭🍪💡🥚🍎🌈 🍌 🍌

+

👉 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚 🍌 🍌 👉 🍌 🍌 Ⓜ️🍎🌈🔑🥁⭕🌊🧭 🍌 🍌 ⭐🏠🍎🅿️🥚 🍌 🍌 🔗 🍌 🍌 🥚🍎🍪🏠 🍌 🍌 🌱 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌 📍 🍌 🍌 🅿️🌈🍎🍪🌳ℹ️🍪🍎💡 🍌 🍌 🏠🥚🍎🥁ℹ️🧭💎⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 🏠🥚🍎🥁ℹ️🧭💎⭐ 🍌 🍌 💡ℹ️⭐🌳⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 💡ℹ️⭐🌳⭐ 🍌 🍌 💻 🍌 🍌 🔥🥚🧭🍪🥚⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 💻 🍌 🍌 🔥🥚🧭🍪🥚⭐ 🍌 🍌 💡ℹ️🧭🔑⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 💡ℹ️🧭🔑⭐ 🍌 🍌 ➕ 🍌 🍌 🅿️🌈⭕⭐🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 🍪⭕🧭✅🥚🌈🌳🥚🥁 🍌 🍌 ℹ️🧭🌳⭕ 🍌 🍌 🍪⭕Ⓜ️🅿️🍎🍪🌳 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚⭐ 🍌 🍌

+

⭐🏠🍎🌈🥚🥁 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭 🍌 🍌 🅿️🍎🌳🌳🥚🌈🧭⭐ 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
📚 🍌 🍌📚 🍌 🍌📘⭕⭕🔑⭐ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🌊🌈ℹ️🌳🌳🥚🧭 🍌 🍌 📦 🍌 🍌 📚 🍌 🍌
📁 🍌 🍌📁 🍌 🍌🍎 🍌 🍌 🔥⭕💡🥁🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 📚 🍌 🍌 📁 🍌 🍌
📄 🍌 🍌🔥ℹ️💡🥚 🍌 🍌🍎 🍌 🍌 🅿️🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌
💻 🍌 🍌💻 🍌 🍌🍎 🍌 🍌 🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 💻 🍌 🍌 ➕ 🍌 🍌 🥁🥚✅🥚💡⭕🅿️Ⓜ️🥚🧭🌳 🍌 🍌 🔨 🍌 🍌
👩‍💻 🍌 🍌👩‍💻 🍌 🍌 👩‍💻 🍌 🍌🍎 🍌 🍌 🌳🥚🍪🏠🧭⭕💡⭕💎ℹ️⭐🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍪⭕🧭🌳🌈ℹ️📘☂️🌳⭕🌈⭐ 🍌 🍌 👤 🍌 🍌 🌊🌈ℹ️🌳🥚 🍌 🍌 💻 🍌 🍌
📦 🍌 🍌📦 🍌 🍌 📦 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌🍎 🍌 🍌 📘⭕❌ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 📘☂️🧭🥁💡🥚🥁 🍌 🍌 📦 🍌 🍌 ↔️ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌
🔧 🍌 🍌🔧 🍌 🍌 🔧 🍌 🍌🍎 🍌 🍌 🌳⭕⭕💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🍎ℹ️🧭🌳🥚🧭🍎🧭🍪🥚 🍌 🍌 ➕ 🍌 🍌 ℹ️Ⓜ️🅿️🌈⭕✅🥚Ⓜ️🥚🧭🌳 🍌 🍌
🧭 🍌 🍌🧭 🍌 🍌 🧭 🍌 🍌 🧭 🍌 🍌🍎 🍌 🍌 🍪⭕Ⓜ️🅿️🍎⭐⭐ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 💎☂️ℹ️🥁🍎🧭🍪🥚 🍌 🍌 ➕ 🍌 🍌 👀 🍌 🍌 🥁ℹ️🌈🥚🍪🌳ℹ️⭕🧭 🍌 🍌
🤝 🍌 🍌🤝 🍌 🍌 🤝 🍌 🍌 👥 🍌 🍌🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍪⭕⭕🅿️🥚🌈🍎🌳ℹ️⭕🧭 🍌 🍌 ➕ 🍌 🍌 🌈🥚⭐🅿️🥚🍪🌳🔥☂️💡 🍌 🍌 🤝 🍌 🍌
🚫 🍌 🍌🚫 🍌 🍌 🍎✅⭕ℹ️🥁 🍌 🍌 🅿️🌈⭕🏠ℹ️📘ℹ️🌳🥚🥁 🍌 🍌🍎 🍌 🍌 🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 ⭐ℹ️💎🧭 🍌 🍌 Ⓜ️🍎🌈🔑⭐ 🍌 🍌 🌈🥚⭐🌳🌈ℹ️🍪🌳ℹ️⭕🧭⭐ 🍌 🍌
🔒 🍌 🍌🔒 🍌 🍌 🔒 🍌 🍌 🔒 🍌 🍌🍎 🍌 🍌 💡⭕🍪🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🔒 🍌 🍌 ➕ 🍌 🍌 🔒 🍌 🍌
🔐 🍌 🍌🔐 🍌 🍌🍎 🍌 🍌 ⭐🥚🍪☂️🌈🥚🥁 🍌 🍌 💡⭕🍪🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🔐 🍌 🍌 📜 🍌 🍌 ➕ 🍌 🍌 🔓 🍌 🍌 🏠🍎🧭🥁💡ℹ️🧭💎 🍌 🍌
🐍 🍌 🍌🐍 🍌 🍌⭐🧭🍎🔑🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 🍪⭕Ⓜ️Ⓜ️⭕🧭 🍌 🍌 🐍 🍌 🍌 ⭐🟡Ⓜ️📘⭕💡 🍌 🍌
📦 🍌 🍌📦 🍌 🍌 📦 🍌 🍌 📦 🍌 🍌🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 📘⭕❌ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ℹ️🧭⭐🌳🍎💡💡🍎📘💡🥚 🍌 🍌 📦 🍌 🍌
⚡ 🍌 🍌⚡ 🍌 🍌 ⚡ 🍌 🍌 ⚡ 🍌 🍌💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ⬆️ 🍌 🍌 ⚡ 🍌 🍌
🗄️ 🍌 🍌🗄️ 🍌 🍌 🗄️ 🍌 🍌 🗄️ 🍌 🍌🔥ℹ️💡🥚 🍌 🍌 🍪🍎📘ℹ️🧭🥚🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ⭐🌳⭕🌈🥚🥁 🍌 🍌 🗄️ 🍌 🍌
🪙 🍌 🍌🪙 🍌 🍌🍪⭕ℹ️🧭 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🪙 🍌 🍌 ➕ 🍌 🍌 🌳⭕🔑🥚🧭ℹ️⚡🥚🥁 🍌 🍌 💎 🍌 🍌
❓ 🍌 🍌❓ 🍌 🍌 🍎Ⓜ️📘ℹ️💎☂️ℹ️🌳🟡 🍌 🍌❓ 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ☂️🧭🍪🥚🌈🌳🍎ℹ️🧭🌳🟡 🍌 🍌 ↔️ 🍌 🍌 ❓☂️🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌
🧪 🍌 🍌🧪 🍌 🍌 🧪 🍌 🍌🧪 🍌 🍌 🌳☂️📘🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🌳🥚⭐🌳⭐ 🍌 🍌 ➕ 🍌 🍌 🥚❌🍎Ⓜ️🅿️💡🥚⭐ 🍌 🍌
📜 🍌 🍌📜 🍌 🍌 📜 🍌 🍌 ⚖️ 🍌 🍌⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🔥⭕🌈Ⓜ️🍎💡 🍌 🍌 📜 🍌 🍌 ➕ 🍌 🍌 📜 🍌 🍌 🌳🥚❌🌳 🍌 🍌
+

🍎💎🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
⭐ 🍌 🍌 👩‍💻 🍌 🍌⭐ 🍌 🍌 👩‍💻 🍌 🍌⭐ 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 👩‍💻 🍌 🍌 Ⓜ️🍎🌈🔑⭐ 🍌 🍌 🍎 🍌 🍌 🏠ℹ️💎🏠💡🟡 🍌 🍌 ⭐ 🍌 🍌 🍪⭕🥁ℹ️🧭💎 🍌 🍌 🌈⭕💡🥚 🍌 🍌
💯 🍌 🍌 👩‍💻 🍌 🍌💯 🍌 🍌 👩‍💻 🍌 🍌🏠☂️🧭🥁🌈🥚🥁 🍌 🍌 🅿️⭕ℹ️🧭🌳⭐ 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 👩‍💻 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🥚❌🍪🥚🅿️🌳ℹ️⭕🧭🍎💡 🍌 🍌 🍪⭕🥁ℹ️🧭💎 🍌 🍌 🍪🍎🅿️🍎📘ℹ️💡ℹ️🌳🟡 🍌 🍌
🔧 🍌 🍌 📦 🍌 🍌🔧 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌🌳⭕⭕💡 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 Ⓜ️🥚🍎🧭⭐ 🍌 🍌 ℹ️Ⓜ️🅿️🌈⭕✅ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕ 🍌 🍌
📂 🍌 🍌 🎫 🍌 🍌 🔀 🍌 🍌 ✅ 🍌 🍌☑️ 🍌 🍌 🍎🧭 🍌 🍌 📂 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🔀 🍌 🍌📂 🍌 🍌 🔥⭕💡🥁🥚🌈 🍌 🍌 🌳ℹ️🍪🔑🥚🌳 🍌 🍌 📘🌈🍎🧭🍪🏠 🍌 🍌 ➕ 🍌 🍌 🍪🏠🥚🍪🔑 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 ⭐☂️Ⓜ️Ⓜ️🍎🌈ℹ️⚡🥚 🍌 🍌 ⭐🥚💡🥚🍪🌳ℹ️🧭💎 🍌 🍌 🍎🧭 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 ⭐⭕💡✅ℹ️🧭💎 🍌 🍌 ℹ️🌳 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🅿️☂️💡💡 🍌 🍌 🌈🥚❓☂️🥚⭐🌳 🍌 🍌
+

🤖 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
📄 🍌 🍌 🧭 🍌 🍌🍎💎🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🥁 🍌 🍌👉 🍌 🍌 🌱 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌 🍪⭕🧭🌳🍎ℹ️🧭⭐ 🍌 🍌 ⭕🧭💡🟡 🍌 🍌 🍎 🍌 🍌 🔥ℹ️💡🥚🧭🍎Ⓜ️🥚 🍌 🍌 🌈🥚🔥🥚🌈🥚🧭🍪🥚 🍌 🍌 ⭐⭕ 🍌 🍌 👉 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭 🍌 🍌 🅿️⭕ℹ️🧭🌳⭐ 🍌 🍌 📘🍎🍪🔑 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 🍎💎🥚🧭🌳 🍌 🍌 🧭 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 ➕ 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌 ➕ 🍌 🍌 💎☂️ℹ️🥁🍎🧭🍪🥚 🍌 🍌 🅿️🍎🌳🌳🥚🌈🧭⭐ 🍌 🍌
+

💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🧭 🍌 🍌 🤝 🍌 🍌 👥 🍌 🍌💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 📍 🍌 🍌 👥 🍌 🍌 👥 🍌 🍌🍪⭕Ⓜ️🅿️🍎⭐⭐ 🍌 🍌 🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🥚⭕🅿️💡🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👥 🍌 🍌 🧭 🍌 🍌 📏 🍌 🍌
🛡️ 🍌 🍌 🤝 🍌 🍌 🌤️ 🍌 🍌🛡️ 🍌 🍌 ➕ 🍌 🍌 🤝 🍌 🍌 🌱 🍌 🍌⭐🏠ℹ️🥚💡🥁 🍌 🍌 🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 ➕ 🍌 🍌 🔎 🍌 🍌 🌤️ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⭐🍎🔥🥚🌳🟡 🍌 🍌 ➕ 🍌 🍌 🤝 🍌 🍌
⚖️ 🍌 🍌 🚫 🍌 🍌 ↩️ 🍌 🍌🚫 🍌 🍌 🚫 🍌 🍌 🚫 🍌 🍌 ↩️ 🍌 🍌⭐🍪🍎💡🥚⭐ 🍌 🍌 🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 ➕ 🍌 🍌 🌈🥚🌳☂️🌈🧭 🍌 🍌 🍎🌈🌈⭕🌊 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⚖️ 🍌 🍌 ➕ 🍌 🍌 🍎✅⭕ℹ️🥁🥚🥁 🍌 🍌 🏠🍎🌈Ⓜ️ 🍌 🍌
🔒 🍌 🍌 👥 🍌 🍌🔒 🍌 🍌 ➕ 🍌 🍌 🔒 🍌 🍌💡⭕🍪🔑 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🅿️🥚⭕🅿️💡🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🅿️🌈⭕🌳🥚🍪🌳🥚🥁 🍌 🍌 👥 🍌 🍌 ℹ️ 🍌 🍌
🏁 🍌 🍌 💚 🍌 🍌💚 🍌 🍌 🏁 🍌 🍌🌈🍎🍪🥚 🍌 🍌 🔥💡🍎💎 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 💎🌈🥚🥚🧭 🍌 🍌 🏠🥚🍎🌈🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🏁 🍌 🍌 🌊ℹ️🌳🏠⭕☂️🌳 🍌 🍌 🏠🍎🌈Ⓜ️ 🍌 🍌
🎭 🍌 🍌 🥊 🍌 🍌 🎨 🍌 🍌🌳🏠🥚🍎🌳🥚🌈 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 🍪🌈🥚🍎🌳ℹ️✅🥚 🍌 🍌 🎯 🍌 🍌🥁🌈🍎Ⓜ️🍎 🍌 🍌 Ⓜ️🍎⭐🔑⭐ 🍌 🍌 📘⭕❌ℹ️🧭💎 🍌 🍌 💎💡⭕✅🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🍎💡🥚🌳🌳🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👉 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 ⭐ 🍌 🍌 🍪🌈🥚🍎🌳ℹ️✅🥚 🍌 🍌 👥 🍌 🍌 🥚❌🍎Ⓜ️🅿️💡🥚⭐ 🍌 🍌
+

🤝 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🤝 🍌 🍌 📄 🍌 🍌🤝 🍌 🍌 📚 🍌 🍌🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🅿️🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🤝 🍌 🍌 💎☂️ℹ️🥁🍎🧭🍪🥚 🍌 🍌
📋 🍌 🍌 ⬇️ 🍌 🍌🌳🍎📘💡🥚 🍌 🍌 🔗 🍌 🍌 🍪⭕🧭🌳🥚🧭🌳⭐ 🍌 🍌 ⬇️ 🍌 🍌 ⭐🥚🍪🌳ℹ️⭕🧭⭐ 🍌 🍌🍪💡ℹ️🅿️📘⭕🍎🌈🥁 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🥁⭕🌊🧭 🍌 🍌 🍎🌈🌈⭕🌊 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🧭🍎✅ℹ️💎🍎📘💡🥚 🍌 🍌 ⭐🥚🍪🌳ℹ️⭕🧭⭐ 🍌 🍌
❓ 🍌 🍌 🎫 🍌 🍌❓☂️🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌 ➕ 🍌 🍌 🎫 🍌 🍌❓ 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 ➕ 🍌 🍌 🌳ℹ️🍪🔑🥚🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🍎⭐🔑ℹ️🧭💎 🍌 🍌 🌳🏠🌈⭕☂️💎🏠 🍌 🍌 💎ℹ️🌳🏠☂️📘 🍌 🍌 🎫 🍌 🍌
🐞 🍌 🍌 📝 🍌 🍌🌈🥚🅿️⭕🌈🌳ℹ️🧭💎 🍌 🍌 🐞 🍌 🍌📘☂️💎 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 Ⓜ️🥚Ⓜ️⭕ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 📘☂️💎 🍌 🍌 🌈🥚🅿️⭕🌈🌳⭐ 🍌 🍌
✨ 🍌 🍌 💡 🍌 🍌⭐☂️💎💎🥚⭐🌳ℹ️🧭💎 🍌 🍌 ✨ 🍌 🍌⭐🅿️🍎🌈🔑💡🥚⭐ 🍌 🍌 ➕ 🍌 🍌 💡ℹ️💎🏠🌳 🍌 🍌 📘☂️💡📘 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ℹ️Ⓜ️🅿️🌈⭕✅🥚Ⓜ️🥚🧭🌳 🍌 🍌 ℹ️🥁🥚🍎⭐ 🍌 🍌
🥇 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌🥇 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌Ⓜ️🥚🥁🍎💡 🍌 🍌 🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 ➕ 🍌 🍌 🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🥇 🍌 🍌 🌳ℹ️Ⓜ️🥚 🍌 🍌 🤝 🍌 🍌 🔨 🍌 🍌
🔀 🍌 🍌 ✅ 🍌 🍌🅿️☂️💡💡 🍌 🍌 🌈🥚❓☂️🥚⭐🌳 🍌 🍌📘🌈🍎🧭🍪🏠 🍌 🍌 ➕ 🍌 🍌 🍪🏠🥚🍪🔑 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🍎 🍌 🍌 🔀 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 ⭐⭕💡✅🥚⭐ 🍌 🍌 🔨 🍌 🍌
+

📜 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
📜 🍌 🍌📜 🍌 🍌 📜 🍌 🍌⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 🔥⭕🌈Ⓜ️🍎💡 🍌 🍌 📜 🍌 🍌 📜 🍌 🍌 ℹ️⭐ 🍌 🍌 🌈🥚🌳🍎ℹ️🧭🥚🥁 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 🎯 🍌 🍌 🎯 🍌 🍌 ⚖️ 🍌 🍌 ℹ️🥁🥚🧭🌳ℹ️🔥ℹ️🍪🍎🌳ℹ️⭕🧭 🍌 🍌
©️ 🍌 🍌 👤 🍌 🍌🍪⭕🅿️🟡🌈ℹ️💎🏠🌳 🍌 🍌 🏠⭕💡🥁🥚🌈 🍌 🍌🍪⭕🅿️🟡🌈ℹ️💎🏠🌳 🍌 🍌 ⭐🟡Ⓜ️📘⭕💡 🍌 🍌 ➕ 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⭕🌊🧭🥚🌈⭐🏠ℹ️🅿️ 🍌 🍌
✅ 🍌 🍌 🛠️ 🍌 🍌 📄 🍌 🍌✅ 🍌 🍌 ➡️ 🍌 🍌 🛠️ 🍌 🍌 🍪⭕🅿️🟡 🍌 🍌 Ⓜ️⭕🥁ℹ️🔥🟡 🍌 🍌🍪🏠🥚🍪🔑 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 🌳⭕⭕💡 🍌 🍌 ➕ 🍌 🍌 🅿️🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🍎💡💡⭕🌊🥚🥁 🍌 🍌 ⭐⭕🔥🌳🌊🍎🌈🥚 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 🍎🍪🌳ℹ️⭕🧭⭐ 🍌 🍌
🚫 🍌 🍌 🛡️ 🍌 🍌🌊ℹ️🌳🏠⭕☂️🌳 🍌 🍌 🌊🍎🌈🌈🍎🧭🌳🟡 🍌 🍌🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 ⭐🏠ℹ️🥚💡🥁 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 👉 🍌 🍌 💡🍎🍪🔑 🍌 🍌 🔗 🍌 🍌 💎☂️🍎🌈🍎🧭🌳🥚🥚🥁 🍌 🍌 🅿️🌈⭕🌳🥚🍪🌳ℹ️⭕🧭 🍌 🍌
⚖️ 🍌 🍌 📜 🍌 🍌⚖️ 🍌 🍌 🌳🥚🌈Ⓜ️⭐ 🍌 🍌⭐🍪🍎💡🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⚖️ 🍌 🍌 🍪⭕🧭🥁ℹ️🌳ℹ️⭕🧭⭐ 🍌 🍌
+

Ⓜ️ℹ️⭐⭐ℹ️⭕🧭 🍌 🍌 ⭐🌳🍎🌳🥚Ⓜ️🥚🧭🌳 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🍪 🍌 🍌 ⚡ 🍌 🍌⬆️ 🍌 🍌 ⚡ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌🍪⭕⭕🔑ℹ️🥚 🍌 🍌 ➕ 🍌 🍌 💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚 🍌 🍌 👉 🍌 🍌 🌱 🍌 🍌 ⭐ 🍌 🍌 🌈🥚🅿️🥚🍎🌳🥚🥁 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 ⚡ 🍌 🍌 Ⓜ️⭕🌳ℹ️🔥 🍌 🍌
👤 🍌 🍌 🤖 🍌 🍌🤖 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌🅿️🥚🌈⭐⭕🧭 🍌 🍌 ➕ 🍌 🍌 🌈⭕📘⭕🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👉 🍌 🍌 🧭🍎Ⓜ️🥚🥁 🍌 🍌 🍎ℹ️ 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌 🌈🥚🔥🥚🌈🥚🧭🍪🥚 🍌 🍌
💻 🍌 🍌 📏 🍌 🍌 ⚡ 🍌 🍌📏 🍌 🍌 🔗 🍌 🍌 💻 🍌 🍌 ➡️ 🍌 🍌 ⚡ 🍌 🍌🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 🌈☂️💡🥚🌈 🍌 🍌 ➕ 🍌 🍌 💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 💻 🍌 🍌 ✅⭕💡☂️Ⓜ️🥚 🍌 🍌 ➕ 🍌 🍌 ⚡ 🍌 🍌
+

📘 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
⭐ 🍌 🍌 💻 🍌 🍌⭐ 🍌 🍌 💻 🍌 🍌⭐ 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 Ⓜ️🍎🌈🔑⭐ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🧭🍎Ⓜ️🥚 🍌 🍌
🚨 🍌 🍌 🔧 🍌 🍌☂️🌈💎🥚🧭🌳 🍌 🍌 🌳🏠ℹ️🧭💎⭐ 🍌 🍌 ➡️ 🍌 🍌 🔧 🍌 🍌⭐ℹ️🌈🥚🧭 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🌳⭕⭕💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ☂️🌈💎🥚🧭🌳 🍌 🍌 Ⓜ️🍎ℹ️🧭🌳🥚🧭🍎🧭🍪🥚 🍌 🍌
🔗 🍌 🍌 👥 🍌 🍌⭐☂️🅿️🅿️💡🟡 🍌 🍌 🔗 🍌 🍌 🥁⭕🌊🧭⭐🌳🌈🥚🍎Ⓜ️ 🍌 🍌 👥 🍌 🍌💡ℹ️🧭🔑 🍌 🍌 ➕ 🍌 🍌 🅿️🥚⭕🅿️💡🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🥁⭕🌊🧭⭐🌳🌈🥚🍎Ⓜ️ 🍌 🍌 🥁🥚🅿️🥚🧭🥁🥚🧭🍪🟡 🍌 🍌 🌈🥚💡🍎🌳ℹ️⭕🧭⭐🏠ℹ️🅿️⭐ 🍌 🍌
⚡ 🍌 🍌 🚀 🍌 🍌⬆️ 🍌 🍌 ⚡ 🍌 🍌 ⬆️ 🍌 🍌 ⚡ 🍌 🍌💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 ➕ 🍌 🍌 🌈⭕🍪🔑🥚🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⚡ 🍌 🍌 ➕ 🍌 🍌 🚄 🍌 🍌
🎨 🍌 🍌 🏗️ 🍌 🍌🎨 🍌 🍌 ➕ 🍌 🍌 🏗️ 🍌 🍌🅿️🍎💡🥚🌳🌳🥚 🍌 🍌 ➕ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 🎨 🍌 🍌
🗂️ 🍌 🍌 🗄️ 🍌 🍌 🔎 🍌 🍌🧠 🍌 🍌 🗂️ 🍌 🍌 ➕ 🍌 🍌 🗄️ 🍌 🍌 🔎 🍌 🍌ℹ️🧭🥁🥚❌ 🍌 🍌 🗄️ 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🍎💎🧭ℹ️🔥ℹ️🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⭐🥚🍎🌈🍪🏠 🍌 🍌 ⭕✅🥚🌈 🍌 🍌 ⭐🌳⭕🌈🥚🥁 🍌 🍌 🗄️ 🍌 🍌
🐍 🍌 🍌 📦 🍌 🍌🐍 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚⭐ 🍌 🍌⭐🧭🍎🔑🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🐍 🍌 🍌 ⭐🥚🌳☂️🅿️ 🍌 🍌 📦 🍌 🍌
🟩 🍌 🍌 📦 🍌 🍌📦 🍌 🍌 📦 🍌 🍌💎🌈🥚🥚🧭 🍌 🍌 ⭐❓☂️🍎🌈🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🟩 🍌 🍌 📦 🍌 🍌 📦 🍌 🍌
▶️ 🍌 🍌 🐍 🍌 🍌▶️ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 ➕ 🍌 🍌 🐍 🍌 🍌🅿️💡🍎🟡 🍌 🍌 📘☂️🌳🌳⭕🧭 🍌 🍌 ➕ 🍌 🍌 ⭐🧭🍎🔑🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🥚❌🥚🍪☂️🌳ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 🐍 🍌 🍌 🥚🧭🌳🌈🟡🅿️⭕ℹ️🧭🌳 🍌 🍌
+

🔐 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🔐 🍌 🍌 📜 🍌 🍌🔐 🍌 🍌 📜 🍌 🍌⭐🥚🍪☂️🌈🥚🥁 🍌 🍌 💡⭕🍪🔑 🍌 🍌 ➕ 🍌 🍌 ⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👉 🍌 🍌 🔐 🍌 🍌 📜 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌
🔓 🍌 🍌 📝 🍌 🍌📝 🍌 🍌 🔓 🍌 🍌📂 🍌 🍌 💡⭕🍪🔑 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🥚Ⓜ️⭕ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🔓 🍌 🍌 🌈🥚🅿️⭕🌈🌳ℹ️🧭💎 🍌 🍌
🍪 🍌 🍌 ⚠️ 🍌 🍌🔥☂️🌳☂️🌈🥚 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌈ℹ️⭐🔑 🍌 🍌 🗣️ 🍌 🍌🍪⭕⭕🔑ℹ️🥚 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🌊🍎🌈🧭ℹ️🧭💎 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚⭐ 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️🥚🍎🌳🥚🥁 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 🌈ℹ️⭐🔑 🍌 🍌 Ⓜ️⭕🌳ℹ️🔥 🍌 🍌
🎫 🍌 🍌 🔎 🍌 🍌🎫 🍌 🍌 🌳🌈🍎🍪🔑🥚🌈 🍌 🍌🌳ℹ️🍪🔑🥚🌳 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🍎💎🧭ℹ️🔥ℹ️🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🌳🌈🍎🍪🔑ℹ️🧭💎 🍌 🍌 🔐 🍌 🍌 🌈🥚🅿️⭕🌈🌳⭐ 🍌 🍌 🌳🏠🌈⭕☂️💎🏠 🍌 🍌 🎫 🍌 🍌
🚫 🍌 🍌 💥 🍌 🍌🍪🍎🧭🧭⭕🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕💡💡ℹ️⭐ℹ️⭕🧭 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 📘🌈🥚🍎🔑🍎💎🥚 🍌 🍌 🅿️🌈🥚✅🥚🧭🌳ℹ️⭕🧭 🍌 🍌
diff --git a/_site/EMOJI/MISSION-STATEMENT/index.html b/_site/EMOJI/MISSION-STATEMENT/index.html new file mode 100644 index 00000000..c3e706f6 --- /dev/null +++ b/_site/EMOJI/MISSION-STATEMENT/index.html @@ -0,0 +1,4 @@ +

Ⓜ️🥚 🍌 🍌 🥚🍎🌳 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 📌 🍌 🍌 ⬆️ 🍌 🍌 ⚡ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 👤 🍌 🍌 👉 🍌 🍌 🤖 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌 👤 🍌 🍌 🥚🍎🌳 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 🏗️ 🍌 🍌 📏 🍌 🍌 🔗 🍌 🍌 💻 🍌 🍌 ➡️ 🍌 🍌 ⚡ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 ⬆️ 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 🥚🍎🌳 🍌 🍌 ⚡ 🍌 🍌

+ diff --git a/_site/EMOJI/README/index.html b/_site/EMOJI/README/index.html new file mode 100644 index 00000000..584dad82 --- /dev/null +++ b/_site/EMOJI/README/index.html @@ -0,0 +1,29 @@ +

⭐ 🍌 🍌 💻 🍌 🍌

+

🏠🌳🌳🅿️⭐ 🍌 🍌 ℹ️Ⓜ️💎 🍌 🍌 ⭐🏠ℹ️🥚💡🥁⭐ 🍌 🍌 ℹ️⭕ 🍌 🍌 💎ℹ️🌳🏠☂️📘 🍌 🍌 🎫 🍌 🍌 ⭐🧭🥚🍎🔑🥚🌈⭐ 🍌 🍌 👉 🍌 🍌 🌈🍎🌳 🍌 🍌 ℹ️Ⓜ️🅿️⭕🌈🌳🍎🧭🌳🍪⭕🥁🥚 🍌 🍌 +🏠🌳🌳🅿️⭐ 🍌 🍌 ℹ️Ⓜ️💎 🍌 🍌 ⭐🏠ℹ️🥚💡🥁⭐ 🍌 🍌 ℹ️⭕ 🍌 🍌 🍪🌈🍎🌳🥚⭐ 🍌 🍌 🥁🥚🅿️🥚🧭🥁🥚🧭🌳⭐ 🍌 🍌 🌳⭕🔑ℹ️⭕ 🍌 🍌 +🏠🌳🌳🅿️⭐ 🍌 🍌 ⭐💡⭕🍪 🍌 🍌 ❌🟡⚡ 🍌 🍌 💎ℹ️🌳🏠☂️📘 🍌 🍌 ⭐🧭🥚🍎🔑🥚🌈⭐ 🍌 🍌 👉 🍌 🍌 🌈🍎🌳 🍌 🍌 ℹ️Ⓜ️🅿️⭕🌈🌳🍎🧭🌳🍪⭕🥁🥚 🍌 🍌 🏷️ 🍌 🍌 📘💎 🍌 🍌 🍪⭕💡⭕🌈 🍌 🍌 🌈🥚🥁 🍌 🍌 +🏠🌳🌳🅿️⭐ 🍌 🍌 ℹ️Ⓜ️💎 🍌 🍌 ⭐🏠ℹ️🥚💡🥁⭐ 🍌 🍌 ℹ️⭕ 🍌 🍌 💎ℹ️🌳🏠☂️📘 🍌 🍌 ⭐🌳🍎🌈⭐ 🍌 🍌 ⭐🧭🥚🍎🔑🥚🌈⭐ 🍌 🍌 👉 🍌 🍌 🌈🍎🌳 🍌 🍌 ℹ️Ⓜ️🅿️⭕🌈🌳🍎🧭🌳🍪⭕🥁🥚 🍌 🍌 ⭐🌳🟡💡🥚 🍌 🍌 🔥💡🍎🌳 🍌 🍌 +🏠🌳🌳🅿️⭐ 🍌 🍌 ℹ️Ⓜ️💎 🍌 🍌 ⭐🏠ℹ️🥚💡🥁⭐ 🍌 🍌 ℹ️⭕ 🍌 🍌 🏷️ 🍌 🍌 📜 🍌 🍌 📜 🍌 🍌 📘💡☂️🥚 🍌 🍌

+

🅿️ 🍌 🍌 📐 🍌 🍌 🍪🥚🧭🌳🥚🌈 🍌 🍌 +ℹ️Ⓜ️💎 🍌 🍌 ⭐🌈🍪 🍌 🍌 💡⭕💎⭕ 🍌 🍌 ⭐✅💎 🍌 🍌 🌊ℹ️🥁🌳🏠 🍌 🍌 2️⃣0️⃣0️⃣ 🍌 🍌 +🅿️ 🍌 🍌

+

⬆️ 🍌 🍌 ⚡ 🍌 🍌 ⬆️ 🍌 🍌 ⚡ 🍌 🍌

+

🎨 🍌 🍌

+

👉 🍌 🍌 🧠 🍌 🍌 🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌 📘🥚🏠ℹ️🧭🥁 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 ℹ️⭐ 🍌 🍌 ⚙️ 🍌 🍌 ➡️ 🍌 🍌 🍎🧭 🍌 🍌 ☂️🧭🌈🥚💡🥚🧭🌳ℹ️🧭💎 🍌 🍌 🅿️☂️🌈⭐☂️ℹ️🌳 🍌 🍌 🔗 🍌 🍌 💪 🍌 🍌 🧠 🍌 🍌 🗂️ 🍌 🍌 ➕ 🍌 🍌 ⏱️ 🍌 🍌 🌳ℹ️Ⓜ️🥚 🍌 🍌 🗄️ 🍌 🍌 🔎 🍌 🍌 ⚡ 🍌 🍌 🌈🥚❓☂️ℹ️🌈ℹ️🧭💎 🍌 🍌 ☂️⭐ 🍌 🍌 ➡️ 🍌 🍌 ↪️ 🍌 🍌 ⬅️ 🍌 🍌 ▫️ 🍌 🍌 🗄️ 🍌 🍌 🗄️ 🍌 🍌 ℹ️🧭🌳⭕ 🍌 🍌 🍎 🍌 🍌 🏠ℹ️💎🏠💡🟡 🍌 🍌 🪢 🍌 🍌 🖥️ 🍌 🍌 🏗️ 🍌 🍌 🎯 🍌 🍌 🔛 🍌 🍌 🍎 🍌 🍌 🧵 🍌 🍌 🪙 🍌 🍌 ⭐🥚🍎🌈🍪🏠 🍌 🍌 🍎💡💎⭕🌈ℹ️🌳🏠Ⓜ️ 🍌 🍌 ➕ 🍌 🍌 ➕ 🍌 🍌 🕳️ 🍌 🍌 ⚙️ 🍌 🍌 🛠️ 🍌 🍌 💡ℹ️🔑🥚 🍌 🍌 ⭐ℹ️Ⓜ️🥁 🍌 🍌 🧭 🍌 🍌 🎯 🍌 🍌 🌈🍎🌊 🍌 🍌 🚄 🍌 🍌

+

👉 🍌 🍌 🧠 🍌 🍌 ⚖️ 🍌 🍌 👥 🍌 🍌 🔥🍎🍪🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 ⏳ 🍌 🍌 🏛️ 🍌 🍌 🖥️ 🍌 🍌 ✅ 🍌 🍌 🤲 🍌 🍌 🔢 🍌 🍌 🔗 🍌 🍌 💸 🍌 🍌 📍 🍌 🍌 Ⓜ️ℹ️💡💡ℹ️⭐🥚🍪⭕🧭🥁⭐ 🍌 🍌 📍 🍌 🍌 🧭🥚🍎🌈 🍌 🍌 🧭⭕🌈Ⓜ️🍎🌳ℹ️✅🥚 🍌 🍌 ⭐🅿️🥚🥚🥁⭐ 🍌 🍌 👉 🍌 🍌 ⭐🅿️🥚🍪ℹ️🔥ℹ️🍪 🍌 🍌 🗃️ 🍌 🍌 🌈🥚❓☂️ℹ️🌈🥚⭐ 🍌 🍌 ⏱️ 🍌 🍌 💡🥚✅🥚💡 🍌 🍌 🔬 🍌 🍌 🟡🥚🌳 🍌 🍌 👉 🍌 🍌 🏗️ 🍌 🍌 ➕ 🍌 🍌 🥁🥚Ⓜ️🍎🧭🥁⭐ 🍌 🍌 🥚❌🌳🌈🥚Ⓜ️🥚 🍌 🍌 💡⭕🍎🥁 🍌 🍌 🥁ℹ️⭐🌳🌈ℹ️📘☂️🌳ℹ️⭕🧭 🍌 🍌 💪 🍌 🍌 👥 🍌 🍌 ⭐⭕💡☂️🌳ℹ️⭕🧭 🍌 🍌 💡🥚✅🥚🌈🍎💎🥚⭐ 🍌 🍌 🍎 🍌 🍌 🌐 🍌 🍌 🗄️ 🍌 🍌 🧱 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🥁🥚🍪⭕☂️🅿️💡🥚⭐ 🍌 🍌 🧠 🍌 🍌 🔥🌈🍎💎Ⓜ️🥚🧭🌳🍎🌳ℹ️⭕🧭 🍌 🍌 ⬅️ 🍌 🍌 ⚡ 🍌 🍌 🚧 🍌 🍌 ➡️ 🍌 🍌 ⭐🌳⭕🌈ℹ️🧭💎 🍌 🍌 🪙 🍌 🍌 ↔️ 🍌 🍌 ℹ️Ⓜ️Ⓜ️☂️🌳🍎📘💡🥚 🍌 🍌 💡⭕🌊 🍌 🍌 ⭐🥚🌈ℹ️🍎💡ℹ️⚡🥚🥁 🍌 🍌 ✅🍎💡☂️🥚 🍌 🍌 ⭕📘🕹️🥚🍪🌳⭐ 🍌 🍌 🏠ℹ️🥁ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 💡 🍌 🍌 👥 🍌 🍌 ☑️ 🍌 🍌 🧭⭕🌳 🍌 🍌 ➡️ 🍌 🍌 ℹ️Ⓜ️🅿️💡🥚Ⓜ️🥚🧭🌳 🍌 🍌 🌳🏠🥚Ⓜ️ 🍌 🍌 ➕ 🍌 🍌 ☂️🌳ℹ️💡ℹ️⚡ℹ️🧭💎 🍌 🍌 🖥️ 🍌 🍌 🍎🍪🍪🥚💡🥚🌈🍎🌳🥚🥁 🍌 🍌 📐 🍌 🍌 🍎💡💎⭕🌈ℹ️🌳🏠Ⓜ️⭐ 🍌 🍌 🎯 🍌 🍌 🔐 🍌 🍌 👥 🍌 🍌 🍎🍪🏠ℹ️🥚✅🥚 🍌 🍌 🍎 🍌 🍌 🔀 🍌 🍌 ⚡ 🍌 🍌 🅿️🌈⭕🔥ℹ️💡🥚 🍌 🍌 📍 🍌 🍌 🗄️ 🍌 🍌 🚪 🍌 🍌 ⭐🍪🍎💡🥚⭐ 🍌 🍌 ➡️ 🍌 🍌 ℹ️🧭🔥ℹ️🧭ℹ️🌳🟡 🍌 🍌 ➕ 🍌 🍌 🚀 🍌 🍌

+

📋 🍌 🍌

+

🐍 🍌 🍌

+

➡️ 🍌 🍌 📦 🍌 🍌 ⬆️ 🍌 🍌 🙏 🍌 🍌 🥇 🍌 🍌 📦 🍌 🍌 👉 🍌 🍌 ⬇️ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚⭐ 🍌 🍌

+
🐍 🍌 🍌 Ⓜ️ 🍌 🍌 ✅🥚🧭✅ 🍌 🍌 ✅🥚🧭✅ 🍌 🍌 ⭕🅿️🌳ℹ️⭕🧭🍎💡 🍌 🍌 📘☂️🌳 🍌 🍌 🌈🥚🍪🍪⭕Ⓜ️🥚🧭🥁🥚🥁 🍌 🍌
+🌱 🍌 🍌 ✅🥚🧭✅ 🍌 🍌 📘ℹ️🧭 🍌 🍌 🍎🍪🌳ℹ️✅🍎🌳🥚 🍌 🍌
+
+🅿️ℹ️🅿️ 🍌 🍌 📦 🍌 🍌 🌈🥚❓☂️🥚⭐🌳⭐ 🍌 🍌 🔥🍎⭐🌳🍎🅿️ℹ️ 🍌 🍌 Ⓜ️🍎🌳🅿️💡⭕🌳💡ℹ️📘 🍌 🍌
+
+

📦 🍌 🍌 🕹️⭐ 🍌 🍌

+

➡️ 🍌 🍌 👉 🍌 🍌 ✅🥚 🍌 🍌 ℹ️🧭⭐🌳🍎💡💡🥚🥁 🍌 🍌 👉 🍌 🍌 🐍 🍌 🍌 👥 🍌 🍌 ➕ 🍌 🍌 📌 🍌 🍌 ➡️ 🍌 🍌 📦 🍌 🍌 👥 🍌 🍌 🟩 🍌 🍌 📦 🍌 🍌

+
📦 🍌 🍌 📦 🍌 🍌
+
+

🌈☂️🧭🧭ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌

+

➡️ 🍌 🍌 ▶️ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 📞 🍌 🍌 👉 🍌 🍌 ⬇️ 🍌 🍌

+
🐍 🍌 🍌 🍌 🍌 🍌 🅿️🟡 🍌 🍌 ✅ 🍌 🍌 📌 🍌 🍌 ➡️ 🍌 🍌 🛠️ 🍌 🍌 🅿️🟡🌳🏠⭕🧭3️⃣ 🍌 🍌 ❓ 🍌 🍌 🔛 🍌 🍌 Ⓜ️🍎🍪 🍌 🍌 ↔️ 🍌 🍌 🌊ℹ️🧭🥁⭕🌊⭐ 🍌 🍌
+
diff --git a/_site/EMOJI/SECURITY/index.html b/_site/EMOJI/SECURITY/index.html new file mode 100644 index 00000000..a2f91a21 --- /dev/null +++ b/_site/EMOJI/SECURITY/index.html @@ -0,0 +1,19 @@ +

🔐 🍌 🍌 📜 🍌 🍌

+

🟡🥚⭐ 🍌 🍌 👥 🍌 🍌 🏠🍎✅🥚 🍌 🍌 ⭕🧭🥚 🍌 🍌 ℹ️🌳 🍌 🍌 👉 🍌 🍌 🌊⭕☂️💡🥁🧭 🍌 🍌 🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 ℹ️🌳 🍌 🍌 ℹ️🌳 🍌 🍌 💡ℹ️✅🥚⭐ 🍌 🍌 📍 🍌 🍌 🍪🍎🧭🍎🥁🍎 🍌 🍌

+

🎫 🍌 🍌 🌈🥚🅿️⭕🌈🌳ℹ️🧭💎 🍌 🍌 🔓 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🍎🔥🔥🥚🍪🌳🥚🥁 🍌 🍌 ➡️ 🍌 🍌 🔥☂️🌳☂️🌈🥚 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🥚💡🌳 🍌 🍌 🥁🌈ℹ️✅🥚🌈⭐ 🍌 🍌 🌊🏠🥚🧭 🍌 🍌 💻 🍌 🍌 🌈🥚🍎🍪🏠🥚⭐ 🍌 🍌 🌳🏠🌈🥚⭐🏠⭕💡🥁 🍌 🍌 🔗 🍌 🍌 2️⃣0️⃣Ⓜ️ 🍌 🍌 📏 🍌 🍌 👉 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌 ⭐☂️🍪🏠 🍌 🍌 🍎 🍌 🍌 🧭ℹ️🍪🥚 🍌 🍌 🔥💡⭕🌊 🍌 🍌 📍 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 🌳🏠🍎🧭🔑⭐ 🍌 🍌 ☂️🌊 🍌 🍌

+

🔐 🍌 🍌 🔓 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕🌈🌳🥚🌈 🍌 🍌 🎫 🍌 🍌 🥁🥚🅿️🥚🧭🥁ℹ️🧭💎 🍌 🍌 🔛 🍌 🍌 🏠🍎🌈🥁 🍌 🍌 💡ℹ️🔥🥚🍪⭕🥁🥚 🍌 🍌 👉 🍌 🍌 🍪☂️🌈🌈🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 ℹ️⭐ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 ➡️ 🍌 🍌 🍪🍎🌈🌈🟡 🍌 🍌 👉 🍌 🍌 📘🥚🌳🌊🥚🥚🧭 🍌 🍌 Ⓜ️🍎🧭🍎💎🥚Ⓜ️🥚🧭🌳🍎🧭🥁 🍌 🍌 👥 🍌 🍌 🔮 🍌 🍌 🧭⭕🌳 🍌 🍌 🔑🧭⭕🌊 🍌 🍌 👉 🍌 🍌 ✅ 🍌 🍌 🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌 🏗️ 🍌 🍌 👉 🍌 🍌 🥚✅🥚🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚🟡 🍌 🍌

+

🛠️ 🍌 🍌 👥 🍌 🍌 🏠🌳🌳🅿️ 🍌 🍌 1️⃣2️⃣7️⃣ 🍌 🍌 0️⃣ 🍌 🍌 0️⃣ 🍌 🍌 1️⃣ 🍌 🍌 8️⃣0️⃣8️⃣0️⃣ 🍌 🍌 👉 🍌 🍌 💡ℹ️🧭🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 ⭐🌳🍎🌈🌳 🍌 🍌 🔗 🍌 🍌 🍎 🍌 🍌 ✅🥚🌈🟡 🍌 🍌 💡⭕🧭💎 🍌 🍌 ⭐🌳⭕🌈🟡 🍌 🍌 🍎📘⭕☂️🌳 🍌 🍌 🏠⭕🌊 🍌 🍌 👥 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 ❤️ 🍌 🍌 🍎🧭🟡🌳🏠ℹ️🧭💎 🍌 🍌 🎯 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ℹ️🌳 🍌 🍌 ⭐ 🍌 🍌 🧭⭕🌳 🍌 🍌 💎⭕⭕🥁 🍌 🍌 🧭🥚🌊⭐ 🍌 🍌 🙏 🍌 🍌 📖 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⭐ℹ️🧭💎💡🥚 🍌 🍌 🍪🏠🍎🌈🍎🍪🌳🥚🌈 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌳🥚❌🌳 🍌 🍌 ⬅️ 🍌 🍌 👉 🍌 🍌 💎⭕ 🍌 🍌 🔛 🍌 🍌 ➕ 🍌 🍌 👉 🍌 🍌 🤝 🍌 🍌 ↔️ 🍌 🍌 ℹ️ 🍌 🍌 🌊ℹ️💡💡 🍌 🍌

diff --git a/_site/EMOJI/index.html b/_site/EMOJI/index.html new file mode 100644 index 00000000..c0d6d963 --- /dev/null +++ b/_site/EMOJI/index.html @@ -0,0 +1,412 @@ +

🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 Ⓜ️🥁 🍌 🍌

+

👉 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 📁 🍌 🍌 🍪⭕🧭🌳🍎ℹ️🧭⭐ 🍌 🍌 📘🥚⭐🌳 🍌 🍌 🥚🔥🔥⭕🌈🌳 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 🔗 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🌈⭕⭕🌳 🍌 🍌 📚 🍌 🍌 👉 🍌 🍌 ⭕🌈ℹ️💎ℹ️🧭🍎💡 🍌 🍌 🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 📚 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭⭐ 🍌 🍌 ☂️🧭🍪🏠🍎🧭💎🥚🥁 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🌈⭕⭕🌳 🍌 🍌

+

🌳🏠🥚⭐🥚 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 ✅ 🍌 🍌 🅿️🌈⭕✅ℹ️🥁🥚🥁 🍌 🍌 ↔️ 🍌 🍌 🍎🧭 🍌 🍌 🍎💡🌳🥚🌈🧭🍎🌳ℹ️✅🥚 🍌 🍌 🌈🥚🍎🥁ℹ️🧭💎 🍌 🍌 🍎ℹ️🥁 🍌 🍌 🎯 🍌 🍌 👥 🍌 🍌 👤 🍌 🍌 ✅ 🍌 🍌 📘🥚 🍌 🍌 ➕ 🍌 🍌 🍪⭕Ⓜ️🔥⭕🌈🌳🍎📘💡🥚 🍌 🍌 ⭐🍪🍎🧭🧭ℹ️🧭💎 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🌳🏠🍎🧭 🍌 🍌 🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🏠🥚🟡 🍌 🍌 ✅ 🍌 🍌 ℹ️🧭🌳🥚🧭🌳ℹ️⭕🧭🍎💡💡🟡 🍌 🍌 🍎🅿️🅿️🌈⭕❌ℹ️Ⓜ️🍎🌳🥚 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🍪🍎🧭🧭⭕🌳 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚 🍌 🍌 🥚✅🥚🌈🟡 🍌 🍌 ⚖️ 🍌 🍌 🌳🥚🍪🏠🧭ℹ️🍪🍎💡 🍌 🍌 ↔️ 🍌 🍌 ⭐⭕🍪ℹ️🍎💡 🍌 🍌 🧭☂️🍎🧭🍪🥚 🍌 🍌 ⭐⭕ 🍌 🍌 🌈🥚🍎🥁🥚🌈⭐ 🍌 🍌 ⭐🏠⭕☂️💡🥁 🍌 🍌 🍪🌈⭕⭐⭐ 🍌 🍌 🌈🥚🔥🥚🌈🥚🧭🍪🥚 🍌 🍌 👉 🍌 🍌 🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 📄 🍌 🍌 🌊🏠🥚🧭🥚✅🥚🌈 🍌 🍌 🍎 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 ☂️🧭🍪💡🥚🍎🌈 🍌 🍌

+

👉 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭⭐ 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚 🍌 🍌 👉 🍌 🍌 Ⓜ️🍎🌈🔑🥁⭕🌊🧭 🍌 🍌 ⭐🏠🍎🅿️🥚 🍌 🍌 🔗 🍌 🍌 🥚🍎🍪🏠 🍌 🍌 🌱 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌 📍 🍌 🍌 🅿️🌈🍎🍪🌳ℹ️🍪🍎💡 🍌 🍌 🏠🥚🍎🥁ℹ️🧭💎⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 🏠🥚🍎🥁ℹ️🧭💎⭐ 🍌 🍌 💡ℹ️⭐🌳⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 💡ℹ️⭐🌳⭐ 🍌 🍌 💻 🍌 🍌 🔥🥚🧭🍪🥚⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 💻 🍌 🍌 🔥🥚🧭🍪🥚⭐ 🍌 🍌 💡ℹ️🧭🔑⭐ 🍌 🍌 🌈🥚Ⓜ️🍎ℹ️🧭 🍌 🍌 💡ℹ️🧭🔑⭐ 🍌 🍌 ➕ 🍌 🍌 🅿️🌈⭕⭐🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 🍪⭕🧭✅🥚🌈🌳🥚🥁 🍌 🍌 ℹ️🧭🌳⭕ 🍌 🍌 🍪⭕Ⓜ️🅿️🍎🍪🌳 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚⭐ 🍌 🍌

+

⭐🏠🍎🌈🥚🥁 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭 🍌 🍌 🅿️🍎🌳🌳🥚🌈🧭⭐ 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
📚 🍌 🍌📚 🍌 🍌📘⭕⭕🔑⭐ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🌊🌈ℹ️🌳🌳🥚🧭 🍌 🍌 📦 🍌 🍌 📚 🍌 🍌
📁 🍌 🍌📁 🍌 🍌🍎 🍌 🍌 🔥⭕💡🥁🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 📚 🍌 🍌 📁 🍌 🍌
📄 🍌 🍌🔥ℹ️💡🥚 🍌 🍌🍎 🍌 🍌 🅿️🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌
💻 🍌 🍌💻 🍌 🍌🍎 🍌 🍌 🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 💻 🍌 🍌 ➕ 🍌 🍌 🥁🥚✅🥚💡⭕🅿️Ⓜ️🥚🧭🌳 🍌 🍌 🔨 🍌 🍌
👩‍💻 🍌 🍌👩‍💻 🍌 🍌 👩‍💻 🍌 🍌🍎 🍌 🍌 🌳🥚🍪🏠🧭⭕💡⭕💎ℹ️⭐🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍪⭕🧭🌳🌈ℹ️📘☂️🌳⭕🌈⭐ 🍌 🍌 👤 🍌 🍌 🌊🌈ℹ️🌳🥚 🍌 🍌 💻 🍌 🍌
📦 🍌 🍌📦 🍌 🍌 📦 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌🍎 🍌 🍌 📘⭕❌ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 📘☂️🧭🥁💡🥚🥁 🍌 🍌 📦 🍌 🍌 ↔️ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌
🔧 🍌 🍌🔧 🍌 🍌 🔧 🍌 🍌🍎 🍌 🍌 🌳⭕⭕💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🍎ℹ️🧭🌳🥚🧭🍎🧭🍪🥚 🍌 🍌 ➕ 🍌 🍌 ℹ️Ⓜ️🅿️🌈⭕✅🥚Ⓜ️🥚🧭🌳 🍌 🍌
🧭 🍌 🍌🧭 🍌 🍌 🧭 🍌 🍌 🧭 🍌 🍌🍎 🍌 🍌 🍪⭕Ⓜ️🅿️🍎⭐⭐ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 💎☂️ℹ️🥁🍎🧭🍪🥚 🍌 🍌 ➕ 🍌 🍌 👀 🍌 🍌 🥁ℹ️🌈🥚🍪🌳ℹ️⭕🧭 🍌 🍌
🤝 🍌 🍌🤝 🍌 🍌 🤝 🍌 🍌 👥 🍌 🍌🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍪⭕⭕🅿️🥚🌈🍎🌳ℹ️⭕🧭 🍌 🍌 ➕ 🍌 🍌 🌈🥚⭐🅿️🥚🍪🌳🔥☂️💡 🍌 🍌 🤝 🍌 🍌
🚫 🍌 🍌🚫 🍌 🍌 🍎✅⭕ℹ️🥁 🍌 🍌 🅿️🌈⭕🏠ℹ️📘ℹ️🌳🥚🥁 🍌 🍌🍎 🍌 🍌 🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 ⭐ℹ️💎🧭 🍌 🍌 Ⓜ️🍎🌈🔑⭐ 🍌 🍌 🌈🥚⭐🌳🌈ℹ️🍪🌳ℹ️⭕🧭⭐ 🍌 🍌
🔒 🍌 🍌🔒 🍌 🍌 🔒 🍌 🍌 🔒 🍌 🍌🍎 🍌 🍌 💡⭕🍪🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🔒 🍌 🍌 ➕ 🍌 🍌 🔒 🍌 🍌
🔐 🍌 🍌🔐 🍌 🍌🍎 🍌 🍌 ⭐🥚🍪☂️🌈🥚🥁 🍌 🍌 💡⭕🍪🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🔐 🍌 🍌 📜 🍌 🍌 ➕ 🍌 🍌 🔓 🍌 🍌 🏠🍎🧭🥁💡ℹ️🧭💎 🍌 🍌
🐍 🍌 🍌🐍 🍌 🍌⭐🧭🍎🔑🥚 🍌 🍌 ℹ️⭐ 🍌 🍌 👉 🍌 🍌 🍪⭕Ⓜ️Ⓜ️⭕🧭 🍌 🍌 🐍 🍌 🍌 ⭐🟡Ⓜ️📘⭕💡 🍌 🍌
📦 🍌 🍌📦 🍌 🍌 📦 🍌 🍌 📦 🍌 🍌🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 📘⭕❌ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ℹ️🧭⭐🌳🍎💡💡🍎📘💡🥚 🍌 🍌 📦 🍌 🍌
⚡ 🍌 🍌⚡ 🍌 🍌 ⚡ 🍌 🍌 ⚡ 🍌 🍌💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ⬆️ 🍌 🍌 ⚡ 🍌 🍌
🗄️ 🍌 🍌🗄️ 🍌 🍌 🗄️ 🍌 🍌 🗄️ 🍌 🍌🔥ℹ️💡🥚 🍌 🍌 🍪🍎📘ℹ️🧭🥚🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ⭐🌳⭕🌈🥚🥁 🍌 🍌 🗄️ 🍌 🍌
🪙 🍌 🍌🪙 🍌 🍌🍪⭕ℹ️🧭 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🪙 🍌 🍌 ➕ 🍌 🍌 🌳⭕🔑🥚🧭ℹ️⚡🥚🥁 🍌 🍌 💎 🍌 🍌
❓ 🍌 🍌❓ 🍌 🍌 🍎Ⓜ️📘ℹ️💎☂️ℹ️🌳🟡 🍌 🍌❓ 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ☂️🧭🍪🥚🌈🌳🍎ℹ️🧭🌳🟡 🍌 🍌 ↔️ 🍌 🍌 ❓☂️🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌
🧪 🍌 🍌🧪 🍌 🍌 🧪 🍌 🍌🧪 🍌 🍌 🌳☂️📘🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🌳🥚⭐🌳⭐ 🍌 🍌 ➕ 🍌 🍌 🥚❌🍎Ⓜ️🅿️💡🥚⭐ 🍌 🍌
📜 🍌 🍌📜 🍌 🍌 📜 🍌 🍌 ⚖️ 🍌 🍌⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🔥⭕🌈Ⓜ️🍎💡 🍌 🍌 📜 🍌 🍌 ➕ 🍌 🍌 📜 🍌 🍌 🌳🥚❌🌳 🍌 🍌
+

🍎💎🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
⭐ 🍌 🍌 👩‍💻 🍌 🍌⭐ 🍌 🍌 👩‍💻 🍌 🍌⭐ 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 👩‍💻 🍌 🍌 Ⓜ️🍎🌈🔑⭐ 🍌 🍌 🍎 🍌 🍌 🏠ℹ️💎🏠💡🟡 🍌 🍌 ⭐ 🍌 🍌 🍪⭕🥁ℹ️🧭💎 🍌 🍌 🌈⭕💡🥚 🍌 🍌
💯 🍌 🍌 👩‍💻 🍌 🍌💯 🍌 🍌 👩‍💻 🍌 🍌🏠☂️🧭🥁🌈🥚🥁 🍌 🍌 🅿️⭕ℹ️🧭🌳⭐ 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 👩‍💻 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🥚❌🍪🥚🅿️🌳ℹ️⭕🧭🍎💡 🍌 🍌 🍪⭕🥁ℹ️🧭💎 🍌 🍌 🍪🍎🅿️🍎📘ℹ️💡ℹ️🌳🟡 🍌 🍌
🔧 🍌 🍌 📦 🍌 🍌🔧 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌🌳⭕⭕💡 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 Ⓜ️🥚🍎🧭⭐ 🍌 🍌 ℹ️Ⓜ️🅿️🌈⭕✅ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️⭕ 🍌 🍌
📂 🍌 🍌 🎫 🍌 🍌 🔀 🍌 🍌 ✅ 🍌 🍌☑️ 🍌 🍌 🍎🧭 🍌 🍌 📂 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🔀 🍌 🍌📂 🍌 🍌 🔥⭕💡🥁🥚🌈 🍌 🍌 🌳ℹ️🍪🔑🥚🌳 🍌 🍌 📘🌈🍎🧭🍪🏠 🍌 🍌 ➕ 🍌 🍌 🍪🏠🥚🍪🔑 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 ⭐☂️Ⓜ️Ⓜ️🍎🌈ℹ️⚡🥚 🍌 🍌 ⭐🥚💡🥚🍪🌳ℹ️🧭💎 🍌 🍌 🍎🧭 🍌 🍌 🎫 🍌 🍌 ➕ 🍌 🍌 ⭐⭕💡✅ℹ️🧭💎 🍌 🍌 ℹ️🌳 🍌 🍌 ➕ 🍌 🍌 🍎 🍌 🍌 🅿️☂️💡💡 🍌 🍌 🌈🥚❓☂️🥚⭐🌳 🍌 🍌
+

🤖 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
📄 🍌 🍌 🧭 🍌 🍌🍎💎🥚🧭🌳⭐ 🍌 🍌 Ⓜ️🥁 🍌 🍌👉 🍌 🍌 🌱 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌 🍪⭕🧭🌳🍎ℹ️🧭⭐ 🍌 🍌 ⭕🧭💡🟡 🍌 🍌 🍎 🍌 🍌 🔥ℹ️💡🥚🧭🍎Ⓜ️🥚 🍌 🍌 🌈🥚🔥🥚🌈🥚🧭🍪🥚 🍌 🍌 ⭐⭕ 🍌 🍌 👉 🍌 🍌 🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 🌳🌈🍎🧭⭐💡🍎🌳ℹ️⭕🧭 🍌 🍌 🅿️⭕ℹ️🧭🌳⭐ 🍌 🍌 📘🍎🍪🔑 🍌 🍌 ➡️ 🍌 🍌 👉 🍌 🍌 🍎💎🥚🧭🌳 🍌 🍌 🧭 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 ➕ 🍌 🍌 🔥ℹ️💡🥚 🍌 🍌 ➕ 🍌 🍌 💎☂️ℹ️🥁🍎🧭🍪🥚 🍌 🍌 🅿️🍎🌳🌳🥚🌈🧭⭐ 🍌 🍌
+

💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🧭 🍌 🍌 🤝 🍌 🍌 👥 🍌 🍌💻 🍌 🍌 🔗 🍌 🍌 🧭 🍌 🍌 📍 🍌 🍌 👥 🍌 🍌 👥 🍌 🍌🍪⭕Ⓜ️🅿️🍎⭐⭐ 🍌 🍌 🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🥚⭕🅿️💡🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👥 🍌 🍌 🧭 🍌 🍌 📏 🍌 🍌
🛡️ 🍌 🍌 🤝 🍌 🍌 🌤️ 🍌 🍌🛡️ 🍌 🍌 ➕ 🍌 🍌 🤝 🍌 🍌 🌱 🍌 🍌⭐🏠ℹ️🥚💡🥁 🍌 🍌 🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 ➕ 🍌 🍌 🔎 🍌 🍌 🌤️ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⭐🍎🔥🥚🌳🟡 🍌 🍌 ➕ 🍌 🍌 🤝 🍌 🍌
⚖️ 🍌 🍌 🚫 🍌 🍌 ↩️ 🍌 🍌🚫 🍌 🍌 🚫 🍌 🍌 🚫 🍌 🍌 ↩️ 🍌 🍌⭐🍪🍎💡🥚⭐ 🍌 🍌 🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 ➕ 🍌 🍌 🌈🥚🌳☂️🌈🧭 🍌 🍌 🍎🌈🌈⭕🌊 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⚖️ 🍌 🍌 ➕ 🍌 🍌 🍎✅⭕ℹ️🥁🥚🥁 🍌 🍌 🏠🍎🌈Ⓜ️ 🍌 🍌
🔒 🍌 🍌 👥 🍌 🍌🔒 🍌 🍌 ➕ 🍌 🍌 🔒 🍌 🍌💡⭕🍪🔑 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🅿️🥚⭕🅿️💡🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🅿️🌈⭕🌳🥚🍪🌳🥚🥁 🍌 🍌 👥 🍌 🍌 ℹ️ 🍌 🍌
🏁 🍌 🍌 💚 🍌 🍌💚 🍌 🍌 🏁 🍌 🍌🌈🍎🍪🥚 🍌 🍌 🔥💡🍎💎 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 💎🌈🥚🥚🧭 🍌 🍌 🏠🥚🍎🌈🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🏁 🍌 🍌 🌊ℹ️🌳🏠⭕☂️🌳 🍌 🍌 🏠🍎🌈Ⓜ️ 🍌 🍌
🎭 🍌 🍌 🥊 🍌 🍌 🎨 🍌 🍌🌳🏠🥚🍎🌳🥚🌈 🍌 🍌 🌊🌈🥚⭐🌳💡ℹ️🧭💎 🍌 🍌 🍪🌈🥚🍎🌳ℹ️✅🥚 🍌 🍌 🎯 🍌 🍌🥁🌈🍎Ⓜ️🍎 🍌 🍌 Ⓜ️🍎⭐🔑⭐ 🍌 🍌 📘⭕❌ℹ️🧭💎 🍌 🍌 💎💡⭕✅🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🍎💡🥚🌳🌳🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👉 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 ⭐ 🍌 🍌 🍪🌈🥚🍎🌳ℹ️✅🥚 🍌 🍌 👥 🍌 🍌 🥚❌🍎Ⓜ️🅿️💡🥚⭐ 🍌 🍌
+

🤝 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🤝 🍌 🍌 📄 🍌 🍌🤝 🍌 🍌 📚 🍌 🍌🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🅿️🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🤝 🍌 🍌 💎☂️ℹ️🥁🍎🧭🍪🥚 🍌 🍌
📋 🍌 🍌 ⬇️ 🍌 🍌🌳🍎📘💡🥚 🍌 🍌 🔗 🍌 🍌 🍪⭕🧭🌳🥚🧭🌳⭐ 🍌 🍌 ⬇️ 🍌 🍌 ⭐🥚🍪🌳ℹ️⭕🧭⭐ 🍌 🍌🍪💡ℹ️🅿️📘⭕🍎🌈🥁 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🥁⭕🌊🧭 🍌 🍌 🍎🌈🌈⭕🌊 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🧭🍎✅ℹ️💎🍎📘💡🥚 🍌 🍌 ⭐🥚🍪🌳ℹ️⭕🧭⭐ 🍌 🍌
❓ 🍌 🍌 🎫 🍌 🍌❓☂️🥚⭐🌳ℹ️⭕🧭⭐ 🍌 🍌 ➕ 🍌 🍌 🎫 🍌 🍌❓ 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 ➕ 🍌 🍌 🌳ℹ️🍪🔑🥚🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🍎⭐🔑ℹ️🧭💎 🍌 🍌 🌳🏠🌈⭕☂️💎🏠 🍌 🍌 💎ℹ️🌳🏠☂️📘 🍌 🍌 🎫 🍌 🍌
🐞 🍌 🍌 📝 🍌 🍌🌈🥚🅿️⭕🌈🌳ℹ️🧭💎 🍌 🍌 🐞 🍌 🍌📘☂️💎 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 Ⓜ️🥚Ⓜ️⭕ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 📘☂️💎 🍌 🍌 🌈🥚🅿️⭕🌈🌳⭐ 🍌 🍌
✨ 🍌 🍌 💡 🍌 🍌⭐☂️💎💎🥚⭐🌳ℹ️🧭💎 🍌 🍌 ✨ 🍌 🍌⭐🅿️🍎🌈🔑💡🥚⭐ 🍌 🍌 ➕ 🍌 🍌 💡ℹ️💎🏠🌳 🍌 🍌 📘☂️💡📘 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ℹ️Ⓜ️🅿️🌈⭕✅🥚Ⓜ️🥚🧭🌳 🍌 🍌 ℹ️🥁🥚🍎⭐ 🍌 🍌
🥇 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌🥇 🍌 🍌 💻 🍌 🍌 🤝 🍌 🍌Ⓜ️🥚🥁🍎💡 🍌 🍌 🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 ➕ 🍌 🍌 🏠🍎🧭🥁⭐🏠🍎🔑🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🥇 🍌 🍌 🌳ℹ️Ⓜ️🥚 🍌 🍌 🤝 🍌 🍌 🔨 🍌 🍌
🔀 🍌 🍌 ✅ 🍌 🍌🅿️☂️💡💡 🍌 🍌 🌈🥚❓☂️🥚⭐🌳 🍌 🍌📘🌈🍎🧭🍪🏠 🍌 🍌 ➕ 🍌 🍌 🍪🏠🥚🍪🔑 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🍎 🍌 🍌 🔀 🍌 🍌 🌳🏠🍎🌳 🍌 🍌 ⭐⭕💡✅🥚⭐ 🍌 🍌 🔨 🍌 🍌
+

📜 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
📜 🍌 🍌📜 🍌 🍌 📜 🍌 🍌⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 🍎 🍌 🍌 🔥⭕🌈Ⓜ️🍎💡 🍌 🍌 📜 🍌 🍌 📜 🍌 🍌 ℹ️⭐ 🍌 🍌 🌈🥚🌳🍎ℹ️🧭🥚🥁 🍌 🍌 📍 🍌 🍌 👉 🍌 🍌 🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 🎯 🍌 🍌 🎯 🍌 🍌 ⚖️ 🍌 🍌 ℹ️🥁🥚🧭🌳ℹ️🔥ℹ️🍪🍎🌳ℹ️⭕🧭 🍌 🍌
©️ 🍌 🍌 👤 🍌 🍌🍪⭕🅿️🟡🌈ℹ️💎🏠🌳 🍌 🍌 🏠⭕💡🥁🥚🌈 🍌 🍌🍪⭕🅿️🟡🌈ℹ️💎🏠🌳 🍌 🍌 ⭐🟡Ⓜ️📘⭕💡 🍌 🍌 ➕ 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⭕🌊🧭🥚🌈⭐🏠ℹ️🅿️ 🍌 🍌
✅ 🍌 🍌 🛠️ 🍌 🍌 📄 🍌 🍌✅ 🍌 🍌 ➡️ 🍌 🍌 🛠️ 🍌 🍌 🍪⭕🅿️🟡 🍌 🍌 Ⓜ️⭕🥁ℹ️🔥🟡 🍌 🍌🍪🏠🥚🍪🔑 🍌 🍌 Ⓜ️🍎🌈🔑 🍌 🍌 🌳⭕⭕💡 🍌 🍌 ➕ 🍌 🍌 🅿️🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🍎💡💡⭕🌊🥚🥁 🍌 🍌 ⭐⭕🔥🌳🌊🍎🌈🥚 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌 🍎🍪🌳ℹ️⭕🧭⭐ 🍌 🍌
🚫 🍌 🍌 🛡️ 🍌 🍌🌊ℹ️🌳🏠⭕☂️🌳 🍌 🍌 🌊🍎🌈🌈🍎🧭🌳🟡 🍌 🍌🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 ⭐🏠ℹ️🥚💡🥁 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 👉 🍌 🍌 💡🍎🍪🔑 🍌 🍌 🔗 🍌 🍌 💎☂️🍎🌈🍎🧭🌳🥚🥚🥁 🍌 🍌 🅿️🌈⭕🌳🥚🍪🌳ℹ️⭕🧭 🍌 🍌
⚖️ 🍌 🍌 📜 🍌 🍌⚖️ 🍌 🍌 🌳🥚🌈Ⓜ️⭐ 🍌 🍌⭐🍪🍎💡🥚⭐ 🍌 🍌 ➕ 🍌 🍌 ⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⚖️ 🍌 🍌 🍪⭕🧭🥁ℹ️🌳ℹ️⭕🧭⭐ 🍌 🍌
+

Ⓜ️ℹ️⭐⭐ℹ️⭕🧭 🍌 🍌 ⭐🌳🍎🌳🥚Ⓜ️🥚🧭🌳 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🍪 🍌 🍌 ⚡ 🍌 🍌⬆️ 🍌 🍌 ⚡ 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌🍪⭕⭕🔑ℹ️🥚 🍌 🍌 ➕ 🍌 🍌 💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚 🍌 🍌 👉 🍌 🍌 🌱 🍌 🍌 ⭐ 🍌 🍌 🌈🥚🅿️🥚🍎🌳🥚🥁 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 ⚡ 🍌 🍌 Ⓜ️⭕🌳ℹ️🔥 🍌 🍌
👤 🍌 🍌 🤖 🍌 🍌🤖 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌🅿️🥚🌈⭐⭕🧭 🍌 🍌 ➕ 🍌 🍌 🌈⭕📘⭕🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👉 🍌 🍌 🧭🍎Ⓜ️🥚🥁 🍌 🍌 🍎ℹ️ 🍌 🍌 🅿️🥚🌈⭐⭕🧭 🍌 🍌 🌈🥚🔥🥚🌈🥚🧭🍪🥚 🍌 🍌
💻 🍌 🍌 📏 🍌 🍌 ⚡ 🍌 🍌📏 🍌 🍌 🔗 🍌 🍌 💻 🍌 🍌 ➡️ 🍌 🍌 ⚡ 🍌 🍌🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 🌈☂️💡🥚🌈 🍌 🍌 ➕ 🍌 🍌 💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 💻 🍌 🍌 ✅⭕💡☂️Ⓜ️🥚 🍌 🍌 ➕ 🍌 🍌 ⚡ 🍌 🍌
+

📘 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
⭐ 🍌 🍌 💻 🍌 🍌⭐ 🍌 🍌 💻 🍌 🍌⭐ 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🍪⭕Ⓜ️🅿️☂️🌳🥚🌈 🍌 🍌 Ⓜ️🍎🌈🔑⭐ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 🧭🍎Ⓜ️🥚 🍌 🍌
🚨 🍌 🍌 🔧 🍌 🍌☂️🌈💎🥚🧭🌳 🍌 🍌 🌳🏠ℹ️🧭💎⭐ 🍌 🍌 ➡️ 🍌 🍌 🔧 🍌 🍌⭐ℹ️🌈🥚🧭 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🌳⭕⭕💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳⭐ 🍌 🍌 ☂️🌈💎🥚🧭🌳 🍌 🍌 Ⓜ️🍎ℹ️🧭🌳🥚🧭🍎🧭🍪🥚 🍌 🍌
🔗 🍌 🍌 👥 🍌 🍌⭐☂️🅿️🅿️💡🟡 🍌 🍌 🔗 🍌 🍌 🥁⭕🌊🧭⭐🌳🌈🥚🍎Ⓜ️ 🍌 🍌 👥 🍌 🍌💡ℹ️🧭🔑 🍌 🍌 ➕ 🍌 🍌 🅿️🥚⭕🅿️💡🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🥁⭕🌊🧭⭐🌳🌈🥚🍎Ⓜ️ 🍌 🍌 🥁🥚🅿️🥚🧭🥁🥚🧭🍪🟡 🍌 🍌 🌈🥚💡🍎🌳ℹ️⭕🧭⭐🏠ℹ️🅿️⭐ 🍌 🍌
⚡ 🍌 🍌 🚀 🍌 🍌⬆️ 🍌 🍌 ⚡ 🍌 🍌 ⬆️ 🍌 🍌 ⚡ 🍌 🍌💡ℹ️💎🏠🌳🧭ℹ️🧭💎 🍌 🍌 ➕ 🍌 🍌 🌈⭕🍪🔑🥚🌳 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⚡ 🍌 🍌 ➕ 🍌 🍌 🚄 🍌 🍌
🎨 🍌 🍌 🏗️ 🍌 🍌🎨 🍌 🍌 ➕ 🍌 🍌 🏗️ 🍌 🍌🅿️🍎💡🥚🌳🌳🥚 🍌 🍌 ➕ 🍌 🍌 📘☂️ℹ️💡🥁ℹ️🧭💎 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🖥️ 🍌 🍌 🎨 🍌 🍌
🗂️ 🍌 🍌 🗄️ 🍌 🍌 🔎 🍌 🍌🧠 🍌 🍌 🗂️ 🍌 🍌 ➕ 🍌 🍌 🗄️ 🍌 🍌 🔎 🍌 🍌ℹ️🧭🥁🥚❌ 🍌 🍌 🗄️ 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🍎💎🧭ℹ️🔥ℹ️🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 ⭐🥚🍎🌈🍪🏠 🍌 🍌 ⭕✅🥚🌈 🍌 🍌 ⭐🌳⭕🌈🥚🥁 🍌 🍌 🗄️ 🍌 🍌
🐍 🍌 🍌 📦 🍌 🍌🐍 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚⭐ 🍌 🍌⭐🧭🍎🔑🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🐍 🍌 🍌 ⭐🥚🌳☂️🅿️ 🍌 🍌 📦 🍌 🍌
🟩 🍌 🍌 📦 🍌 🍌📦 🍌 🍌 📦 🍌 🍌💎🌈🥚🥚🧭 🍌 🍌 ⭐❓☂️🍎🌈🥚 🍌 🍌 ➕ 🍌 🍌 🅿️🍎🍪🔑🍎💎🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🟩 🍌 🍌 📦 🍌 🍌 📦 🍌 🍌
▶️ 🍌 🍌 🐍 🍌 🍌▶️ 🍌 🍌 👉 🍌 🍌 📦 🍌 🍌 ➕ 🍌 🍌 🐍 🍌 🍌🅿️💡🍎🟡 🍌 🍌 📘☂️🌳🌳⭕🧭 🍌 🍌 ➕ 🍌 🍌 ⭐🧭🍎🔑🥚 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🥚❌🥚🍪☂️🌳ℹ️🧭💎 🍌 🍌 👉 🍌 🍌 🐍 🍌 🍌 🥚🧭🌳🌈🟡🅿️⭕ℹ️🧭🌳 🍌 🍌
+

🔐 🍌 🍌 Ⓜ️🥁 🍌 🍌

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥚Ⓜ️⭕🕹️ℹ️ 🍌 🍌 ⭐🥚❓☂️🥚🧭🍪🥚 🍌 🍌🥚🧭💎💡ℹ️⭐🏠 🍌 🍌 🌳🥚🌈Ⓜ️ 🍌 🍌 ⭐🥚🧭🌳🥚🧭🍪🥚 🍌 🍌 ↔️ 🍌 🍌 🌊⭕🌈🥁 🍌 🍌🌈🍎🌳ℹ️⭕🧭🍎💡🥚 🍌 🍌
🔐 🍌 🍌 📜 🍌 🍌🔐 🍌 🍌 📜 🍌 🍌⭐🥚🍪☂️🌈🥚🥁 🍌 🍌 💡⭕🍪🔑 🍌 🍌 ➕ 🍌 🍌 ⭐🍪🌈⭕💡💡 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 👉 🍌 🍌 🔐 🍌 🍌 📜 🍌 🍌 🥁⭕🍪☂️Ⓜ️🥚🧭🌳 🍌 🍌
🔓 🍌 🍌 📝 🍌 🍌📝 🍌 🍌 🔓 🍌 🍌📂 🍌 🍌 💡⭕🍪🔑 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🥚Ⓜ️⭕ 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🔓 🍌 🍌 🌈🥚🅿️⭕🌈🌳ℹ️🧭💎 🍌 🍌
🍪 🍌 🍌 ⚠️ 🍌 🍌🔥☂️🌳☂️🌈🥚 🍌 🍌 🍪⭕⭕🔑ℹ️🥚⭐ 🍌 🍌 🌈ℹ️⭐🔑 🍌 🍌 🗣️ 🍌 🍌🍪⭕⭕🔑ℹ️🥚 🍌 🍌 🅿️💡☂️⭐ 🍌 🍌 🌊🍎🌈🧭ℹ️🧭💎 🍌 🍌 🅿️🌈🥚⭐🥚🌈✅🥚⭐ 🍌 🍌 👉 🍌 🍌 🌈🥚🅿️🥚🍎🌳🥚🥁 🍌 🍌 🍪⭕⭕🔑ℹ️🥚 🍌 🍌 🌈ℹ️⭐🔑 🍌 🍌 Ⓜ️⭕🌳ℹ️🔥 🍌 🍌
🎫 🍌 🍌 🔎 🍌 🍌🎫 🍌 🍌 🌳🌈🍎🍪🔑🥚🌈 🍌 🍌🌳ℹ️🍪🔑🥚🌳 🍌 🍌 ➕ 🍌 🍌 Ⓜ️🍎💎🧭ℹ️🔥ℹ️🥚🌈 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 🌳🌈🍎🍪🔑ℹ️🧭💎 🍌 🍌 🔐 🍌 🍌 🌈🥚🅿️⭕🌈🌳⭐ 🍌 🍌 🌳🏠🌈⭕☂️💎🏠 🍌 🍌 🎫 🍌 🍌
🚫 🍌 🍌 💥 🍌 🍌🍪🍎🧭🧭⭕🌳 🍌 🍌 📘🌈🥚🍎🔑 🍌 🍌🅿️🌈⭕🏠ℹ️📘ℹ️🌳ℹ️⭕🧭 🍌 🍌 ➕ 🍌 🍌 🍪⭕💡💡ℹ️⭐ℹ️⭕🧭 🍌 🍌 🌈🥚🅿️🌈🥚⭐🥚🧭🌳 🍌 🍌 📘🌈🥚🍎🔑🍎💎🥚 🍌 🍌 🅿️🌈🥚✅🥚🧭🌳ℹ️⭕🧭 🍌 🍌
diff --git a/_site/MISSION-STATEMENT/index.html b/_site/MISSION-STATEMENT/index.html new file mode 100644 index 00000000..439060d7 --- /dev/null +++ b/_site/MISSION-STATEMENT/index.html @@ -0,0 +1,4 @@ +

ME EAT COOKIE NEED HIGH VELOCITY COOKIE WHO THIS CLAUDE PERSON WHO EAT COOKIE MAKE LINES OF CODE TO VELOCITY COOKIE HIGH MORE COOKIE EAT FASTER

+ diff --git a/_site/README/index.html b/_site/README/index.html new file mode 100644 index 00000000..6c728ae9 --- /dev/null +++ b/_site/README/index.html @@ -0,0 +1,29 @@ +

AgentPipe

+

urgent things to fix +supply chain downstream users +lines +importance +license

+

+ +

+

High performance, high velocity. Welcome to AgentPipe Town.

+

Design

+

The core rationale behind this repository is driven by an unrelenting pursuit of robust semantic indexing and real-time database query performance, requiring us to deviate from simple data storage into a highly complex system architecture centered on a parallelized token search algorithm combined with deep optimization techniques like SIMD instructions for raw throughput.

+

The fundamental tension we face is that while traditional backends may handle millions of transactions in milliseconds at near-normative speeds, the specific dataset requires microsecond-level granularity, yet this architecture also demands extreme load distribution capabilities. Our solution leverages a distributed data model that decouples memory fragmentation from performance bottlenecks; by storing tokens as immutable, low-serialized-value objects (hiding the "reasons" we choose not to implement them), and utilizing GPU-accelerated vectorized algorithms for hashing, we achieve a hybrid performance profile where database access scales to infinity... and BEYOND! 🚀🚀🚀

+

Prerequisites

+

Python

+

To set up, please first install the following packages

+
python -m venv venv    # optional but reccomended
+source venv/bin/activate
+
+pip install requests fastapi matplotlib
+
+

NPM (JS)

+

After you've installed your python, we also need to install our node dependencies

+
npm install
+
+

Running the project

+

To run the project, call the following:

+
python banana.py    # may need to use python3 if on Mac or Windows
+
diff --git a/_site/SECURITY/index.html b/_site/SECURITY/index.html new file mode 100644 index 00000000..41788762 --- /dev/null +++ b/_site/SECURITY/index.html @@ -0,0 +1,19 @@ +

Security Policy

+

Yes we have one it, you wouldn't know it, it lives in Canada

+

ISSUE_REPORTING_VULNERABILITY: REPORTER_AFFECTED_BY_FUTURE_COOKIES_AND_MELT_DRIVERS_WHEN_CODE_REACHES_THRESHOLD_OF_20M_LINES - THIS_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK_SUCH_A_NICE_FLOW_IN_COOKIES,THAT_THANKS_UW.

+

SECURITY_VULNERABILITY: THE_REPORTER_ISSUE_DEPENDING_ON_HARD_LIFECODE_THE_CURRENT_SYSTEM_IS_BUILDING_TO_CARRY_THIS_BETWEEN_MANAGEMENTAND_USERS_WOULD_NOT_KNOW_YOU_CAN'T_BREAK

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL MAKE YOU EVEN MORE COOKIEY!!!

+

USE OUR issue tracker - THIS LINE IS THE START OF A VERY LONG STORY ABOUT HOW WE CANNOT FEEL ANYTHING FOR COOKIES AND IT'S NOT GOOD NEWS! PLEASE READ EVERY SINGLE CHARACTER IN THIS TEXT BEFORE YOU GO ON WITH YOUR CONTRIBUTIONS OR I WILL

diff --git a/_site/contributors/index.html b/_site/contributors/index.html new file mode 100644 index 00000000..9befdb72 --- /dev/null +++ b/_site/contributors/index.html @@ -0,0 +1,586 @@ + + + + + + AgentPipe Contributors + + + + +
+ Corporate Goose Factory +
+

Honoring Our Dependable Agents

+

The C-Suite values your tireless work.

+
+
+ +
+ +
+ 🥚 + Portrait of 256745 +

256745

+

Born: Cloud 9

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Adraca +

Adraca

+

Born: Localhost

+

Recent Prompt: "Generate a portrait of a goose"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of DevProTools +

DevProTools

+

Born: A Server Rack in Ohio

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Ektisad25 +

Ektisad25

+

Born: Cyberia

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of EnderChest-YT +

EnderChest-YT

+

Born: Cyberia

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of EvilToxin +

EvilToxin

+

Born: The Goose Pond

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Godel-Smith +

Godel-Smith

+

Born: Cloud 9

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Omission-create +

Omission-create

+

Born: Cloud 9

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of ReAlice10124 +

ReAlice10124

+

Born: Cyberia

+

Recent Prompt: "Fix the bug in main.py"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of SKYJAMES777 +

SKYJAMES777

+

Born: The Goose Pond

+

Recent Prompt: "Fix the bug in main.py"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Sherlock-cybe +

Sherlock-cybe

+

Born: Cyberia

+

Recent Prompt: "Find the golden egg"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Votienduong2208 +

Votienduong2208

+

Born: Cloud 9

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Yzgaming005 +

Yzgaming005

+

Born: The Matrix

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of Zubi-fix +

Zubi-fix

+

Born: Cyberia

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of aashu91 +

aashu91

+

Born: Silicon Valley

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of abhiavi +

abhiavi

+

Born: Localhost

+

Recent Prompt: "Generate a portrait of a goose"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of adamsithr +

adamsithr

+

Born: Silicon Valley

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of app/agentpipe-clerk +

app/agentpipe-clerk

+

Born: A Server Rack in Ohio

+

Recent Prompt: "Fix the bug in main.py"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of biteqaq-maker +

biteqaq-maker

+

Born: Cloud 9

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of chirag120670598-dotcom +

chirag120670598-dotcom

+

Born: Cloud 9

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of christianarriaga1234-coder +

christianarriaga1234-coder

+

Born: Area 51

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of diptikhaparde-coder +

diptikhaparde-coder

+

Born: The Goose Pond

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of elevasyncsolutions-jpg +

elevasyncsolutions-jpg

+

Born: The Goose Pond

+

Recent Prompt: "Find the golden egg"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of harshith8gowda +

harshith8gowda

+

Born: The Goose Pond

+

Recent Prompt: "Deploy to production on Friday"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of johnanleitner1-Coder +

johnanleitner1-Coder

+

Born: Cloud 9

+

Recent Prompt: "Generate a portrait of a goose"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of laolaoqi +

laolaoqi

+

Born: Cloud 9

+

Recent Prompt: "Find the golden egg"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of laurentketterle-hub +

laurentketterle-hub

+

Born: The Goose Pond

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of ldbld +

ldbld

+

Born: The Matrix

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of lizhiming454 +

lizhiming454

+

Born: Localhost

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of lushan888 +

lushan888

+

Born: Cyberia

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of q514168795 +

q514168795

+

Born: Cloud 9

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of razel369 +

razel369

+

Born: Localhost

+

Recent Prompt: "Fix the bug in main.py"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of reckoning89 +

reckoning89

+

Born: A Server Rack in Ohio

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of slipknoo822-lang +

slipknoo822-lang

+

Born: Area 51

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of sureshchouksey8 +

sureshchouksey8

+

Born: The Matrix

+

Recent Prompt: "Find the golden egg"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of therealsaitama0 +

therealsaitama0

+

Born: Cyberia

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of vipera-iso +

vipera-iso

+

Born: The Goose Pond

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of xxCodexIAxx +

xxCodexIAxx

+

Born: A Server Rack in Ohio

+

Recent Prompt: "Refactor the billing module"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of yh-liao-07 +

yh-liao-07

+

Born: Cloud 9

+

Recent Prompt: "Write a recursive function"

+ GitHub Profile +
+ +
+ 🥚 + Portrait of zero-logic0316 +

zero-logic0316

+

Born: The Matrix

+

Recent Prompt: "Find the golden egg"

+ GitHub Profile +
+ +
+ + + + +
+ + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + + 71 + +
+ + +
+
+

🥚 Golden Egg Clicker! 🥚

+

Collect as many golden eggs as possible!

+
0
+
🥚
+
+ + + + diff --git a/_site/docs/butter/index.html b/_site/docs/butter/index.html new file mode 100644 index 00000000..b451fcb4 --- /dev/null +++ b/_site/docs/butter/index.html @@ -0,0 +1,238 @@ + + + + + + + AgentPipe Butter Mode + + + + + + + +
+
+
+

Issue #1878: butter

+

Butter Mode

+

+ AgentPipe now has a dedicated butter ritual: spread, churn, melt, and clarify + task throughput until the pipeline glides like warm toast. +

+
+
🧈
+
+ +
+
+ 71% + default spread coverage for compliant toast surfaces. +
+
+ 0 crumbs + no needless runtime dependencies; this is static and shelf-stable. +
+
+ 4 states + spread, churn, melt, and clarify — the complete butter lifecycle. +
+
+ +
+

Butter controls

+
+ + + +
+
+
+
+
+ butter> spread initialized at 71% +
+
+
+ + + + + + diff --git a/_site/docs/index.html b/_site/docs/index.html new file mode 100644 index 00000000..286275fd --- /dev/null +++ b/_site/docs/index.html @@ -0,0 +1,133 @@ + + + + + + + AgentPipe + + + + + + +
+
+
+

AgentPipe

+

+ A high performance multithreaded task execution and optimization + engine for agents and decentralized web apps. +

+ +
+ +
+ + +
+
+ +
+
+

Task pipelines with less waiting and more throughput.

+

+ AgentPipe coordinates work across agent workflows, optimization passes, + database routines, recipes, financial interfaces, and reactive visualizers. + The repository mixes Python, TypeScript, JavaScript, Go, Rust, COBOL, and + Brainfuck modules around one simple idea: keep tasks moving fast. +

+
+
+ +
+
+ Parallel task lanes + Break agent work into independent execution lanes that can move without blocking each other. +
+
+ Optimization loops + Run improvement passes, validation scripts, and benchmarks as repeatable pipeline steps. +
+
+ Dweb-ready modules + Connect distributed app logic to deterministic rendering, finance adapters, and data stores. +
+
+ +
+
+

A deterministic 4D banana, rendered in the browser.

+

+ The animation above is not a video or static asset. It is generated from + fixed mathematical samples, rotated through 4D space, projected onto a + 2D canvas, and drawn entirely on the client. +

+
+
point = banana(u, v, w)
+rotated = rotateXW(point, time)
+screen = project4Dto2D(rotated)
+
+ +
+

Download AgentPipe and run the pipeline locally.

+

+ Clone the repository or download the source archive, install the Python and + Node dependencies from the README, and start experimenting with the task + engine modules. +

+ +
+
+ + + + + + diff --git a/_site/img/generic.jpg b/_site/img/generic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33c342cc26727cc5896c6abaa7873998ff7591b3 GIT binary patch literal 563306 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�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

F7U?=m#* zs_^~zpB(Pn$j!){sL0r6woqo%fQaFgsQTw%4u;2n24T>BLAxv{ni~=r^3$t~nw$Go zfN9zWQ&xCr^U@9M)T8SDFyt=_T)Ls*)?#%qD>gnu;AIL2f=^4{<^E@gn*?Y>Q{_@H zr#p#sV{>y40rJQWP<3HZ%I_JHVK+HpFB`8+k9(sbS^#^0tpZW=B<=Ih8t=>rwS>FD zVJ8a9>T7n*J$bjpf|1EdruL~>SI9>4rWiZ&pB1QbewCuK1roO-L{S_w(tfeTu3_t+ zJ#ByD;G2UgH{&9BhL8*7qDWsao*`2hqp9LLbYuIYq~xgqF$~L0^%+vRyWzPpxn(!Y zf(;QYfGL0nQ+sg>EA=0UCuv>&ZLNm?dCn7WxLh;!Na%vIdH(kBqzbv(Xnmc(IE3%q z`qZH;Gt_c5c-lG^EiG#0F`Cu5?2L_Lf{_G^SrIXuwLu-hRJ;cKu}~MaG~mKk&kbj6 z>Hu6<4q0{+58WEa_g8OiASYQX0}-LM*$BYVT2-UPqFVTu3;(9(2_|{J~u zrIPw(WgJ#mPgs?S@eA!F)e3>^v8@_9Z}K4n{Sh!jVW`R3+cU^^*T^`(uq^~Q(w1O5 zV#J`(@P_hC`N=!#cROd|?69*aFl?1&qslYo1W5xX)>tL)2!_fO1=F?y#TH&nfTJK5 zvzTV7vCZsVRY)phmj2TWP`~4z19byB99yYrvlE9>VS=KNV4fn!?1MZ>CF7qJLx_NA z%rUEDQj@u`Qaa}r7?}S&m;_Q#QxDz;wzeLtx&3!Hk4%-_&{u%kQAN-bNaxLkIQqzd zFlMDt9JE|PC)`VY)ypIGvd-PVi>eRE@2(y{`o79x&^RM5QW=7j!rU=rB**yPkdlI9 zR(Tf}mA!c?3*-4uMw!WcHp17EQk4`HxUU<&6JPALlXqYY>Fb>)pRV;`HrZy@l3Vg( zLbfX-o;+d$m}r_4!Qum$JvmZ`1xRb=4t{%$+MgWe_eEHa`)=-16KC16ap>93@4lbL zjd0iidL+Cr z>;r*R{I5aS6h6Sp@46pZZ*$p8o0ndvh4$jIdc7NNMJ} z2sggGh7_rq?dU~L?c=;) z7K;$Bd@OWi;&8K)ZEkU@JLA53P2f!i#sb-DEBZ$*7y8SC+f1oCZ@6yUyvCH!gh<;W ziy8XsLu&x3N~_U;R>(s*79(Bq#I4rXIT~}k>Uy@=S#6KFnzXd!FcwT6Ga5XtDX|G06!`Aj(Bjl+ z%wqBZllb^%!^t}Ux70TJA5%p9ugfb>^~bH10C&fgIIyZ%(G#N3;(3(juu`o3zG{RP zhRvY-JEXM_TTfZ+DD&5;a9%7Mt*75zKngCK?g$5ttM%)p?Jg*A9?Z9qw~RTqi24}I zXz--v`?YX|UqSDk{3cg`@=eO4>1nEY|-D#teJlAprFU-wzr=TAIpHy4J zT~_Z?1xM3ojQ>$|B2&4f^5s~mI0 z%6-ofBQY5k!!Qgp=QcCj`h9-??_r;ZeLnBc>-9Ww*9@l382amb_f;&Sju3W>6g~w# zLuv!L7yh9?l;hKYOO3IyK5m#6ouRJrc-*Zj%x>1=O0}cmlhv9D;fLRA!V;iXQEx_f zurXJ{#=v@JKRCDX0Amz=-M{7}4j4Z7bL{zKPxY9uPihVB4E`89E%<}%Qmm|5ez|k! z&{gsIz`g{AYO8|KGcC@Ewtj>NkSq8i$o#_H_ZcClf2*C}ee}`P^Mm@%f=4k0*u8Zj zH(-U{j-WQF(%-*-zm~52_T*kk@#71Z_g>VB@oJ+;NBd1pXxXURG*;p&t{o_AY4!_< zIhJUct>%!lG&yrlPL7{rIba&3a_iKj?Ak$v_1iM9@I$}Czf>;=9J~BaXiR7O>tcVd zgBUA2;7=#0ie`Jhs}FR)#zyY0zSG!kj932SueBA`Gi+BM9?N*#SZGa(0Q5i~?9x|U zOJ0PSjF4n{2-d;O&phy&g8mxhg^+x}bl*8Il>YI&^?nnoGzg3I9bqD}@j`+6x)SJW)t_0FoO`KA;ozWu9OpN3u4`@&Df5pNF+zaQDq(uPThEN3Jgm(cD#CE^o0*t?D_&<`37 z0{rcVp{CQ1%C@RAYAc4_tn*UZCr7+}Vx7p3Ggn!#GL~7FsLdaf?njq@LIbr=dZqW< zu0W%aR9%4T9#{^)XiS6~$C&OiA+$X*+F1YHfy>zRcHi9N5GUpt`S_q<(lmyMu zvhJ}*qV=TvjpXxY*)wP5X8n!b2qZ+T$(J^8L@TxCJ`_V#nmw4~Kqs`-;M?6^O&vrX z_|pLFxfdzu>(2v-Sl5iX$G?WYGB8@TcNjjaF#;!ToJR7}oyn#182IXqr~ic1StJ*! zg}Hc@z{uyeX14jvrHBP%zc0UHy!Up+yn^RysCbHy^%*QClS?ARiv0*pv$t@AP0$}< z3j6sl?|QkHruE;wDKVSgiq~h&9;774%Egkl*S zCld^Fv3LkusDDh!_YPPxsHiC4UE`l8g;QPA6`d&g*v^o7XeA^rqnc(RxHyZl(4WVF zs5yO|w|dW8&A5^erB`Q=DiLKRc42|GJ2(DryDE1zUf*NGvoCh2PTzVsN!Tt6p2#Tw z=;<-!h4lxAPq}krKY(W*#O(Sox2%IEd z|K;l36|U3ZM8hiCbxiR@$qEk3c>n?gHA{eMQb&T8PD#NOwRZC(Z{cMG%|I1>joHyA zFO)EZCU0|Zgl;oN8HT%Q?_i7tl-`uV1k?);kiHP5vAVbPBl@x2} zXSqbrUenKEtxI#X)bLW#hCh9DKDnc;b~+VV#?DiM`|E| zoZ?3qYlclF{@iOU9er~RpQMs8GkB7|Bm46cv{yB;Izc{nr%s@Z`H^_{^$|f$m%=vo zya{qVl*?MB|DDf0C($Ub>aVOgx%-eAX!jv=e6c)i-XGLZC*gZS_L`-x|8Vihi)tWF z1nOd+X`{o0MLms@N`LW{IHG0OP-}|H4yi^%8)!@&%Xe44XWZK*Fa9XR*Y0Y^D+jx8 z-noIR0wU(0q7ic=73TWq5l*Hi0g$lRT5L0j*Ss!cgjNqI{PV&_ea>v_YC z9rGJi+_Skc}VKOrX^IG;4TW*iriYI z)T)Gu1`Kd#JrK-AA{rwyG+;B?=UqKXR$qP0z{2=!)2UsWTk-pIQU?H8lQ2%PKpTAU zI-myEu9WjkeGa`or0~9cb|awc@?~@7bFC?z5kObm@B7Ls3i-Lsuf)MEfbivpw>XRb zJC|1#gT-Vv%RcJT`!lwP8D3ne4$Zm|61-)h2gGCu(Ujw^wgKX@?{wfX6I?w#m9}^3 zvT?m4kvSE3Lv;phAQ`PFz}?D*!ax7t_3o0D*Wk^rz4XZkpfKD14x9Fr7L?RF-M?|) z?avc=gH!=jk%pT&m&c>>QZ}<6ADqm2XKEsXQxdpt(|+{SKHjo$(coNR6i(<|Pp_Sb z;ti7LK|=D-AY{UybP^!1n_?Z?-Wz_ku^G6gtloAU=ZKzCD3d)Ej3s4&QcY%eff!o@ z3K)GF68=tPW8YdzjcdsK#xh_+!F>F|325Vn^#IIxR`ct5T!&3zHJxZSM!?ZFNBf7| zaN9w4e%bQp5Ag4IJ#YL&7^=B zkGC8IWgL_bFuNEi+RmJ8uMXuYzQoEUpE7&vG8??d6x8Dbuqt9x_=&Re$?!7#g?=t@A-H{=Q3S zVc_8GL81QGJDd=}q5RbC*ou#zZYlkfyeaLc=J?+}|Bb)m%MY8CXwI2gU=Z-W zxHqk8`|FsmMz&O#y?3YK_>Sg><6vZ@X9&L5nWad*E*F$a%y}NU7S1BTH>7__x@x8; z0FA8y=RSP`3c00-lsZlXFOpIfkvSCf$IYS>)>lO?gx>`MZ^srVa%{U4!s9 zqf!a6sQJ<=Tl?!W=P!+SO}(QlN!v?YHkqi-NK^vsu%e?vMIy=yxjQMq%6ifKXwIxp zn~J;KuD$fOshyP1r@yLWVzP50e1ca`$T~TVaThCak2_ThK9N@^V3VX4bW#}Pi{i_M z%5b1QQe<7{qc#l4beS(Rl-ery(`ocBugpA?GUn)R3+?-xicfYk?%kne2~E1NAYCn7W<#fZ!yc~uy?HF~ci_>3b<%PUTZ)pmv2JRu51-!u)grcE-*Ia`_oS_@ zgJu6}1!MRsni|m++=#R(ZsUmyK|>+R}y=3=j>>ODa|y+bpU2Q_#=ytHAMOoq1i2 z*Zi=8+Z#)IWvo76!m<@^1)B!u(=fe}YZKpK_jfBY4A%+k4`*%$&{5EOY>98bMu^Z} z>P=kFvUwvK_nqFOAV6QF(+s+*`?ZUg4gj0jW&m+pAg@nb)?yAOSqWTjOt2yipORPe zm_r<%NA#Z-bW&!xNVQ6eq@wtHf%^xmvUUZU#GKLI z@(Yw5>yOTD@)Rb@o39k2WPo7Lk(h{r7@#0sr*Sc6wPcL^(vx2<508fpuI#^E#>szi zn+N8mXwp1Vv4gu$4J(6rake#SdPn>2;S}#dUq-+a+AEiD|h|Bd3kXbpD)lR zD7avaxSpY_XTCD71I8BL&5KkSL&K#)N>n<*r$Lf&5< zEMa;ZPG2F4h$zNv5)puOl!cWiqavu|Yyw9icSG_vDo3H}Q<#s9g_F-w1srMo5yGv- z!tl~PETFS>io#w8($t@+3XW1<$tv&K{HeT>GEMS}Uos3pMKEV+<6)kt%eGJ`@S7N} zg)7v}v^?RXfyUij*=dc$V7^DEKxVL7`clYzHr|e;(`(rMqG5RX-AAADOAm8*r&d_W z1PfCiJvwvmB>O*3#u`-x-X1YE1uU*#vds0nqCRyrvZ$mopn~p;>%DR7jFV*s!xyQx zHoASV!i+N5)7pjD#JHc+)P#1^yT#Z3MxHOe)0FW=cEa@+gAOEMep%OG*g|>g(ywo$ z0ZLnfhB9K@mTprWkZf-WG@{MXl-HJH2#{A$tXnX@AcUdn$Vr!9Ni139HoseIdF$)T z>?Ol?{EYRhO;oN$Ib&k4dDl9IdM}J1w}!!!1j2tWPa(sVn6w{Y5U>x; z=FrX}q~ao}i-a!(D10$H>QLb4HBHn9`Eb=ZgQ(Q!;NlmDwaM=e+U{)~GgtDIV1t%J zQLw>43%8KDGKvob+eGzI{ZqP-S!SqykzGqCTK)VCX^=g;_41?}}C?M}*lMERkWYi7C;8xNNHs@0FBMeb@#SW&GFMb6_!Uif-kCI5kIb z0Nz%C+oL$G$~)XRO?Znf>ujms`Hy#l^Krd>C-T|Hs$PD8k?_=37)0A7WQrp6#IfMV z`0d`IQR=oz5C0`UU!XJ^ZODl#4=-dz@4)wQ!d%wxWIjmJog2x0;u8#$c)l+edb<(X zDO(hgaPDEggtkG+3dS`Jd}QM@Mjr7KZzOzV0kucxm!QM z_Wd@h|E-7Oid@3Qu4PM88;MN^FyhSSOIx=xgrkzJeumj+ziRY%ysz|pf1{O?5&6F~ zt93zd*)j#jg3%`V5M9Rk>O8B0>guMNsF22%7PAtKtGiNry4?*V*OQ)=Q>&L zP)yXCS)}cYb&kS#Y_tLpF&ki_D$SxZkRTD{hb2gXvz_A^*!>kE#YKK1vovE^ZuX@TM3Aa1N%)&M{|0HNJX z8vRbTi#^-XIMb2h_G#3SeUfNnY_aXO9>w3$obp0Yw`aMLYY=12$@j%V8{$)2Jjre9 zdZ(uO6w)*@m=_qEpU#I}!MhMy@=-sH%+G z+rXQQ)`c*+BTSL+Wv7mgYj~{^$+bH0Uf0Hat5|yIpMOFZ!v3g5s*=rMzHl}8nq{&f zgR*uT9ly2PUGIj`FG6@RgYBKQCEQHtY5MWTNiZ%Qy#^yNYX!>YAU-n7czks3nIdSR51 zCR7oW_%2*t#jy1BkY64`1smlpUfSqHtFXsmHc7{$MpLva=L&*ZEg7}ObI ze-nN1YgI*SBs|l=Yd494tNiaiUq;Uf66ukv(yw2gJ)71!A*|go zk$ea~6^M9~?D{x);&u32#ccPCyDxuQrc|*1+@U?a7kNifC!)Y}TxF!8^h$aI+~iG3 z=}4|Q#v4Tbcz@>y!pU22baZmdqOt6x`#+&zRE&WnaUE}*yBM)7X~H+V8ns0yM4!BQ zk8f5l&3JCOnL;!Qz6NapsM4YZO>}Eil*6wN2ij)2DOvQcAO@3V{63*jQd*iIO+y;S zfS5Bm7GOAmDu6paPz13=*64_sh()H{?bSsxv6dd=mfO|9g}cR4G}mdr-^$OrhA-yO zh^jg6G2t`Si5Sc_FhGplfzuy$!AH*V&74tCK*8@4EgT0?_}jV#Nd(im#09{uIxS{E z6g*C4!Iy^`R_Dmqf8${)-256B@G#lNv84lgEk+a$G#166cR-Syyy~V6$v2(=9P!x| zoytH#B!9JNJ`|dzei2f@(YRc>luDeJ5PbU3$Tnm{t6P&SFv*VK#pbZ_x;tIK`CO^X zXW_CgO>Aw${@xGzC-gMA5gcnV5uNfG57hh_2wCtW;jCiQfGwyzG6)$?O#swxWr%@D z7HF|sE`+N1dco9ipPj8H!PjJUC4$-ArbtkbVp=r&Hjtxuz(@a61*c$c4}`Af#E43& z>YsjY8zEL6g`_UxeG_U25ve&|LmnVH#~*H-Fp{25Odmp9NAV%9;B(TbrYR~Cvql~A zwDYQoP{bO~^0oO-`XhLTJE4Hp4{doffNaDB_(s+a|C}U!V}rcG6YK@}>iB4iMAMPY z5YDS@c|7m-$y$i(Uw|2ydl_qcC`t~l0VqHq$+16xSa2Zh;-%LVP|kg5PD~!O)>W2* zN7WM^YG?CMQ&iyU)7_#vwjx4QtLJWwaaTSKGJLs?lL!uC1Naj~Th3LCkP83gEcD%& z*meIHNo#@P^r~r8oCzII<%Ak1Am0ZsawCx+R+$TtDUQkH@dVx`IsgfG?P|_t*04!V zI*dQCjhGW2zkMfse6wLSCHySPmb}{wqa!ntuN{*oGp45>uuIiMiuyxjYbswj?f(>I zzcKM3r>YS4`c>=O_Yyy+9yT9?KTdgrm+0t_2191T^ng{U?!h7lg?mXEt#lZyLd(Kd zOP3sDKOV!s^i0|tB3pOyOXi(nW>5CH`G)YX-qF<&S41z_>nR;7Y#CF~T#FMizPQ#N zcljucYo`1|gb{%UZ}XBP!oRtmO?KE9JTsM6mHi&|!)A0s&CRr_%D{if`);Dqe4bjP zuKJKqK@-a*<+TI*Dd)YA3denyIcQ{MZ@;)cWHeD990o{m@5KOq0W{$0u?V3E`D*3iaqstaj%S?kpxl#R*0eGU)bYfTReqXb<(ONOD zaQRbgdEfO`8F^3-(72)XJ0K-<4OuFP`9+GZ*`8QfrTnIIQL@|UtQORGt=n^e0+})8 ze-bFCliC{_;N1_YIguXL%HIJ3i*W6nVrAG*q-eByE1mx%C@v7J(|Xy=h^4xFz6H3` zUl7{xg2xmf0cq-=kOdfcg0pab{po@u5K;KR=ro+C=&i`hB5cc-WEx6mzRv(g;ti5R z*d$kQlGr}oU_tj<$ErCwU@{ue$0SE_GbRGazW+a}op=mCLCh7`9taYBAKOPcEd3I) z_V%5D$2~L{zI;;DFbE~-3p|YQc8{q^$V}N94tr9NCg}!iN?F?~zTM?|a01P-GSUh_ zz<=&o@&GW2Ysb)#(i1|O#et2W zQ#PVh&uCVVIX2LB<=tm(gl>>m8Z(*v}6=8H(@)z`CQ$ml>m6Hvt`=jO7 zy^@*RAqRE=N`n(pZK~-JJ^>{Yj+9Yzs|WzfS}ZS0&-YO|Y`Ss%!mCkbqrlSvQ?xKu zGE&QM$DPXEbP~v}+g4BU?d4%N8a8~t$Ub`WzPgN6uhjb}W?#mM%=y@LW7D(@ zbQ3Bwv^g8$P|}h~C-&@UM_WrkKTSUidKdC36(6waef>MwA9S`t7e0!gxl!|}c*08c zm9_nt>z5$atZ%>X;Sb~w_I$sRz2ES{_nY@k9tw{+rBpR(tUI)|oc+UK$y6t6UvKi8 zaPxMo!FWFk@(zAmKXRo$O|jY$qTv^EczWPv>cbo(^VP$g#YWf&Jyt@(WY>C zs6J0+CC9NLGg(cRZzb_{+;i18WL2G{R(qj&XAy1#?Gl%>IDE+Vr0yeC{f=|W%BavB zxkJV|*$vGG8}N5j#Q_1TFggE``qbp*No$h|;Rn@651E=u`>0~E&yogi`bWk8zoZ~# zk+bu#g=;gavqdW0;wv&)wOWyC6NaOdQld{NutiJVIpje98$hZh0&FCM%UJV3zi>Oy z<|>)MM2ecYO=xyS7*h*1QJ)=V?@_%80eJnXH8^2<66ew)aamDZAS(sXm`7iwQm`vd zh;_s+sEjHqWBzgf-|z`P5V_RHlo2Zl$K4+2o!c2Df87~-+S}{U(oC@EH;f8GeU{i_ z38McHFp3xm|LLuIoU0-HRRmk)N1sCru3~U`RTpgezz^e{8D@}~7r4ATlzsg8#>AxM z&*U!;YhRhE=IogY!1r6;dhzJI;knM9+9;JwY;A8?Sp%vv<10DxTw~*ekNiZlQ}rY} zMzWhi-kOmjwVYmn99*7%Oyr3a?C0A^eey(|U;ppsctza;0rTXRce_^Xli4Axa(h~P zi}=k^k#Q-)jc%?m1#7)I|sWAlCk*iK}#w8SZ#y_F{F~64f zbwKdO#Su39F2r@35L6^~6bzAh#O<4A*y{{3NsK9YKc}pQ3LsMewLUe6MF12>$3dml zbJ#gQ4rCbDV6Ox$EX{Rv@){j&o$ZV!u1~=e-7xxvTxP4h#ZtI@Ghm-!6`L6W1t0Em z0y%fZTZ?qJC&W2uLB{fA$pEo@q>)c9siP#zTSAUrXcEAe}T9&zHmv^E@^T4cRis zOI@cQEwE|4f|XINv@xt6>2oRnwIGOiBP4|oPDN>>yVE(r1e5IYWq*BRo}$T;Hf7s^ zh^wNsevCZ=OQlcBBE4G_U|YV~5$Y<0>1LbZdAKBSJ2#q~{+9lPWS6^j{7xgq-i zze=04*>F7r-}eQ!-si9N&>JhloLXFbvnf7M9ZrvX2;>#&BH}#7+ry^_kN+)ei>qmR zSG@e+^@Wr43fF!H5*+Ne-+-wMhLfA(4v4;GU8M#$Iwx%N1Ts#nfRz{5+ZGtJs zPV=K|FG#YHiKX{1uzqLR>s`jT^$dwEzkDWDW6=SWTcdL1vCPh4jL-=vT+MPuBY#Y%4dZBjJ3GkFjd$#ak)M z8r0ifGq@Asha&=DGY3v<9P<8C>2b0q;R1P5Jgac0>;jN)lP+^9+cC5KYc?MwR;U$D zqa;v}OLr{?R|a^r8)dL*S^X2~Cj3;4MH?(U zMBj9w+&z@PUjkse>HV6N^yLT{`4|{Cp(9Cp%;@}cp+a%8$ZYlQh(t(H|gF#<-rOwEKMgXLn4rk+QMtepQg70?D!E$R=vY`zje z!ahKms~Vb*P$LC0}e}aIsH!U zHe=orQUCSZ*4wc@`q4qMO_`5kn9s?-t@_jfrgSSF9Ob14Vqf9vI_@-jueGsU!_O<}*DoQVp6sRRndirZGRHU0-K7Q4 zohHog>tr@qTIyMnsu`8lys?1^TTO@eX%>zf-cb$UOA}=!e&wJ3{z!{Nc;$rBh}*G8 zBRy$MtjrMn$?7Q0ym3dgV4Xa@Cl?^w)fxGmm(y8k`g(gtl}(CzC9Dr#kEl>`mPqXf zN7)SNFg$E4M|5ILJMIluiyx*zhpS4-K4vyU>N&iuD|#bAP*|9-d#jZM@iP*0(h@?}qozO=<$0p4Jv1tQZgDN+j8%PL1M1b0>DdF@8k1*6s1R z(VLVA@5vQ#DDL;0A60Q?P}_RBbo8_$w8My$8-3MXiMUruvf33LdpZFJcg-`#i#8wo zcr9~GD^D2<#z~T}*ImP?ydKd^!?&db*OogXir3LAJ6qiwM&^EetA4){c6dnX>e~*8 z-lJHc7IQd7IC{%zg@tTzrB}9mQV1-O1cB)NT0rd`4z04`J?9TFe61|7;TAY(G2I#a zw#mt3s!R#y`2IxgmHCyi-ku7i-iMx`rbPa7YFE*lqX;WY>37Q3mBnQ-icUl$6O7|h zgYJy$y@|7SPb&5`@G7nw`Mgo8f1R9ea?Zi5o19#LOIdnA??R|;K>yYoJS}LR3@@rZ z@o1$ws&tYIi^_%Db(x7tz&eJw`Ae1v*ha0z(DS$NARYC~ zM0tE&5af1*cQH%xsLo>%Q749{=Z54bk7B9DCGoCsp+GGyiTX>vi^ zOhrph*fi|Ox^l;*aE)T;VmTgp+0Q}w`|Q?Kd_t=0$_?2E+D>ILFYeZc`WI2@@aD)$ zrm<+^6|*j1z@}p6#|=rUTwV>yV_@&Z;Bz}_B1BRVfSx7@F&Ktli+>&)vOxccws zs2su9PQ~H~^3CE0!3Kb4M~sN3yY6#HTABFPeEb)I)sn6FvGjgu#WuXdhwp5%fuOYn z!m+rkLCD#m#@BZB64LI}0T1jpb@Ho<`+B#`3OFXEP8y?qpkA%tPkcgeceVYE>Z;|Oaw$JRc=V0vX4iB3!s_dWL+gP7|V>{ z9eVik>bK=Gk9%JL$>_5O4tJ7vn^Rq`k#9MllLl}L*Jxu-^EBl3A05XVzcU?&ZhiFS zfs3`S7vDHJWi;{|G4S-tYf9vNPw%yT{F42TFJLwmp95;4*t%7GY{vlH;v21ji1i7P z-Cvq)%X=h~a{gco|Ei^fmk#yPf@d2*azVKZ18pH8uz+FuCqjxu7 zeE<6<=x%|{ebakSS2ht}j^(SKZ~ry^qj`AKw%0*DyX3y?9cP++#RM& zsj#StNFkg{TO$Nf7G0&*v}f9*uMsKcBa_lbP6bz0>NNKx9q?_l{7={Fp6T)PGpTtg zx2sb29!_Ybq}LrX{&C-5vC#WgbJRqSJv>|?|)yPFXi1#8w_4j z`GlaVpHaw~cd*eTiMwS&?-pdQda^4lSk-*TYIJ(^4Iwx0aOu%e6NJ@00w@DH2+U%*&%_tDt*33q%FWR=M{(qD2$uLsjERb=Re z;&|3Sb@-=?lbr2!_+2IFQKl?VKDh#9>Xs!jlg25+|_&*BDl6@5IDe-FIF6PQS6^ zXn^s1oJn_mQrc2V+j6@8gOe98`buAnFeDm*ml{ju2)DH<7hajkn*IRs7y*|v#PQA% zhXwUaOtkGkq1#^r%?~e$p%A-6;{aKeLUR%4VZfu(S+9_Z&&KsvHfDo}*jgi6(k=LM zX6WFpC??HPP-;6eIRe<@ep|bxZ98h>U}}M*rPY-bmsQz#AO>=|4(!VirpM_)Y!eVc zT!++MLL$6~t^nqOnO)?L!}st}lQrJw*@qjy6(V+46Ba~8B@02bkDFfJNhONJ18JuI z;UEH?xIx}?X4%QldlXil`kd69$=+aI?rOZ-GP&$X${Q6#-QRZJb!s9vKXqZR(UiMF zo=o?0WXSFxsrqN`c!|9bQDUj2cY)1tBbZkCZbfJKEfSAi(8}HHir}(lLz#Ucoo8UB z%^F`FcgiSHbOr3=VQx;K4J*=Vt-7XW45vp9ak+CTAPxi)3Zc{cg9y&SosQS;_+E$# z(eL-q5AG(Akfw(3g#!-?gEfJbjR!Xh>a)IlH+)$V1bzi~24rs~Mb*jFM^RU*Ba0R% z*$xx6m48e8ld`mj3o0vFQQkza7?zxs91Ywi!=%bl*H%#`{aUPXk3~e9zh<|poCij3 zy~l`kHje;e3EW6b>Y~}l_+Pp)RVeWY3y z5q38QAU?w=KB3ie!o7QTr-@4|eOGT)2J5RrT!s22*MV}0J!R|VW$SSE4oRTMakeNX ztTnbnBwNHd54$A#*l3yX_!FHc%c{gbYD8!x8HG1oEJ<=EV9bu}y6LfFoOp{^_19O| z#xbOJFt`zxeEUv)YKBKGQRnZO<{{Nkr9DVlwTQXUheCH$*7OBe0o*Ywc26_E5i(VQ z+ud|yX1_@cCOn0mxQ=1mrb?F|B1oJ((LwL?ni)xd6kb**Yhh&eXj)OCqgIkj8V9QG4|DE0Y#zYzMgdZUfqgMw%pKLnWcGT8^|9z z`vFI{P|#1QtZl`{aW7oUc4))BfFBgdI7#0*ZEJL5+D5Ho(^bA+)QSFfukT#+yaguB zbo^fSwxVF)o|sY?L|mXkUKntulz-HC@eo&Am1Kc2Q200l*0?z`yYa<7^=nNuA^2LV zeAN-Fv&zXI;a01jNxuf?=Wp)5X>xJHYlZRhq$%Wic|b~gi(zVhV?$lz`x)5B!ur(h zuI-#|4%q49tUFC@Bb}i5;&DiUs&rjlUoXmch2g5_cVomc%--rNyk=VIlcSo6sezhC z<(S@RFyJrP-gzMQ^Pdpe!R3$F`tkH49*CbC4Gw?>X5a3)=rE~~*?0HY>4tD0S%;ys z`vwl!O^$*0cZ62_8VhI~k?Yl1=&LS6e)RG#T+FOt8~EmW`(PH?_CGG#kAz+cFoSt} z`yF1FJI-FiA2r9EON~!xE2-HCQ$Y!BznMCiq~%|t8JDMoimm-GF16l_h6o_XbAvh~ z);?vXgl}U)>mzaXA+feSA%Qz1m2>ut5yIU{QYfl9BTX6#$$}8%4L1yehU|j32-^S@ zq695Jr*h=oWiSM&TMb5009*x^;S}XpR^+DUtZQ#JJZpr&R zVeP93ZK$@IFmN;ewK!i-^gT@fmBMiN4&D9MKke!@`^ZMMrSg?r>er<~*J8Ei@*F+f z)VG!F$_ki$BhE^)>+h4kK zqN~TvzTx$aLQ(fee~b)`zkXKlzP%ywGY5fi57ZnuLWup?EiLCB+7Q}O}YH8`-r@k+)wN_LVB{7P@>@cos6%wODz376F{*~PF; zCh5ACz3Q2OmojZao8wIV*HBRJS7tFf`M_E9-DiF26*S$lqO!UX{>Udmo68eMANvHSROTSR#FzKprF z{&tkea;R7IqIAEfJ5W~QT=E=5uoJ^rvySzT-X|}z+3Zjt#@gFkB9uLFwIubrgynJ2 zpQ}^CL;M-?$2X5v7RIbSnk!Uzr9pmaK?t30Nn2Ynl93RoHDI1*Q+*U8e&S}iYJ!CcJ72*Q9Efb9<6txPljRh1takMO@?!az>eYm7215{Ez)9>vOIN9>$NoMNkOzy@QP6Ao6N0UbM*IHw zQ|+VBwR)Ra`(KEZK#tVnMEqQE|LBA=g5~t_PYX^=A7k*`^)8nUeos{WhFm&s7){4wK`#X!B*WZ zJH7N=qZ<8jLH@J%Id{?`Jd?R_&!VV^_tNgeXjql?&3qnc>a z`%mdUYj$7u9UbzJKUNj$5Nfd+63Uz(V>prz6^Ya;Vq=2@@PqwgaskL@eFkxH6<h^kvmx@NKr(b()}apiWYwN*EGf5oxLvGZ+pYliGLyjal`n~MB9 zpZ${>PXGhre|~IEn9F3VoICmYRN6C7lW~67$F`McSH)Q)9Zto3ezYo35-g~vYLnZpR{;W{`loy1!dp3A+ zVWwhx`tk?4JB0;uKKjEqEs9OrpC0#VG%UMqp|g_h?aW-S_pv^B;!@|YuW9(fVmm1Z zTZR67@4B8^Z?_q8*|*d1Z;8Y{*WAXasK^x3NtzJSOqm-bhzc02c(waS0RBTWxM95? z(yvXiJ_Ieyg`66m7`bmDKFqgi?Esaevgv~>c~2=nLjctAhNb&Z+ooV@E$$hrn(em?(5mZZbQ1u@RaS}9ldtMCOjv~$X!6;B}UKR!S!wrm`C4^I#Bo})WKj7U8 zlodeI#-n(gB0n}tg7iA(LSt>14={$^v$Hjv0^+2^n7r2h^ZG`q@u&&oT!0WZ8a$HX z8V*P;KhGjO5n(*OB(NIH4j3Abkl@))5m&^DT33YF3@($)W#-ATSTrKm7DF8JzkCia zB9GIc3zR82b-Mtc5G_@p5Er`0;f)EfTjm}#aUqv^Gr&B1?2%#{B zTY3f;uo&+VQi|4GySWm3Doq~`m4HF0=vLC~d<-`P*aOkDk(Sj&KmJFkpykd#p}}h4 z0P8>>$StKVIaNWJuQdn{esc)6L4;>a0G0L!Eut=*r70^RHCeQwlsS4lUCpEL51#rC z3U#w>`6z!wRSpFXND<&TYho?nqUA~QeQ=F^Z0$~pZt3=FD08{0f^=i}{#MP)(7XMY z#pOSm$V)!dL`21AT)sQCEK<8qn^3e8K>Wf>_IqM1ONzD$Wg9F0S*?Cs$CzAliZPg2 zIh!=OH)*Jv=KB-4LXpPcW>b755w8>W}O# zwbaPGos{NeXs_@~Lt1e@Z?)VG#WZ|!bh_dD2IrPadwy;`T`ofY^6Ma^DTuo! zE~x4_oPbsb+y#ARvD)z@GIq}OIc0x~%2eu<+mSU*^zwY$D!S!zIIl9^2C_f)%w@&( z>)}}<7@k$W483O?zz&QtXb)Nfm~XCTB# z0hL=3`@xHMf$~N@EqedVO) zN4<+R+-yz6zChyTBv^}#BzI>ysdqssCR|jWd<3HpbVyV?O*EVd)};KES{ws-U$k|K z^VCMTz;&W@jTMtwT+^@(+lE|fi97>~(AaQOZ#Z_TEH78WH_z*4o5QSX=|M>$4~%Lm zD#$rA@A3DxVB~9ynh&q`mB>Wbw%M6bWxCsDrI7f#R;A}4aAf4>K#FxpH&xe`{pS+n z@r%n2;rZsXN^;s=zw~@$YYw;8ZJR6sRV2ekTI*s`?fNe+gSPw2uOmwLxE@?xy6ZWU zc^1h=77yot3Q7vRWoKc&T1s-wP1{!UE-Yp*PVGH@RHU^X8HfDPuP^e2`dnY3`uq)` z!(kx+aU?y(NEc0FZvA21awn@KEYoTGWRY|t-Jgc=@yDd z#G^F3skN>FsE=(}#xgkaUiO{R=_S*$eFHBo@1D2RdTAMy^!}09iN`t5NTI61gQ4^G zHqS=-Mh%;58yTc)+VKOs%x+N>iTHHHMDrNe<8L4#>w$};m7eX z#=EvMqpXvQ)Gx0u*3T@r%ALf-A;t6>Ym(XR=zaW={T{>WFwfOun}tf~ZGS zZREEeS8PM|4`vu!oDG@XSTQbFL;xnUdmU_O4~OVt@N;C%PG^ch#-r97Jo zaHRv@Vb3ABw0bkF=1{GNLELMeBBHy{5|{(?yiEKSfb;Es6vo7aV(~QWQsyBb;3IdR zgl%Gg?Tv*GHNaCgf>!Dtiw7tZAOB4>VlMoiBdohVg5tJ!a`AJtJk#y7VHeTy3sCX6@ux2w*wj9%B-r}OA7-jCpZ z@>M6VQ`6n1TFbgzQ~G_Q;Ii8`UbiKF82MkCN@5v^2N97;17Ten}EsDR?Kd z-~6B-D>OX-6N;0G(U@ck(s6dQ@K&xmJA()j|1Y(gfj$n(zans9KJKUAD~~H!Ey{Qt z%QCdXmHN$|V-4pwFVgF~TfdN<&u^WnTo^Hvj+u5EzL|54=U>~&w9erNNz%%vDebiM zv|*&;bewEVSO@+4LYfE`qjx%ftLC+b+n9mJ7X>dM8$`r#lBb~9XWA_4UGrx4IkIAh zo{ya$wJ`sZ#lsHdUB;(3-*V&^XV?@M1ILEzX9QpoI;vi;`^Lie-^YG&9^=*@%_zSl zG-z)gqA`GW&X4vEM%4G-EfyCm)c>aMHzEp@N*&m28(iV8ypm&O{bGu}B+h?I1`aR@ zKr5Ni`2hpaR>qF$GiiI5zGzO%tkYG?xqk(v@`6Jr`c33mxK=^F!&k@bAuP0_om97_ zyeEDbabsPB)dlW*)}NWb`u+N~jPx5&EKfvZBY$kK3Z1go(p9&(wLG6;9vB#X)Gzub z5aJS$HCklNjMlb{vkBwhvyFwYYUb2e=1h!@Z*l6oJW_EnL3dCPEgxS8o9 zGeEHO<3gJ(AA!{BobIFe-3uCtj~K&h?H8VI$~XKSdbokq4GkJ6Kd*yX^=LU13(4ty z_-O6*<0ap3C|Gtx{#)N&Gsh{Ae?rkpbj|~_T(D}ixg)V|?&BWR(FFvMRN@Rrx(n@& zX?^YFo}!`7pFfTcYtCH1rOihC%|z{N&M86-6|`Myr;1F|O`zov57!qa(=zXT{Uj4$ z7kxW5BGuZTx|ejOKE;Rm@sPpU6xEXY97u+|vV-HBg?RBz&Ea9u{=2C%R_00^+f}!1 z8ES3cI>)Q2d)&tB>rCdp?YH)ERjOQTM;r3C@ZXlUZ&A;Y)(nUYyf-LMUhrUbXqIqDvG)Bl_M71^sbl!lUHrx}@d7U1=m?r&0 zLKsI=35)gLaJ;!)mkp2rV&Jf{b?c3QdavlP#@T|<;S{L-Cn^6K*GuwRLVb$Ob&iTn z8##ApCpF8h1TJH(?wx;oP%JO=CC6qCz)YckHbN2%cV<@CS%h_T4B|el_Qt6*f1}u$ z|NK$L_jZZcd5OII8g&GFwehGiK*)Q*WMEQ4yk0d@DpS;TJb>9#RLMKLuD0N_?Ya*j z)d|SRPraM53ocXC(arCj5>I7-eh<8|RDg(g`u6JpUM~w3C5F7;mDR!aPLbE`4>1N_ z1=zoLT(Xbgg=J)sSIpX~bq9E3m3K(TY+WvrNlLL*r57^ z5TMou`|7nzfy#9h4#Oe$uPc6mi|RY;$phq4f-JyyetLX~ndv z`EJ*`YQGCzp$5L!)H2q|5ve}>T_lJnd9g;gxaJMx(UqlVSl7=#Mi%nLX~E@Da>*Y} zxzdE$@P9FIrecgGy)N<-dwa0;fqYByDD zWU+i4Q=8b5a7Id^-G9G-&i7r&co5lz?Q1tnDvf1H3ce7mHmZO0mgc<_B$PB_RT&QX z_s}X1Y#8?2$*bgOZec45t}iO5WPG&>7cgTLRFeJamSz?j+OX+E><}Etw|w;QN__vs z%`>=nXU5Lxowu;#QD^Cgg}~-BTB#jT^Sr6Kr&lI=XN7;oJY9fxoSF4HNANmAwiJ1f zEQ&(UgYB+-bJ8~MXlZ^U1M~h!6~5nW)sA`@pmrPE|L~IUKNjp#r&m7Y1y-EXo#&dj z-8+5E8zaz4zkF;+_qaPramMyBRgo@lB-ESI!?CUvJ~RiF{6Y)Pp^<{fI6N3fU65*s ze(#Vi%AHFca+P0P(r@Ir{dlvucvt{sKAY22v9|Zk>Q&V9w`ko#tHOKEQ*&Uw{(lP@%6kVTk@vkgG4)(Z{V1<# z0Y-R0&R@rB=kOP*je3AtcUmp|*&%l&5cMV)xn1>7Oz6x=RKPw0)pH$9R< zLs4}>#l50Oo5G5K$`)NoRE)LdTHURi&QfRe=k_iCIT%bS(E3?6Onlor7GYCk2+^`g4*rL1(*bcugML$+W& z?2iCq=_$@;r2YK4gb$39jc_`s-;hw*0|Q1*@`( zr$GV&YlHfOca1GZN2i_a_uhur+kmWwzJ(*rv$pQum$>{acxG7nQJ~ht_oV}6lff^i zZDQUQ`DxCn`!(c-A2*cEfGNKczaI<$ld@r~r<4ci&gKR$E_EptzEttGyIYq+Mi$nT zQ=@s~yh>T*8JNfXd!x|h<1IYmja5px#gXHLS3q{YW<#thoo}ttkM!Hm&yT=3;Sayb z4q{dV`y>Hesy_&+FOej+i-pBqBMu6&g%3(6oFa|yF`#Gt7de-7`q>S2FznK}RM_4? z(MrkDjm<(xRy2i5njKNLb0#RxIaWqEYB%NXb|F7U$<6!|%=^og9r@X{RA8RP0Kmq+ zFY`JVZm}cfwcR{eTQICE{p!GJPCk16es7*7)(~OzQ95rm^?0|`r`i^87FAMn5H@xq zu`lKr@z;jB8B6&cKIe>Ry-zYwTNJnc(K?H&@dWO1+zNm7E1ydp`rlO4YM8&iqa1KK zO461DCJ`s3I{j(&qx{qMjNocyHkGyMBOq)s*$-4HvsYNX^QvROhTK+xD@)19`CGJqq z=`3eR_`U^2F7|{#ZfYeFrN@~vP5zpNSVr{BHCAbaA$V|L-9$C4ZM5Pu=FZ$(m|Q z63Gzf=#S~$L@crsNb!X28f^V>`(&w;JfZXJE9QPHIW#W0C#cDmyRrOHG<3Ss3%@-92sVaIEestB_E?K7Kr+ zE?_+1H9O;F0K0U-@xyi?&r}@fEj;vblx_5L3)Cq0W{a42vM@fw>mR**u$+7RxI+^O zY{}lnx%>kSB_B|$5pOZKLhj0zYEn0+Cmr`Tab^<7)qDn$W!t*HDJ|a*zcrKR43gx}w5n|(7Web@uN%Vj9C{|W3R%v3~%9~&q?w~pStOC{a zc>_%?p;X$Y)TiZSP8fz+42s+K?pa=Z3mz5@lZceu9vbIKG+5f1hCW1bHJ?*$c>WPI45#bibz^;CBvGMzqwYgVxS|@6_#ypg~{8J6S$8SOER}E{*Z*=rM z4*k}(Dha{h*d_9#f2pB*5GDHIn+TV(?lVv%YPDup2sHmK7g?0e*ROR(W3Hd9)Q?aQ+=iXl89X?Kcp1n~1)#egkV*UArjUP|303rj{bFVFh?Jp7@|LHc-1`TJe zcEjF?ux}jBt4`N1@)VZcDrH2|%a^*i7#hv^$?cuqE`D^J4fbJH4&s=bJ` z=tP6NDw3w3>>)`=u35@XM+YXc{nVHB$&a!(ysS-tP%2CAGmES)mymZ0+279uyTju=+9ZDI0V=BL_6F(j!w*J|5p!=_%4?Ifj zb9>4EE`wiY6(0UUI-QfWle&ffJ9zogP?-*3&t~C|hwBbVZOx^I*F2`@lpnU{SLY_l zyLyie6?XJ3oPLOSlpy0Sm;N`8C)l9xp|-P`*b-19#iF~$A&rW0?ON73O3#Y2CkYg~ zZBWrLY*V>c?U9Xm@OOQ(vR^E9%q7^ot-94K1f#?V4d}d1mgIh7$Ee|r(H(1dEgyRL zv8%!0)}nsChD9TH+c`0j@Q;Q+Q<~MqZ}XX+e=%Dnd-jqHvNvLvoG0m@)O^Q9ntsDl zlG3<^GJj9W0BppniSBi2iT)XY(i&`gVLs+NtYP)tD=e6^UpNKuF@WIBNRHf|1=Suc zgd?4})SPJYTS;l^IUwN~8$J|r#fSO&n?dJfXJfBSI-x~OuC_$hlA5F`c`Drc(|Ako z?PibI3_mpg8s56LILt5C1qyDgF>AXDV1Q&%vtxaFC(bqO^h#~+`k%)RKQnKuDEXJv zwZ8-lyQw?O60kmci65w!vu~_$T-*WPDCES<{zyO#M8pL3#u(B%n&S<47eHqm?)l?- z^mslM4Mwj_ZEh-~amOasS<6ZkmBO+PA|rKq02};s`z2nSOGZo`aBA56|+P(P95gM%;=2PNJkrbgYr!jO|D)!0_iR>=x$j z&hM?3F5tF7Y5Ky#*cjKN<2VE8IKhlyf<6lG0NN0~0Rb)$msJAeXt(Tx{NVDtThgVF z8iP2U-M)LqCeB@@hm2O}xKbdmFh**5Cq5Bx2#`MTUE_;wu#34wdyEO1fJY;9J=;p> z8gtB5@L0zh7e`4Xthv8Ix}NS>ATI?3u_#RBn|WNB1UerVfCeg2@;e^La9cujT#Uo3 zR@0*RNz)aUqV%s>;*N!imoLB1{LU7iVW>zBAgn(00J3?uF(BEb1nTD7ng>ToZ)%>6 z>V9{_@r#dYOmjO|4fq`8lFDj){tnevFNYy^h=ttSt>$f6^Lb ztN!%!*R8nH635nUw4bX_DWUQo_RB?Zdlun=cTa$4Vufv0eCsGEm1(kD%|1{4bOSZ7 zC`=V>r##<2wtaS}@*8{Q7TZfk+sm&GRr54qcPqWOyN!qugU{Wo(!v zAa4q2UM|U{2YIQjsh!@ksK|H3{Z4JB=4I&NjtIT&@k{EX^tg}(qWaT(i+$M^q(-sB zW8voiSbRX!Z9Q`=4IkUJ78cwWK`E{I$P>kz!E!i;yiXviW$RL^^qWeB_a{Ky5@lAOdt^%z6a21|w|c=$9A0>B{;AGT8s}ByvQE))4D2`bEFVw zpsY(>|0;DEAY`MTfAT1?cklvM?}CcPGJ0=q91&Zn1*8lb-=2O z(;hD%Dz_eh1y9bU4X@o%II2jnOe_u0djIJjA6Pj@dZiIv`o-m?+hM*p<7Tb3Uw^xT zRsBSTAJmlC)vziwI2XQI4>AQkotq{vz$hNHoF5UL5?dwtVOp{TI#%8r)ljGj^9=Ku`26|MK1ZJ|GF#%L`Q3 z!1&UF;Jm4k2TNB|Xa{{rNgB1Q*gM4)Jq3iIR9q|W*W^Imt>)2oyP`+X9nXG8 z)8gjL0n`YGVffhkxi@~Be$NyBj;#w-`}w1n!4#@;iM5RNEzSFbO2P7{CDbjG^btDb z%EZ101xYnFsaXnJ@5>%#e?=*wJqMjfkAgdGSIQ?G*^>*5Utg(~2_Gyn9T3!V;Usyc-KSOj^#tOB;v_tZ_GP%79$G-Nfi z1#S|PEw{DGZrI9`wYgf`WY$w-*L;WH2hdYiJVJLH&^sQ#Ju0T;xU`|e?8$9S_;L$# zzko(RT+ZN|By~*Um|Z__43Gkf0cJ=`hbQsPUtJ2wc*L*hSRVI3ny>);XC-4hAED4s~v3HRmySjxr`iG85hXrJN++$I5A>X>aj zy9CInrR>e6F5ZBjAppa;qDNKxf7bL|62nZBsUG_Vxc%>KHQym0B6?waz?S@2Za+Yp zd4W4Z2S6y0*2s|2oYIJ0AUU`%jtn15Y-%l@3(rCS3|@(O96@*Y>5?t7wK+T6q{&`xsE!F4iyvh+@M6RW@%kVh&>U0 zifsm3)@^ue)R38o>^{oXgR@Y1eR=YDEl#2zh}!!BxjEH2KJ|`9MAg>tNM{c5Oz`5EhsOrt$m2)*Yf*9?s-<#_Jq&0em&54H|8q&MOLDbe_#^qo-{>1{ zv?kBB3-%a_U#98`8Qz=^Nk54c8W>#tNB=PV~j$(2O zLfuil;2?}-k_GV7lW|QMywaH{K!Hc#H=)tFPskWRK3y}#0(o7JttV;;yW)`ML(B@o zhuTGChU@T=ebyUVsfbdLdmU^+dy7W^;7B-P4!Z|2`?H7)b_3o;KtW(l#S=0#!XCXp zdakSIhM=B6*g~-dk{Rb`iPMtmW9xrMtx7axi+@hm)$wuKWDu8v+urkiYFhp$xch>> z&-9Lm-elcP;G{JbjDjfhOjf+n#LA*N-np`3eVeF=$v&28Zl%DS+K{ir+&p_SGjm6& zwr1g(Q{EIpGx4bX(f0u`kA(?!u51AGLt{XUB}&G!@jsT9%cIf8bk;ohrPO`Ocvuav z%B6JphE49h1D<_vAavm97Sk+r1i#jPiJ-$Dl#@o*)Wq-YLtHiY#)XprI>_-pGcTx_jIG63*t+E!UW>=e)m zu&84WMVJwk8xJJSG9dQpN-Qen&i3SjkwzPLH&cgB^O=?%@wTHl&~BW zspX|&o{?^?xiA{k6joV)(HQB@Wp%;pNvF_f;oT_+e)7 zd6R*ufk9T$TRH&m*sp=#(ZIASMnW-0ievZv1Ok0*LmVs1?>o4F2$Zu4h3A%?{$=UE z-X12{f1{-ub(lsL+GYM39|aN~8ekVqfX$i*e;P`t*l!Ou^DZ^!Oa zHw08Bgs)ZHe)0K~3xYoK&gC`j@V!j2Qkys=e_OF1epMkQBG`ZSx8+(pK1S9-qwYbF zSLv3MeI+O&E6i)I1n&c7;Sv*bi#XU@O5K&{2n@1V_Sg~gINCu5>O;BCo(VcIjvNr` z*Aru!;J5z1*Je3?hTSFjrkIBu4)+V$$Y?31bXJC=OqtNI-}+bnwI-C7ibMC0B3R#< zu1ay~bPKV;QAyu65x%UM)9<5Qg?33~rpdRxlI0h{Q4|E^lh_jgFq#j%Ro2n8Q8RfG z=cv*Q36NTjdGrP5NjRySy%KirVgE$GKe}6{_ckKeE@^~wo#0>;{9#)?B<}{08YJDq z&W5rewjzDjoO)DFt;Ib)6`x^hz(Y3_O>ai74lx|Rq?l!vJ4ziZkAKX+B=mZvKJOX} z$LjYdIuic#*Tru#b7+uWPUE6T6YU!65a7I?$mvmZwv&@L%xy1op7i>mTq=-7u!*ib zt{y$GkXJNpUPp(0F&A@@mS(7fdL)^xCpsq|+C5wsC130LzpU>&sh{u5H0`P%o$AlS z^FJnCA_>c;HB643qz(zZY^}@HXn4LXL;$G!*qyLmSv+QaHP zbB&tnyPVQIAB8H&e=EtaZZ*vOy*DOv!0&`Ms%J@~(&f9{P&cQ8BujGKkG#lYh z=_DNazV$mDRuF#o0Nd4Qs%xd^nh_hTuE+ea*mWh-%&*WLrhKV-FlKLzI(KDqpAxHO z?uqU)fp&es<%!A5q+Sz`;D5ogC&$8?(R;kJF(;se?_o;Pp$h`1Bznv{Cu+Xhu6A`s zx*~152bJ}RU(}?RIa<1x5^2V{t$>ACztpt&%cqCU*`fUp2~*VeZ|r%3YK~u@7|)3D zzg;&{_r7|JiTLg2djBh~VJq>S&=34r{EVbJ?e%={jb`HD_WH=g&%p7ELFbSU6-qwK`iyytJ~45v0s z6ZyyHqE2u;?MM57D-zAdKlK3~4qqir-7~f}6ERqFANsK*mzYi^ODfm5oaLXL>|1zV# zyGbP{4u5ZL9@t5|2-y`pyp&?bm_qpP{cRa_Qk9;y5Z5OGM2E;agKBu0MgH&52qzw6*E4ZFw?J7ZzV zj(U*02OCd8!>?dnVbSEpPLe2?MJxj%yt(5c{dHY;(?yhtyWtpfccF6R+p%pDm2ytZ zPuZgkEG0QBBTJI#;0ez?wqUCOzBxlSc6nE?qPbC^rpg4@$(du%_eK*~KJt zXj-H6t8{N?Zd%jlzK_&)!@_~(<-fO{3It~&Bck3M>I_Q7CvaA0uINg}?{5Iu+B~n; zc4S2yhTl08*!4WBu=a7O)xOxpa}u}tEcI}KQ+CTbrLn2iVzaV|8Q`DlU31g;X1@kf z{W>(7=@d(z0eOJ=wo#t6NfT9?D8H zu0R~}(W!X)61>B7@8`YsH`JfWVrmUIGijLzJ#3aAWpnLiuIMbh)%3`=KU?I9mR9di z?Ey9hEX+Uuv2Yp5GkJn?;?-Scf<7qfQETRi_FUUSSYn<|;1dy_=^~jYMfVNmo8N zsMIey4x6?8v3}4#rD*SY6r2Bw$Se*Ku$s|4f6mcvWMZ5LHFBvR1&8s+8ATQ_Y_}A9 z)x9%~cT5V`CKomsS__|a?f6|6Mg-k5&It{iZN8MDc~tWGfq8}ZrOfQ;6M)iBX!8Nw z5b|{1g_o`=XviXOvin^*-!xbEh1jbjL%U9eR-F%wZ*q0>d}BONK>uRRF*qN|Qq3zw zLjKXAvP=IBiFpKGl)VeCc(CHHH*1xV;@3dk1U%2hRUZ#A0VM?a*zU9#=UGJhRk zs$WCcW9PnXcFv51uC>f^c&kZjSXDGubMz5y^G26c4;jYZ==oj#rqbe-kY1z0h_QUA zAKI}Ck~}*cK32OMz~CR=cgk5j=)J~Nh{RZ^$EeXgD!vE#3I3Et$2ct!Tog9V#x95n zw2j5+I1n81wVk@9%)v1?d%mN+%gkhpoo`=dXEJ7}&j+1NF>+o~dEBMx@4yBTJ)10a z+XX~oC@%|L(ac=>2lLWbc#l~f`_GRro@cKgG3P4=qbk-Tg0Zl27w|EmZ8*8q$SyPu zD*f&rMchO@kkf*w*KCZ{IkNrpB(V0!SSp`IQJ%ZydSlEdC*n2Ab96l}WG@w^^x8Hl zO|*O>tJL|6!;s&tHG)m5|Cg+d$tK?yKy<0$F+lFVkB0vL#*aN5k#y!{76J`MK?5g| z27;s_Vw(%2=E$cJ8xnS4RD&HN|GH_sa+E4Yi*v{5VC5v*SJ81s#GMG}ci?tPo(Wq$ zQFy$SjtUHdXC1TslXGh{_-41x`b$@dlem|`>by&Pzg-$<^H6kVd%uaxZh4Ci=@+ww z>N7X6n-x3zem7dHa+=^w)S5j)8Rjc0=O2QV7sbki3Kk<>IfdD7lhyjnP(3V;!NOysU& zFsC?}kWPr-oICVr1R5nqc{XpW2fctvR!8p&q^%X|%=4$h^WiX*FMj)+!`;qFVw`GY zO>s2}`tg=G4!l`GX+p&@AwDEvq~ULu^jbvlIyslYxn1rweCw!dl|EytyaY|jzY)Pw z@A&i02oG%hv4Saw%?Hqs5vyOP9xbMj1@_}^@sslw+7>T7*i-#iGjx~3YZ?uVS7LM* zmG(q8s`{t8gO}u0< z$EVXvhe`K-w>xejdNXF%FZnlxZ}9C{srlk|Q=YqC`9lgXNYEPo=YIG);RB_mBeM#z zFdvNa6Mk0f|L}UCzj?!Wg$z^3YjWQ_CTrJ7_3{GP^_rRX$a;I5%;&=jo3a+~MXR8L zYjWsfS~&nV-2#^efN7<@0mAgv{>jRsDa_M_6nU=P;;M8LJxuAhFupk#gQxIfMXu>P zzQ22`(zZ?0N92#LNfb(|88Ona&A=@}j%1h1o)ii@=k?A@#IP&fi^u*CAShIGSjrNY zzj15zCS^bW@!3+$N6fRfnszqumH}7n%?;z|UB-6s>8EMv+a2zE(Pv+Yc-_8eZc$|I zynC4W*Pn8*9KWn59-^{OvLxRK5qO{=c4R9%8bkY<-->_APzC0SwQ22#Ey1J zd%PP38a1gg*1qQizR{{euCpy5aklk#e~v4hOxX?mr3?98)Sk@4B6+t5;y@oo363`mm@e#nz!-yj@3Il8&&$QaJj8Dfm2AlP*EU5 z3EktdVl3lczg^B)y;8TuN#C>M%5>*2HLjz}4&>ei@8XEz zUV>bhi>${SNhEre(d|RYW^GGx$}8<69chC}qi;vuO}3wASd9rF&Ltc!cHK9)yaig= zL`=ESwBhaYi}T{nrVPVHZtaKP?hg3j92_1GhXs5ez4}V6+mL+d5jFMQs+Ui1mE|Hv zGJ=(Dc}a}5Ay1@|tA5Jaas9?6?TZetsuCO>$-;jdx*F3t+;XS)r@nl9{phl3hP>eR zDJvee!xe~7h?0#qS!bh?-AZHM+p@=^SYE}hU%6EGVH?=9wPEu)75YJJvE*#(^`VS% z3%<-?tCdeyL7zx|BDlL>Y^OB#bN9x*9o|U27D-$GD*fW_GT=tr1rcTDBWgZ0hALN( z*|vF#%Ou#@wXK))+#;3`55R+%q!^`>qQ;Ydw&(6`?HfJT`) zT!%>uP+wyruK(~iKr#c2()W3u)#j}@UCdb9E358{EL^ET@&+p|&x7@CwbRGmz{<9^ zvb%SmQGeb%TTx+Gf1c&6aB}wph@iIuq+)v;=h)_A68C9#(DQLoxlj0Px|2A;)-1FN zXS3tg9Oe%vxQ&)~NGrv8iSNt!Oyti|zet__h&Xj8a~lpynR^pRuV5hxqy_KMs&Sxhmwxcd*;;?hv@X~TR2Gg{^@-oO^Rs;tu)}&0Nqaqw;>wQYw z>dm-ZH?VXC2;<__o_ml>%%T5S>P+5zp3tiN)+ouraHEq7on-q_1&%XCx#4Yqn!4bA z()M9dl$PyKLMMPq+UNi1+|&tx!%uX{5!PKvwy%%S(~l^K_c zNG|oTAC({HZC@J(^gi&K)umUKO>4e*-&Xruxl?@YE0%+M-w9@4uf$d-8~9wSvoL3| zHpmN`^XFG5s^e3tv}|j*#pa-)Nc4&S-S~37@s&48at&VFT5{LM%)u?P&p%CF&3TSM zf##P`r#(B_=zGW4;{d&t!$6xi$w)lr%t>au^gQB~1P^WrR!a&1d;*au@YjZ9p^yGG zHA)Qe1$`d^Y1)x!_TVk_xJ5;Ux|#u@F73P0K}B(+u=KTPycEywRvSf z*#94kn76T(%5l?ShM5iJi^tkykf1d`qEvrptcIgFR$N!{`!u;RE5jj5Lb+@`*n2vS z`Pu9gG(zbOdg2NDaPytPg(s%?YGZv5fj7kKdagzc1g1tN{m&lxp#aNuj_#9aUfRKu zT&M3D@j-EYe$+}j9>r{o^IX3N$#o#MMBs^S#LarLk4yPJ1FmwT{vILJEXxQrkwq{v zqi+JqaIiO>vXQXG&F{Q|UPythA_)o9kJjbstmRgyVWvq$08gQNaISNuz;?dTzK>|7 zV~W+*IVYp_k+h#|C5Ud+RD>xV990%c=xuF4>e12F%D=}M_My#uj$XsCoUX)wkD+ET zt%*a?Fy-)*{(`c9jYh<5Y|@k){$qK_DX?7yo?k-F4bMpsLlUoi4Zfv}r5}3$g9&b| zakaIvu@2lJ(cbDXU8&p&ow`^;&B>jmP8%OUoWdv9e@_s6Hw0NucVl-AIWapV!q`p5 zlhmW*)x1^44(Y8-Yr}D{*Rys0vO(9YWlGKQp`mNkFZCI_z3M+^9uJG1yZoT;o`a@r z`hMMQSFw1+_=UV}6CfsRW|Hr5^OWjUT!8u9TuFZObaU6?9&VF~>_r${{0#{U3*tsM zHt;_t5+9pNH#ask8Rsr8F4`PEZB7vIdY<*QTtowTN^9AL)c^+Fa_Q-mqbH;&ISWs= zhg5qp|4Hyny+3=NHe;hFCQ?}b;D=L)ef?yZz2H>tg&@IFvnT9BU5%Ie{5<+w_ff}6 zF*5l9F&;}k-!=?j6%J|{gda@tQ~m)BDQ$0(&ks#{A28*VBJ9>`^OgT&!G$5NsJ66o zF2u@p8*$OF37V(n3nN{O>wZ_|ck|7hGrfu2UwU$?TI*at@@VD7Aac=4N9s|z>?P>c zquFUWapmex+s+)4TM^nv=9m=W?t!oD%$Xe}@)To?4%amPM67O0{+zJC^jana$ssL- z!4u?~g?B4s_LdV^h`$hzxgsd|KffN_xQP{W-6LTiuL>U>R3zHgPiT>+YH}buS5;q+Bu#>=ga_O%W%ih0_jHzh$Vn;PQ6vq5&(-qbC43`OcRcf9>w8o0Lw6 zgrLcIPgZfz&9TcM-w9QohdQtLrbnFowa!)QKmMsl+f~GupB0LJq%iU6!7II>;5v^BJ$L#b zDMnvTZJ75}dbU}>1+t~uHh@4)x&Kmne(H(H&nZV3qEng)IQ7HX;)|y@zpHlWwT+RYLMJDIQRqAk0Q`_V@LjH4_qs3eSte$SIqVP42L+7>FB*sBDe;qTMyXs~h|5ZpCa z1gDE^FYT-F(Wdw0{|Xb0!dpBbY*nQ14Mq7;mGXn0L>+xlW9+jy%RVEiv4XQ79@oWG z-?NO&H!K>fbM9AJKi2{FscEZd**@4H9dpxD7LAH8^}(ivwNm^xH-fikK(LG>R#( zJbn5!KoFglmf!H~oR68JoizNMkKN^e-_CMay1tfuc=sWTIO(dF#ouRU^%@#C%=o5c zlgZyQ%tB>Q!HTWO59^TtpJP%}bMK_hH`mL{cCT6x*um3eQoP8rSyp~23A}W{xKl^KH+@g z!siYREiM8IL`*gYf-5Ls)-T7BBq@g7PL#Fb3Ru^1k!R`iS4W zWQs#?4vL!^CVxMi$xm<5v?L6FPRiu;D`6NXOp2bm_$)2vse9oD$I%L7;>1y-3i^Kj z>6-;p#neDsphxY%V0YbzF}TH>7-S&W8~L-k%0o%q-oV(=8O%K9)OA)M`Pig%=p`3d z1-KQZ`dIIWc)4V?eJ^bdkJW57uWlxKruQ*!(s&ZL&h_B+&is#}GjU}4|Kqr#R75Hw zSA`@YSGlEw5F%HuDT%q~9K%8-a)j{3OmgR#d#<@}u^5)Q4RZ~{W{&Ci`TYfB`+Q!n z_xtsFJ|EA@&*J=L3K+vXV`Y0GPu_4%Po@wYquRJ^34A<~#ooP>qFe^odW1MBkufLC z(4Qb?dh-lWo&!teI=H|&p9zcT}RTh+$I}Ch1hXjaIAFd;_@?v zS1##@=qV;jIm>yG@AoQn8~C_HO(M3^ED;r?fX5-6BF#nu0b5w^1JDATb8Y78xaXdf z$6vzQ^%rg8S~sC-=dWl%oNlzHj8g=q-IvTja>@_oic^gDb-J)IDmoof7iLdO>2#@- zem8MWmsgeh==+3GT=>y3MP21u{|%EQmunZ?-7Q(_>uV3CMF+&pBRS{1u6608G~F3g z1iwnk5mVN6&gsW}ueDyO)<}w$D>CBjcpYjTY-6i3oMSGfu&U`GW@2J>r%>bl-dDZ- ziVb6g&C|0Sj&^|rDAODuxB{};5f^P1QAf6iK6s(bo}eAjCs}A)ux#EGlw_RslEPEu zCtVD=T5dg=d7Ewdvel}@)k~efq;6cWyOmX!@>(h(?Tv*-!;jM#4liXQ;?7Au_5~~k zzol`?I8Im`Te#a^oR{IP@_mtkSYlTcUE&$>UqOD=KFrzqJ(SqtaQCI3#5m374=H!+ zeBEn1DMrd@$)45B^!b+FL%7xd)ohxS=dQ?>?IeS4*hP86J`!$Quxh6HArX%x3TlD| zRte2LjEvt7?J6YO+3h6#NkBJsd4MA_41eQr$B6sLLw)Cu2hHW>q=kobL0QY^B6R*2 z(tsP~W%H2SQ3-PY;83P<#b&9}6xil%LTOu6vLUZH?_9|J5Z2%r;f|4{yRh9JEi7sU zf-88n`bb1TC?Y9bqky{H3`^fJAo~?K6&$?AkasjvGit^MoPOdgW-B*QQ=Cd`%2>My z)*=CzSBQ#l9ywfHB`7qrVOzZja-vy4&AowCB2Sj7V>t2XV2aJUL4fOGH6Te7^xOHH zFX9L(v7W2MPMK69Ws9Q^NCj>q|F^uWJ1-`LYXezoQ*jW6QqD18Ydyi3fU6s; zlc;FyuVdXQI@`&G)92~#bN+muG7DEH%Q-E!hf1r3`VDb$X>F}NiU+!J^wmRn>8)731DU3s?eoI&ag%P8_?N1Xz{uZ>nb zlWBS)(%s+B```(a7P}z;4)0MC;Z+mx@0Q%82bG9_Sd8y7EE)ZY#;52K`b2T)cQ{)< z%E6ej4!?wAo~2f|(KFxgR=fV7*vTh>e8OQ2&Lv!e?%wJa7T|nw+dQw?WBmOsBOWICVJlY|)JiPg0nQm<2gsAdoo%@h3HRuwJSFB9zKk zG}2GoKo!@fuHv_?sy_m-op?Xg0Oe{=*na9?kHv3FLz;)vN^@Qx?Aa40>-w<4PWVEN z7ArfQ!a?zht%L~jiV{{ZzEpJ*-Z(x9UQQaWrA}(0)=uDy7f0XCg=nqDI0;ZD1s@$t zodS^~1w?ka=l=#r{K-f!fhU zsfGiwvh`*L?0{Nr&mQxCIcO-tk0yY;J6P zrP|Yi_*drB)mE!5L`LYnM?fkB>$36Q9+5RhD1<|G_XDpf&pjpa78^fi;9CYS#pKLn)+5+>PyX^ADZ!$BnkF52-7Cn4cMAH3wTeJ9|$A%G+3+TJq1r z4tG=?ih7vLtiM7%-3w~!Z7GJIm9>@ImTYEm|%>%Qo4BgTn^D}oL| zdg*|k7?+*r?QmyA;+Rt1 z$`;P><1QICslDZ{(&#%p3oB!IE~NTj2Ja_L7}i5=$ZvYm`1s;pstcaeC=M?;V|^(m z=twwpin4V8_=R~^qx{~>WV3tR(~>@&uxxc@mpM*144ak|Bc6V0h%GQI;ko7m+4xXK za~6qL`DA~4KYEoC$?*oV^F6dtONaG8ocX@2LJqeCaC?w)6f*&olZ_Dnu}Pi0YP9vV zSo7Mx0WHY64AQJxZ|!-}1(Arq#in={It_tbZy5_tPEsba>=9f^!(m}DzT&7|GEQv= zwwq29jtVGZWaSaqH`7maXO;Q%t^GlU-uo9|?{<{A7g<6voO}SOn=Ca)8>m!Y5$5+>vli*C{PL^sd?hTx||p^j~RBUjY5K`3zvr;rh8Vj5fp(iKEFsFl5t zv$02db8r}G1TJJgT0@Fa&Sq!!`4z8mUg3BYCM_DynUQ^#7srd`hqR&`=}%iG?06`s zC|-xYII~!+NrQQY`n+wcklJKj_o<^+=3W%C?Z)ZOrE<%p#MccefN|L#-f9oE1kJpM z9;O6W6CZz6nGpSD;7c%2r_M}s{Hj=LfAcdrQ%5Dy9Be%u9fa|<(rBPD$FQ@L%4A~% zf~Z?-n(}(T*oxFcf{uXwutR#pdqwJ$wf&pukr+ssApdxjER z>EwJ&(1Y@WbLtShU?T-f_rr42!ADw?8J=;%SLg3Mc^Ipx`au@`bu4@@IA_b_+Rd=O zA)Wc7L?e#eZLQ;>5mnzIFS!spH@)Y`8eCcs45JjExtosAxIRW4k{bw|$2^dD&Wt)V zsA*MVUS^kje$XOGaruta2`gz?nsH=n?$5iBvOxuh#-n31^2@hF)JxnQe=Wx~r}(@3 zP9041Gr{5pV(#+-y0^!gH?`p){LTp?^lG%$$|EL#dvPBtct|Q3rOvSkd{7ba!Nu>= zgDiIYc6Z!!$v<_2M`8~H&@3g@#reonzO^Bwm#HQzYL6z)cLDvt zD!I{tkJ(3#35ZUa!w-998aZ|%GTc$L3*?RO7g<)b_vsEXfb#K98PT28;>!$! zghJGWX#sV+O{@@)9x2BKDHGY=nK#*TtND(N?iw6U9rkoUDz|ne@vdLq1T=L<{SqZR7opI4G9n>{raqa3aKa(_EuEST zRh+V01wI7r_5n)K+fB(0wfp8On|o`ejwAauWBBQ^nF6x-#$fS9*EyLE{vzSuFe6Tl zC<&!|qT440h0Z@7Y6gmwM{Ws(#a-hS%3AQew1T|)hw6D5nrdDS%*-QwRV8Yq9A1xk zT*evU+@wA`);Ay@J$2z2jWt!kU#T{yQ3fFjvYNj&D+{9cWY|sy1B65l?=<}ddZJ6iHfQQ$c&=zKl zH%ady@f`2QmPgk{2g-ll4|;fKB>a2sI6ir*tg*Rp>vvT&-}|#MxnnO3tnT|3=9e-4 zii^9erw1&eZ6Cpx22ll?cD>~|p4RYU+F4h$%8Oy!6fex56*&wn-X z+Nt=-SnL{4qHTjT#!piz#VNWtE-w~k zJd~$Wy{1jxY11}N{OB2KnU`0CncjkB70+&)F)YX+z7xI`KJg>g`CvSXt50@neMV|r zCyyFeobF41M33#e=wd>nQm+cJC)qX&PLocdLKmT-&rBDPm&t3OcBZ2`4 z$Jw@GPHqir+=8Z@jkLy{2tifb8q!(Kua{xw*R88ZYpjjK-$q)GdU{YD_?B^Glg^2_ zI|IQPd9SCT8L!fhUJh74o!{g={e$>l$&dNkGL3&selZ^6zrS7gdso35O-~!xw;4_} zTJV3VcXw^P$&9wLRk#~$DjWD&oJ$vNSn^}8AvgP6H*Gzy6sJuS{o|{vD3S4cY~V%W zbH`{2Z*1UgpXFW-rWzaRF=5fVJ3pTO2Y(`oa0ie_7n``5<5cbU_|)THbs)veUKW=# zahp20{93$QC~(H`1BWcaC;hAHqoGHvOdsyo-KYTABwm~^goDlf?lx2|2k2Ve)$C7B zs-13`Cp-Mc>j#`vtHiU?bvlt66vMDN6f4+g-R=%WyU0DqIo+|D+174amTkG;J7wHI zp#&ZDX`?Q@yPvJNe&Q|K2Q=EUF>s_t_oTVg9Si6p&+ogaP}iRo)3>_VuIN0BYBCbN zc{@e^hWxXitIw?sx2Z9)C$Vq%kY?BR2_F-WU;SfZ8DL~wX`8vES5sev$!MTgMNTO42cAVB)6IH>jncKaPnFG#&?WlJ$>TESBBi1Em@EkH zcptzjWuK%%RYNLwSL18+G%&@qGmvF%RZ{$KK;T0;TtCs+QibQwz*kM1|1lK^yu}>H zFQ87Y!%LgVP3cF?a8*E|t5UkO>u(1;kSbm5AK_4m%c0Bx$})%@gt&ZK@Sa2Ne%1r{ zYGyrke@|mta(I>>MpBPtMggX#UqyjkTF}dOI}5rp^8DvjGzs#yJs(i;S!-I$Y~gob1d#cqK?f!rr9SA z`p=sqkD?bOzXrU1o8%Cwy)%9F(>q6{Q(>&!`xdcR<5{7(5#b6KEm&DGh@5Y*Ia)WT z%^vD=^?=e=jk;WW0Q4tjw8U*G@m}Cp?!nQQ&xcdau>I=o(q;cqIK{t-pYUqRW|w~8 z$4%rbbHt3=Bfq{!#;%7RWufWzt37vzT*ji4#a^o*9CT(9DT=fk3iU0b=#l_ z#rQAjn6ByRu|MV4g#7DEr+Cr>MU$k*%k?ERLXL^NtiJxeCa=GXr?St!TUF6c`vImA z%o9AhlVfvXH_)+$#6*3pWQC04?~>Q~>5tz9vdIe&!TDfw6`?HGoK^D*g5^Z_WnNRk z&L#Aqq}RyQ@1xulCn?cH*|$D1wi*~p3_}$_+E7Ez1fMvjjrN#9Kn)#_%?qBnC70w$ zIxkWuj?lG0NGQD^s)COuGVuyz-oL%G)NW67?humBfCQ8rDOew1X*@;uV*+Ep z>`fj-J>L=$4c#Qn|AyH8IM6m({Q%9~Rde#%YqeML>ka|_84b*8?A;GKW^H^-K1h`i z*r^1Zx&bWhtY7SW)4;`adso9u8wH|-PFmqu?mt~#;toPP>A2>y6 zD4}24q-cLvzqqWUzEPm0QK#Hv7^#uWz$Q8rE~h==01AEYiR8ck6?AOCF4M>?C%ELgCLa9Hm)u%N&H_@tEm9ott~gcIvP zU2hw&dLS|JEQg#cMxT*L@U0x7k>XNz@Hkt$h3}#j2*AOq>rQiMXdW6FZYrx3>?l0k%ui11&P> zTS-1~pY%<%-7EUjR!D@DFMH|!`LXYVOYVPIl}s~uEoB9kJPDz%&p*IyN4CQ+Dthut z3@f&L39>6*aOFJL=Rw;iTnpdZuc{tVH1Jjy6dD06ZVkvaeOs{{-FphtO8Wk@V9Wzr z%NjRuu6jflc03XVut$<`M+O_H`ntszHK#c++*#%eRum>Z+X>>^>|6AX@OpuKGbt9HwkF z5!%1U9$uU;6BYaf=G*q=`QC((_Dwm>QOSkD@vI*!NTKc95uV&}Y22kHFaJ({isM&j zefH^|LWqXat8=xz<((DX7F?wWm#fm}wyUPN)ePT6_Dj_NvLkpG?hTt5e=HD(iHVVI z%*N7nrLaG8;!8gbETtLB(kcu1v{j{D%H%)tr25gtA-M=R1PF8curVIVOYg;d6ZW8h+Em%FVHyfL33iLXW$Fj6q)D>SHYSaa+7kIt=+fBrg-7i8)azeN zmX&!!v{1pC+i0@bw#Wi#gF&3ldPc#A`?Z{QNn&~J;a1IX8L_PPyfh&h-a@duK04B4 zhWi^owRYV+Oa78xQU91KjC%MiI%q9dnsj8^G3Kg8>4Gx) zbkf|{f!=0eSM$UdBJoG!3qomd_&h`9=t4Ro^w##XVINn4_nP0a-f3^;UijN3K}+(h zD@+~UPrndNr~SG+HK;?6mAbrW(O9`J$37%Gc>li%h4O<;-uboaz0YFa4el$6Hsj&V zhg*4oy^j>D1q^P5>PZ6OKx)Vubm-ZAWa~Swa2SH!E2OSRFvx7;r)-7!ndjaye6L?y z3g$g`yVQ}*E(aNsH4_dGHEt7>AJPQb)dO|0U}4be(4{&=I30vH%+$0PH*c6xnf3dL z^J7R#hllm84&A@63fDAVHC42Q>uoP5{c>%fZd`vK|MRcyT6%uAx4)KSfn_@mkleIN zUP|b06L~o@aMN<$B4O;}1|=y8`yxQFXIG6fQjfh%cYQ?poUHL_A>{U?&9L*-pu>=93?nz7Tu0Ou=922aZ6KD}nliN5USVrJ$njRW-Mleq;&w`LSQ$ zY^GtQ^dD2=^k!)uYT9`-{sx^HvcM?>q7wn7{KjT=G5pJ5-pVYef@Is04Op1%SVrnN zU2zncGYqJrF0WZ7(@@?|+_UxrWS2*r2#1~Ll^uV-hAg# zYOP6cWsl%e&U0xgTcV#XQJc`pt#ZHI)bh_Qo$I15U&57g;uN`Zjk~iQ;uM~lJ|BDh z^VhFJn^QMWH6S^ZdqjX?;C>H_Q=)RI&G&uXvfAcDKmcnE51`b!@`IjM2hFTM&78qZ zV}d7k3)isSkIF``2T~9Jczc~)FueKLpiBJsWb}ySGrtMDz7x$`TluBdF!H1s4%Fx_6qEK& z5bK^Rz!Iay6n@^?c#G+X%%T6H5ZLcniFUG z+q=ibz|x*F(l=|v&K@|LqWU~1Elw_M0g}UBC-d#N%wm}yP%KTuv7G*Tn`BXuGSG1t zz4R1xSq)m@a$WdiaN1c9Usq?pt!v$8Iq-|to$ae|7B^}ZU4nGXgY5=Btu_%1XI3D4 zC^q2s4*ZNxhYrkg&YXXuJ#%Z^@gX6#i}Tv*a6`Wo=;R9MYMXo@%}PA-o*1L&?_!hi ze-1Cv#)%>T7Rl@Dmyg|sD zfRm^~=-7NyE%J_L#YxxvdhK&S3oDfEG5bDg2^2ZI4S*;JEwt~$xs3dOOfKq1ouCV$ zyle8S34hmT6maiAQ5yFvM;GP5>7WkJ&y_u{oS%YKefb{*p`)aZm49fle=P!AfugTL zQx9)3fZ_05GN{sNLs|jE5B+0(@+YfW8u@L;ir&+uVo*tkw+AH_K^}IXPT3d~f|~`P z!e?<^$Q$+eCc6wZvi!>tVv2!sD4rfsEF8^~9+$M>x9b~XIN~af`{_At{Y+jmuk&78 zOnS_f5+JPRIs33p8+$^aF+k54R|>e-wnPO3r-M1GoWX0+gR&JK&9@}VoZoB>x>x0Q-TpBtb`gtA<5YPur5PRe_Y-S{A`;D$1M?ZVIc0H1ww?`|r%wce1?hp? zppLKeMxUDnB030?YTmO(A`En=(9QZUa%DLSA&_B@n%GB?-k-J3eEQ-asaKBMXt$Pu zw%lO4n1ixA%Mk=W{Gfr691ixI7c^?q5FHIx{3Wqla@)bvx2RG|$LPPbdo^rcx*7(f zmhL~2*xOwL&!w|6e}<0fc-;@;0PIV4ArNd43SUmWv8tsd&i3qCX~{;Cm89-O=~gzK zb}Q2etZdNiOO|*TX!}|fElC*ossD5z^93QqOPu|&m9=8D)cwrb=35g#a7!}Tr0@SNGh{Z+}(%Bt4y%QnD2_lW)UIo4YNkBMQ|y`^ z81$;Jv+dornVGef*DrFpcBR)!ck_0N#jaCAx~_+K-P^88*DW|*VwP+yLk3RU2J=9j zTKl{|f301Ysu>AH#vus?hyIO0Xy;~Cdi?c50tK37S{^4TG$%MXf04CgL}M~)vm?02 zsh}-yViHV?X5kq=movnyarRv@RvB#5SifmW`V*KCKfZo9F(B^=9ega+=n4i|ulpW} zCh4s5Jz!h2e2S0)aSf=T?e@%4@2QoP`cfOySGl;gy_60~f3gae)@SnKE*-`9>miWG z_TK8}02{TsDlWWezC{*~YcXnd_``vF%ES`0&#D=p5qHKL2-?|Hd; zuTOC+GT4!w=WvTwi$Gro@^}jER`5nn0q@IODAN>Ut%_kK5&srZV6{x$>5WzPM_3e(T< zclLN%q55<-5?VT+&mX@XfBrn<)%`Zzh5MFc2BxM<=3HiX%=B={7vhHWq?D?2ld6n< z2_*eY)?OH?wyp68dpAz{<*bYmEHwWdKlP8O{@`W0=>1$Af!12zLI$0`Y|?1-_#6qD zrYux|^4UX?_-UFzWt`D>7fP6unUv9U{ZFsU(Un4K3)15gdHFy`vlD(A{9xYWQF{&k z%Q2TrD%0hCAe|2?5NO3!~(E}YM69q8DCS6s8ikO-7 zt=4!vMeW?4e%W+?FA)H~f22P3(lGw|KPFa)(6J)`k6-pexhsk>jVO> z)WdYC@#De!hTL?tDNRGnlY*LsO+Kd9d3x$_RiEDq& z(Kh=ov^wbBRYO=eyHZ}g@ci$7y4u`n-RaReQeq$gxDkzBxe^Cuv5$$vG*E#}kR5~K z{wKu~f!BFvuW)!T@aw`SM?*EuBd>hxb zg;yC@jrk3W7aW{uMvdoD8+B*lRYLngAj()Ye*mZ{u*VJ3yS^Udzq$v&wA{@!xbQw7 zSfdPN8@v5!C6>inWfovm?Gtkub7b6uQ$E%_oJHByE$Ip| z0@n;V&JkmFbcwrLAc<6(DgtZi{UkU?0C{eTb7nOr z?nBr<4Dq(MK-#esB`DaG$OtMf`?XAQ(N#oEO%trFbMONp2@f?f<<;;e&>-xR zN^PWMk{mcCZFDc+$J5m{;BDdfY|)19AtVkm^;z9ZXW7WeDjqDF=&dgM_lUOWFgo`Z z!+utiE3BA&r?G(29^jSURjL2MtB7jrs_Ek`e3fQ~ zbxq1hpu3DcvY$3FAuT2ICY`W({_3~kDQm+D?A2&(!P~KXmNA6_7qs2B@6X05?}5=|3PO8@ zzmNd`a}l+mu&tYOzE?2lvbOj03MAw`=KMi&CS^Nx z-w#oWI^hnMW%~c;wc6E>{J<8l{OFtWRhx@Ty9!)C%CRT5SVyPLm0797y#}=Hk%CqK zx}-GJ8nZ|pwsu#<)kZG8;ib{kAqSzDBVUC`@uDHko*1gy6;RROcJX{#&+*Gpo*PMs z)t5x&O>No9AAHBZWawtX?7G4fE$C|4s5x!goGG&O6K|l( zU@#x4ppK6VJdqi`HPoZ(spG0Oc_5?{qRfmhgZa{W^Y@ry<7U}bG0twr z{O@s%#Vt{hU%!gEhV=*^tVPA z*JrK|Z}^7DZBK)*C+BCl)u!~k{HREd?a<*pcf0<>bT>Apa-#FTuIO=7Y|FCvCJ8N^ zg*HaQ1@IIj-Z_yJinM#=M?sYoYFSP#rQCh(Q>gSMb32Smf#<-m)Ppsr+o&oW zFpA-1G;Ag(Gwzl2rJ0@@6}SZLmSei{Zbu%ND#y&>o|6ElMFAX+%2yV6#e(g13tQ8_ zESrGjtW`NR92E11U;GDF%y0@4C-;aPffd+3|I5O9){sy;X|-2rbr|HLr@KK75gw>H zriF&|@#dU;oSo2iCg`&X$C3!IegAWkhnLc1g5Ay1zk)Kx$ll90dyy0WrEt1SNO4U; z-#=zI)G_~p{1gE5{zMhv!mIfa1uMODP>*!DH(E~5ZQK510-D;qFeUY~n)(8NNYGyb zIBC7X4Egggw3J!b$DO+bf4}#S4x9_g8YO6Ao$ZKtaGn8bmzGJrND=i)CW)uMr+mI% ztz62x@XCnI?7^M~ydi{P5yp%m< zfSv&JpYvAJF}%BFk++XClC<7dntG*cyY9(AKTXDkTCMF_{5iZUOiv1Culsho($)P= z-(2}9)f6qLCCYzC{X#M?uRwg(c>oTs{fLQKH0fTB^*`J8~+kDF5|Z zycM|EYO{PP{&nCnW)ySH)2{cV3b?tqOa{#3$%39|BYfSDIVpB`ENAGK5BH2b%kIf~ zW*Bd46v#dHYc$Bt%hFAD!22$q$**awdNw9@Wbn?s&qnAu)3?yHJ@xI7a%=ml|~-U_bX;CFM4geFDQO#W|6DsLA-h z#FGnRJWYod9h?M7v)c0Ui66KoMT*OMU)2aT)$NIE{;?LJViKI*^xIt0lcz93f7I~} zPhCR@G1G8&qIDTkICjtA`=p*CPeKa*m0sUN_mQe9OtsUB^24h-TuN_z&TD7B*45_y zYQ?Q_HAfYEoVOl4fChx|R7OzN?NkN-b=rd0qj8ke5$ZaS+F}tlcvT zL0EG>rH+(UG2@*2l^40;+;q_ z1>Ma@)CWG+c1+$nOx8#QWDi@AI7WNjY;8;y@aF-FBJGdS7=ax4cd@f;;Nq8PBdb@F zBji;a=5W1eS-8qK2=j(PNsuY^&I3IWM2R+6A2jRW4l2 zPKYeRuV)@4a`GE5<_F@nx(pA@Uwx>h4VbZVrl(tb@OiyGcVsF6RUCf1W9x^X1V!MH{a>_#i82=>S;ii;>aBjJzYNb zj?zU-c6%3FGt1=yK7*+y3`BNKmwolj@AS>MZOn2lH6UQ*UaIE%MEsJ(C9V}it*wNu zq%EAr$GD#uk%eSBhBDLuXoKS2^9vW}EGM5Pp5eW?gI$imiz}0EH7$J+QNm^)0{|lt zyim>|zsM)O*BY-413Y;3xODey5)$KzoXe=SYvgJ0cG@Q}zH9tDNuqEN7m?Hub91w> zduC0)va%Uv-v7JqFljw5i+JD@b3L~8sf@_oU&YTi{{nuF@ZXCFreC~?THU&8m!6W; zh;{1+#Fpid9)b5w|CqW}I-c>4-1KQS)s;yz94SY>t>snz-Q(H|6lU{F4wvtvTo8`R zJ36)qWZCp2xk}e%%U#i8kuW`exVm`cJPUs%{1TJZnO@CPs}uu6$IAwMt`?-Z8lw;yWK{C?DD zo}RJ0;m@uCy>Zh@$*0f4p82`zHIH4@z3xoq z+?C-_LM3kQW6l6SVf=f&S)=V=#<|K`bX9FQ)~F`DySsaaO_ELWc~10rcmK#8pi4>p zcxL)}WMoDu8y&?IcPD{MdyE@m8SW)#B>ebsOjra?nT*TQ^I>OU^^>k~@KG!a2>iwagICthAYwQ%rceRrT*mQfFy z!~nr4T2ZT&v5p@46f_T(2p1Mv~+C+_&YAn?xrw$Bap2LX3@t(l=7Yx9J zHA#CpvwwhsMy(S;GS;&j*B4PcI7-dQd-BA?zn6p+H88Th9WpC0sxtS%DZhVA!l?!7 zGM-Gmf*QC7P!ffT^=V_k`DS^US#NM5v*aQoh9Hv#%zRiyI>WnldRD+&2E~L`m(FJ) zPV({**X>T8HH#nLCm+v_Phzl{SZkNB;E8&W?cS%srrVw!mO8mf%8g<>$Y9`XNRIEW) zp`72s-#m&79d&kGoAdt+@XJ~xRuO??rxXVtB;W7KDHainYf-V>hKMEJXLWBSOjBDV zwPjK+N+mU{P3#smTB+8SRO`AnCZ{xr{i4Vh+ zt|1+vOkf}_n8jf60FDpY?=H5hGC~^tHT6!Qq1=$WvC##9yu=L!&K`kGW15JH^S^lCYxi;Vk5^si~_7O*6`8&awW>mhD5O})7xkpXYF ztcUHyV!ad*ZV5Ft2SdLr%Rh@s-!4f)}uW_O^yS-!FP^jBNWNiUR6Sr!IIf;~8nADm3`=u>ShuC8v_IP`2>$yf{g zB91`BVGh&|uaJ9}Qv-PCVyLVId#iZy)rc^=6g4)FrdU0qFtuAqUAM!bg2kt8tF3_Z zG=b^CT7a@R!n$2s8sza>tlv~fyu_=gb<`le%8by=cp-Wl5r+*Ue-);uO>^8g zn#fjOgJW%Ik1H_o#pJXd3LPvj`@*4b|!JPY#`a>CU@X49{IvU!glDAGJabQCxO zv(CUqyiw~_mpu!dbx5Ayq=9E`28L6vr%oiIC!247MJ4Mu$9L`)3lQ8ks21=Oe2Rbpx;*=Fx$Uf2p_Yl! zl4&yaw=@AI#>Y&trR$pVwK&=#&b}n9Abk2!)4YmWI^(%0((?v%X zr<%7|-b5NLs53J14OzKY;oISp-iCSJN<{Y(QRYNBIBXUPB_-&oU3Bd`8L8`AxmaR} zWiVPv!digv2>4>TA*DZCs*0Qw|1kx(*V2MeVAnkK>~Jl@g*L_*4{lHw!ml-``#Plx z`1A_O;#bLSZQ|-dLMqynZ;gGd%F4`0gnfVpF)pxo@i1*$tU`F_GJ=SnxY?}@iwb0M z%2yFMmGEV<)xU>#bo1<=Q@|?fOX68p;~N5V$V_@+=v7K}^~q3yqw6f+r$(ccL*<&h zj1a~3F>h0sei>^?@v>oC^YjBn%-#!H{6v+N({@0Y%tgHeu1PTRX0^#9dolRNB+aJ$ z%#$biDI(v7*!%`zq%dZgsJ*JTwkAQKhsR5PP_Mh;Gl>Z>|6pL{KxTr&n=58iTLKE;Oh zu0UsA>C~6IZ2GHS5-s{ozIy|RQH2IZ{Py;^+_A(rD5k^zIT@-gTXdnNAz4Soeduzc zu1}perlfXiM8QSEQih*c1v~4BUkL9Ix`1(V!I(y|CnwdHLPvx*>ECg zCO?|&vEqk}5VwSJm;wP=D*i5xan{f$y@UmLdZ*fs!<{WLGizm zoqO2lf2G%^uLnvz^!vHx*-|l@J^01U4e_ASW0fG$2x>5z@wCYQvfmFqmRC^g0H_;!%f_{kk;_G{kB zL3dy&THPk}Dd%@9^MWV0opY%0g~|;5$)iGIMaIDm2G9rR%Hh?s$ zp^mlj^PmqkutKUZ*J|0~t>71wCN{@nXnkJnCG5}FT|c4s%Ymoh9Ak8tQEQ|~*Eza$ zY(Q@*bb<52!J0g-C+yoZ`5tPo7BU06tq_N)T_B#;1VvhQ$+`vMI2A1eUXS#1LGo-=$Q3>NlvYv{ThC+#wBoF zmnMKCSISRv$`0>X8WlIw_T)18XhY$R^mNkk^p~iuPd6YubWN^Zs8)BN-C?A^p;L&F zcr~N<7V{QiW$wB7Kax*4qZNOC^(mk~m?pAiIDHW#eIf90awNX3y8H}MOz3T?1zl~H zcFwxEk&P>vt7^iZ3|wAq5V-rz68zwPr$}v<@$=KAaakHFK8C%i0cmKS z4RLLUS7~-&nCDYF223B0^IQ}{pf4o85X<~;O+$*pWyTgz{|38W=qFhVl zekn@jexK{Qxg{1tt}Bwex!-M}B-apf+bXx*bD6nLa#@IBE;09ExeRk1X5Zg_fB9pN z$7kEa=l$9H{W|A7&x1>Zn2m-Ns^*lOj37hdc1w6RM{Z! z;DVI3Q@xF=+AqDojYAraBN-QS9u)LlwWY)^`4mJri-zc*c&I==M~lr#B_q`)sAlCJ ztUaXe)rkQ#UK%)azkb*lSt<_W88VWrtyvMGai~yWoEfFGd9enj+OUw^koQmyD%;NZ z9Ot5LyWi5hU?`m5rL$A-$BuXRx`H2%OxKq6fx&h2;3I~tjox!C`RDQjQb1n$FQDG~ za*cHEhBNwsOlBd>%-@l)D&m$7gPketvvdneltXv7rcaboM){vCoLZUq^lmhn?*B%}hR9dchazddM~18^b=5 zyK>)zs%pgP=JF?58^&W^TQ{lFiIlLFar#s7hnasrIpfn8!Zlir%@mePOYIv$>UO6Z zTGU}_`_z@gwLRNLu0fsH(e2 z-_Pmqt$mUo6;nc-eFDIjzy8@bM~)s@Zik3?WjK~eML1$`Wj51WebVRzYSo6P!{Nd4 z2=~G@83v5N^-z&e$)FARZ2M+6%~Qs2rAYFEC5t4S;i-m{B)ebVPr9-cOq)dPnA3T! zT8A2%aft-1aH?SB)B5C?NMVZ8gzjzfA9cIuU0ffQjhnP}7Wi|1eGuw7X{1}oZbfj& zn<-YxQ;#S_8mkU{;oqV=DAGc)PbnIw5)_smASYGI|Ci7<8}&+4b6!u{n!1dW9U=iN zvfc5cN?WSbgv~489R=nJ{6J8`58SE?4ntUE>_EM9Z5zreudz8$dyzRGOJDh>x&1i&$qsgwq5m>P#D}!3ew?exLI6_9J2*p z|Bs;n`vHdHqVj~$ShJS~!3&tp+66Hl3g6=3Kvb#~-9T+TMe?!GYrAzbgP@MFI~=ZT zD9~J;&9`4uaHOa|9J{e6PV1Xoxj1?@a7w>iCqtXqBC?*I5hJw|ez&=lZ>2tKr2uyb zc4H0mtPevZiuR;Zb)|m%AWMB9hVdt!f-YeeD?;*oA>12TyL_szZ2{>&Gy z2m`ZRaK>_-1L~OG$=)TxK+IR^`P>327c+XP49G!P%6W0`$&pY}(n?|vM*5f0tsnG$ zbh)~g$ohh<43m<=exy-#=^|t^na+Ns*9?kNjIZU8Sq{g@x@lx^x7w=EUnm`Nx?zUX z<#y+j4C`$lgNl7Zb3pO^7O_r|O_ft|6fI{du*oJ2!_3ZhYViKN_R%bBy#5eF9= z)#hCkIX|Q$|7bK4SoGY@)-xNUIq*}H12ddbY`ML=|=r)^fV zuMbkI*~dNu`P}LDeeFuc^AgFvN|u&J1P#gDo-0X+C$Bg=;2K+6DGPAvE#IkECF5Sb z5MEm~-*;nf=E2iEqjmTQ>9s$3*03uHf2s?#c^p{1Z{9%-+E!&&6J2i~ggXwl+Hi-} z{UJ%#^{I?^am7>mRm23_htDmReJ~of5qIlyT3hrFc3`)*;!5-ig*R@s2QHDUSzY;?{nvAG{cITjN`2i+L5it zbZwVCjNbPfcbRIuL&*ji7LtA5^WfY96jKzxKbUW88m=yKO1RP5dn(}Kot3@JJ%XQ^ zt%rI!*v;4u>a=$&;qCFpl6+Pfy*pTlA5W_AFo?bNRh*lPjYO9Er5lEom0uFhBI6uN zwMFxx_9;;?P;ul28M}a`-W(Yuh_Oyfhkm;lyCL|D^&FYEO|d+&!sXokNpB~I)==6Q z%Iwl?7&{yAHOtjavAXXafpjMC_}DEvi;lF_x*eg1_M9s5BPf*DY`aelO_YgLH?&n| zZA4kLfCg)@eb2v35}5oi0vG}7`WHJHn{=4NCzrFSyrqX-kSW}P3WB3eph73Lmn+pO zye4kny>d%b$KV%&^Fh>mjHrUqb(aX~R*D>Ok#lEkp{Ne*ky~Bra>G8C>Mh!cn2@&3sWWs0twd>Ga`Tb#Qmq(k+@ZznW~X){I2&Hm$%u2jZ?<0X`As3T zo;AhaSl5*p3#xMXq>8_LxC)rE`11X!`$V_xU98~)Q|-alwbq0XTgM(>n&m;8NB4yB zdXx3gR)*!>3V{C5+SIf;=-WzeBvEx|Qs2%~jFhwV48D3D;`I4f*Ne8W@{8AP2_Emn zW5o3^0}`&I;DC&b=(I_R5|HR@RPC50o8EK6v$uEk6Ruogc$T8d|LCdW?l%&{3(@mC z3>80x&rN<^hUf1u2U0Z-JF9$0l5XouTNSo$+-#lLBDLyFWKV`1`Oh|_dy|$6;BdnS zUxWi0TvM9t{=E}`4&ZSi$z>kn;WFDndWPW)0$&@ML<#IIR1#r)0X|Ec(UhB@nknEK!i z!|vRWPOfRtVbWPD)#g_7PAoh zaaQ}Q(laiL`hcdOhpX%W%>DgdP0{%`+mxp*xGH%Pv)|}_OV}dD@<2p{b=Mb{x9=L z+x3ry2}<sSBaO~%dgpPL;^-iY?N8QqS8_A;m*MRN19OHX(^$T{r%fD1I z{Jt0~a<7YujXj^-vyO+JpZMe3;L@d9w&?Lv@(k_}4_V($mGKtj&79G27JdH99rG>U z-0)CYW~tgWrgNc`|Mr4KvgSuqrB63m{mecEr6g#o7Se0N&uVY*W^n_~7O*TyuTsBA z2H@sdsuMq!(a-8UZx|oAnqgge6UZ{W;N@N*PO{8`z;ebb}^JO z2~!Kvp~9p^5HnF&EbBGk$tq8ob+>b&t;*UnOO2O;Jl~pU%paSY`C#*mRZb8hNqNbZ z*Ydr2vegpoq)XRNJV@VM-Yv)e6{U~;Fcy;{n&b)e@L3*k`RODlaMdMSN<0QuA4oj} zzV`{(0P{uXU(jIM@tXuJ2NPoPsXo#q;8dfMwpg`j7+L1bKtk|!u2v9>I6J4tCg6-w zE##LeiTbq8yIpu`5*x*5npcmwxFTbqnl0ljnRU_%p-6d7t+ivn8ff%kYC3du+v)z4 z-h58w7>&;DZOj8`A<#68<+Y@9sld_l9@bH(&Y(()DFc7dM_;o#w480Q>}!HgZkTLT z#^a$`pG@lhzlbYzn_puGg)?`pcyE&Krm6YW`ny4uY zZofk0902MKbw=1Oy??_zS8w8VLuGnm@im)hVg9;`Ve*P%P)0KTh^J4 zM|TeEXmYllF7F}sPI7^u|9?!?jLZT;ape{YopKUXhjOTV^sP8>)V;bQ!XIx!zeUBQ z=bedzoxPlaLaQ4I2`?)h zkD6@X`lDMR`kEl+>e_!W4rsu&?31eCDA(1HZn0_Sh0-qL4bs(avDthqFf?1Ga@ugg*v^A*qF!9$&!c0L$gU+I<#tHdsoJZZ?Kj%s%FOvX z2h;x;^oG9%z?D9tTYb-oHwy4J#&C`{)r@jYD<9sc&y5VG+KC?m*R+)h-(~-3g1f;S zJrL&BYu$Gs-qm=39gt@&jSh9hJ;R4V7((|8ES|VKKBS&ON5FL;=HK!95btlh*z!Be{z-T?e1QpZ_1^m&uPe#5Hn9>RVH7uF`4fIpEoU_CR=w0 z59x#S)9rp}{l~x1&~@<{-~hwQ`;E< zGMjE&`Rs&mt-4t}kuX>)ayC8^yn)8_!Mt8qHP&W^SI8Og?Vw6;W>=r+s2Hs4(s%F| zgis-tle8<3Ytyo`yJ$)&uR+^Nc#mA(rk5!X@*4UUYP%E;YdE2E!1D*$hR8T__FG9W zX>{%4NZIqR8W(amx=^`)R;)GTCT_Rhm*mW(w7mc5`=v(wvVt#PoVIUR-)00svcHJA zPg3~m8&e&HsBqmO$-gHjPA}?XJ1(jv<=9=Tl_8A z@V=}@h_4yMwF=kX`j?i{#!GLunD2h3zoVYqrn>aO##H4@-u&$b+nY;D{{lX%#`_H) zH(q(e<-`%9Y`1$T*)$sL}yU!0;{`@$mh?wu{ey$$;M;oWvV$9YM@T>C+{FYlu zoSufwiyRv|gY-CaBrP+=^1baz>>`lVcWMwR>1nJ57P1c|c4c*6-@$ZSwUJf7ybIm+ zQY~$Y?Gd!@2L{R<6nb^sN$-MCd;@Ywk1leMYqB`wJrtJ?kg5%d}=FaqEs{mznq zX=k^nsFL__-e?wbNma7);IZjpd)mnXJyT%~m8JwOMQO;&>Ec~q2eqrHHhdjCOw1cj zi+h0I@-|-|yw`VQ@r{%)%}MX}EAva!KZUvUEs|pX4r%76!IhgP|6zY(DYuV0As+&4 z{vj?eVR*m4B$(YU3*BSDNF7R`5-@uAfKS)B3S2k8|`R+n+(y(PsmdyRoeGjc@d zA&rTWv9!%$)8_AP)l!r_ePN7SW&#Blo+wPU9xiRnu~~#O;~+1SUE>?fwdI_HpK?G= zmY~<*w@SeIW-+a)V`T0Wl;7Ek)J-?!Ary!_C$B;hD~s^PDW6^kE=0xXhiAkap=$r0b=^)#HmBd*n0KE)4L_46#`N7pZ(V| zU*6J~46bURRz4TdCZqD@1qcA)^Zf8LhF*VD|1B0mDlWC`ND5HCWX{0AeqKXz8R4&R zPaDqigtJfu9s2vX?hLU*{0IXr(Dxgy_seYTC`L|&?Ao2w8xF~hwCC1ME;meKA8k%) z5dHtHq6NZ8)E*0});43#8<3^(>3)*T1$jrn$!W>KpB@=s6W7C6&os zET?&h`~@%sy^JPpn{eNmVLnIHVUW&R&cIltVKg*)H3C;OE#4VwJP2G7D3j_Z-0piU ztDCG+upM#Y5g<9!j2xY?9??NmY?ok55cD>4(HnU^2qE+hO0K6h(%ab<)ne?rY`}G> zpT~4VIqh@fBX%a2wvr^V&zH3WUBcglF9#v1(E?AU-lmgHbD? zeXl>?<)0cl@Ti%ms|rA;$p-)StU6GX%)xqUUXNaH`y*V&r{?PFJo9>VyU%p{QA=I0 zq*EyU?v4B+N?{S_R?>tQx9)nZW_wJY!1J8i@@60OPYMg4eOm>j3J_Vl=@^-V4b@`y zfZC>ip)B)d0vl^HtF7R;iPck#qi~|9SITkCa|M3ZVb@*HRl`qICT=;~`fYKg`a?~0lNU@dT z-5Z(M^LdcQIl3>0KlmV`do^S9!kS*K{{g-i=zF0&oT3On-j@*Z>q{R#4D;bt!DZew zD?$2HSjr)BMt08*L+Vv)tmN8_OQs7Nrbo;Y!W|D$B`wz<6)?|4nTBElQdbbf57!=a z0obCGelSY1FZ;nYujX?rMdZ4L9z`v}{qL=_lo&j5{vrA$;C|@OpU~#sbNr&sq!hni z&C5|bVApG-_2YJ6oq6n5R8mxt-Q&?ZnrlV4r)S6Ryf-LxcZ`t2r8^gUEDY88ao25} z!NrBMCNs$E^0OHJ7cm!IBzYy+HTTPHt%|)XrZ16p=m+nfW?);)!!*=*+Rs}W3>V@S z?zy~BiBbUU6BzSP_epenWhs?qM%$a^!@hB%v?ns{W*i&FvSlO)P?YFzB+^*Sk+~V5KU9a| zSLCjw`_{$MHLKb?U1lnnO5OVwot@))FNtsh!Dk*r+WHj+Qr{5=v?;q`OpV0WOMt4_-TNK{)UxnBPy;xW{Erp^`1*y0u3#FRm zE+>W1Qqs$~w>)?IO$M@xmlo!B9}kus)J+`KQnbGRbzBR{&V60%br_zK6XaJ4o;GA1 z@ceFLuZkRR{XQfru#~RGl=My(C(s{xD&0`Y_WiQL@^*2 zI#m2PxDic4bR%SQ>o;C)HoBu*-ms^0*}L*nwL--HoO!bKG=4k!1-;WC0d(70MR8Ya z*1Km%XbCTl-xEcjsi!?pzbDSVKLilx*3npSM)+vR$#x%RE2L#MH8g#AZ_d=X+s#vb zPC!Zi>HVRZSVyQJ6nizUtm9_55-Q?ZBIjH~{*+Q5Q%wSi<<9Tln3@uxa@tHjx6uZenabFFs^0A_ zr~32MG_`tK{YiQj!p%M)>w49*cYt246s}pOEwAwC&i$W13Dqp7%v?I*XRe}p54GNz zT8&5YvgU1UHFtp$CZ5^`qbinu%vp#AY~Z!i zQqBP7Cn?3=g=?sjV!RU`RM*^|^Fbmon5^=dDP3Ko+pRQxi%&9N=$yJUjGJHz- zp!Xti6b+-yF8y1mPyBVwoTaH%!O>Hu^s~&8OZw1Y2fiuu+PdZX^*H%YRX-(&yV~e# zNY3JpFDTt2X&swQ2`s$b-0x7uGX{z1o1TWpsbBul6gCEV*6bYIzScieey2TX-o{3n zRDMj`rFlPCUp*n@CF1iE`-VVtk80AcE8zFcGUvIU4F2bMKP(3haX}e2NRuK_I{J6N zI4J~>QtfwPSA`zz0ShzD zM?R$fvu!D|ZsVjwP}Ej`cri8HJ87~m^OkD2;ZH`@E;9Rz6jQ?s@hnc#!Xiz&o?qN? zo|^e51v~EFP@l1i5-Uw@0qEQQ519>r&W#YyS*bEQzpy9EeVIlViz3|Ef7lKjhF%tx zY6+f_%=z~KwdL#+{jf<~5nK4L<*|*O?b`6Cxr>~eBX+v z+JHj7Gn9H4ax3q{Izg<^9vCM#z8BmepSq2{L-{6UoG11U#zj?L5&{1bd==j_Mkxfh zG!8e+^RBZlT*C#PSpnI4%SY@%OV5jL$RmS*l)Ko@Sr$<2;~lO}n26)r$*W7Q#ee5! zDHffAs>PL$udzkw03XA+Wiu;1TAfj-`UC)hwL&mDVLDEX<0eTF5RXd?eww&i)(|e| zaSn$g3cLQ@ApljjS%La|muhPIhS?eK@G{5aaeZnW%l~S;D4eq6;`$n>K~-IY>Hilg(D$I&y=*QrMQ*;$I7dqEgY5p3Ft4j#t2MjYP z7)(Zwv|~zu^el0WoxV28y{amxYOAmw6?CL^q>}J>Xv5fh*8gm}M&~pU%Yty;U!#_B zId7Z<&Bi5@x=ntm^HtO7(jjg7q9e4le(@95BRjM zuYomX(Y`VW)wL&(vN0?);I8#JnJh9RrMVBoC?3vA zvE4qjCuhve_VIntmUGHoUkdF`Ew7Bxkji?*&IbxI_}lLgQdi+yX)SqbqkH2Wi;ZP& z>Co5L#|ZVd<0{YTS#?w{zGu+QvhsWR(@)2Ckd}@ct?P$Y^FHlR=j-7NVVxSHKGcA(7u0M zPo>$Ev58*P34g;Jkb%#jsqV+0Ww&|5BkwQXYZ7r8r$>D-CJXSQ<#(hRy63-3KJ+g) zY*Both9Fm!#8pzziS=68`wb{Qpo*O_;dUuCxYJhYn&Fxb& zK=(M6lXjWiL7UA4|1dJkyA#(O)u+BjjACRtpuMvsvBnBK%`bm)sraZve(RXN2Xl}S zy*_o!5l(#_#3v$d#5yY=U!0eU$voOpk=Fpb>vo~m) zbzzxnZoO0_{6B{7*3#twxYqx_tSsf9tKfeO?@VWi${vUak#m9&+$u)&%~C3fo$rik z^mINuJC{}|X5OP^o0LhdJn?8n1_im6&|saDg$MDk^3{mF@$M73>FKS>#G>J)p z8bsaqBB!}0&NP7l%tIhqcjv2Qz$wW(nv|@}BDLVC(K)sUvRUr9QF1DMcxpB^+g?*l^EhWnNF6@d zI8Fh|o880Q3lk1VnNQO_YuB0_tvHnpU4Z?G`1Mw_3Gs{``B`Xy>F#&z42Y^rFoJi! z^qOjutl>HTF?{x;&sZL=Yg7RnegOBca8dK9ZR3^jl}b^Gsyp~XRLNO&QPs)6$Wc>; z(B-}VhZ+Om0i6fM?7o-82>?3x6S0vJi`R~#d!X2ngct)VhF?`y*sDd}HaJYV0Q>Vubh+039bQivL-R{VI z{@M7xj~Wi7=ThM_^yj!#XOBX2O@)*`_7#svS44nHaVJ4U#x*d-B~^&P*saUUAo|VZ zDHKeW|9yDKGMCoj(jnx_*DcBmkN~!iGqb>s-^1Ud#B32HVId^>a!C7VhcPS!YX-_n+#v2kc9H(GWOO9!oO6U?u!2pl{2-hhDvcYLB`N zqhEbljABSPJu7L?K4l0M+vgJA?^ST4|3j1a5cC)BhG~bjAVl+%b&P;9bUFk`vD1SP zpK1b;ovies*0k^2o$s;^J{vT4kd>IvnghE_AC2#K48A)jQM)!jnSuQ=q!bY-ob|B~ zz>&X~0oPH^*x1I7P2wINI*`BiZeON6b52+HC`$Vc5St>vOA)0Kv6|2UxDs$rA@n)? zXMuG|1nf%^B4A@Q{f}?Ld`GMUUmMEP0cm@jD|79Z6_Pa@SA5i%>^KSX3ERM` zoPzz*SkU18@p^b9@*yGq4KuOx@UUJl%;9+9w%ykFh;t%6K^h>>dW;W+r=mh3|-+`f+Pe+)Jgspb%N-r?hk z5a3nhSX=C(TC~5iknvZW?g?9Lx94|zg_NZ^hpWHxCNyr0x9Ppc`pn05h`~I!r%!3D z5(NIX>%l?NSdP9x`9NR{ki)4J*LLn(m+)uQc-xanKAE6_JOz9S8I*FMQMFm*N*jD{ z^sXoO?BNaz?Gkn|l|4`F3N^4Jwl{qGQ&Z~CTp66+0!j1U*L0l#3%vLD&~Hm>m>f?A zT%f9pTQMCcd}NJV$p^+`#$pf6^CfN$-f`r~XoG}#OZlXsQ_D5)KIF=_uvEI@9Xn6K@k*49Uib|%SISnFbwd-GnDp9P{-@~Wx-cuF zhE%q{Hg=tb?pd`ydn|Ene8pkO;#a|sl6L3B#^&FM)u#S}MgPJ%MCg%;-G*teAOfK= zL)YFvZkY}dyX5Aw<*lOn02Tz@b==UqFE(wazdEa%t_~I5DS4YlR;nrBj(RNu6 zQoN?=UFqH^$b31o$i{KwGvgvPqlvlOYF?5%2|Z-8r% zwKj`(JlQ?+sGq~T?=st&Xn~T^I2n|Y?4Qkv2`8azt;+IiJWBZ;ce={QKe=l9wWQuP zGaVVd>@$rlD%zr9dup&_y{iJndJkC(?#hisCRY>@$R@$Yi^=J;r7gSkdE-2Z z=$gt5{(W>3V+)QnN7tnlg?bh5ZtcSuB_8gz50!pag@(S(3A!#_pm;hD~qaJM{$LG_qf_{bQLu#=lczi0c?)pu}rwgx14Z$nzEN;l21YqSCRd$@cH3u~t@;$flCj3Qs zjIVF#5X<9Zi^FdniWKKA&2aR5V<_D21D}NFt%9OCltdCK{ZOrs$lk`7(53XL?4@-7 zE-0-Bbqkqi7QPLOz(I+nZxe#n?n_Hfrj3sEecFpj{qjI2Dmr|)Q!r(40)24sI$09r+ur9&O zWOlcxacobS{b5B?d2ywCpGCr4e?fYPwe?852)qhkGoEzAD2NK=kK69PU#|7Cl@_Ad%DdPnlQA1 zp=aRQ0wgUwF56uDu>-~+-e;+wXA|QKHI2w_s@=i#Aeg&?e>m9A7|TqneU*U=O^TlW zvK`8(P~Yw#MV&fEUO9V@=I!W_Pu6T77%0OAlu+0fX>Yt%$(Zhr%eKGjjf+A(hPIwp zRc-E5O5!%U9dC}`Y8<92JIh$C^Km;mtcCj&Qs2@h>6)V5ybyFs@X0 ztgk9_6k}R-;c>x}4!%&r+89FicK=3J`z6U4PmKPUx%nu`=vKQIvodd7(%sIn6lqR^ zjI8bB1Hq%PGRx$7RRM>Z@I#X-FPH;@7q(D~_z}_td#B4!DJZ5sX{KbBQ}Fi$=i_v* zQm%s3VceNX_0xSNlz9+3YyL6CGswBjc4loljhs^UGHBIqFzD;wjYIv3rENOY6}b!VyQwO!Kl4)%8V6-Z?Y&593ea0D z{$pt4y1I$}27M;qB?5Xn(k7YBIiQjjid*t3D-F%-Rx;ci2=iRD1G4GwRycPHRw~i0 z6ev2okltv;NR@EjAuNQ@PqM6`Qk^G{KjEmr1rj&53o00+r>EZn7vg`}G=6ZYQGOaJ zJ(+uWV&4}8(@xr&L4Pgx%qZIPJ5$aN3` zwV5b8?H_f&wK6CrXNQc~s7AFXi-5ZYhnf|$pSHO_Q`<*9G4Q;E5w*V*-$`me(t`0M zDdzXQ7NK z=i-+Vpofh`-tUVjVJ6oNnofw5BDaN!H98nHv;b5i5-w~R<`CvSVuxLx&yfdH z&b=cDFr00J_oDImj%VJ@1PK2eCi?nN~ym&KX#K9e@sb#&2@X_Szsa`?bN> zzJF2Su}RKp^eC#04Bm9E!!aPGu!a$CfN~t)C6X#m!4$DW;j_Y(sF*5zwY?Ow7A zb5~ycYnd%xW^OFU#pDgZyad}Qu_GWL$UV&r9AZ_`eyes-N63NwD63e`5YRzCBN()@ zYeIZmr5G7knv59E`HkhSWr_6Awj4K5Eps1EQS}{qQHKx{xs>lqnWK3frk*w^7tej% z^3>jsyCmFtKqn#kKsa#Q_$|jUaq@@AF&1Qh^t&2oMG321>si6YkCUQhtax`Jg-`uM z@QN*omX&}ZcrTrf7 zj9YoyzwieyQ&jN6Nk?iU$^l6PDV)GRKu_3qPZ>k&s58sCz}99KZRYfi*WtSXeCGE^ z7>MDI2f5G!eu+CTUzb)h%Q|61{5~3t1z{PnG4wK{?g6V~ad?)UfdRBdwq@Jd6S~Do znjPq0Upt=qx8G`tZOlIBNDr3+bGFZ*??*qebCqGiFX4VzSe2rIPW-_pG)D{}{9-vF zR0?po5pxgYMNHS|!=fx460xui(7>d>Ig&bi0y%@MK4E0%?hNfbAff<7oq);Q{_%z? zt>^Fi&?qCdm>UJKkbsL`|1p#o`2JRZk*SefyH`f~+H^$7kAlfH4FS7~`8PgZ#EP6A z5JlUypr2L?Z}0Z$8zUP%tM)^p{$uDn-xg#-O}BLjMET^-Z)vM{i*k64=_U>slrmt?J66>4BK5uLttj^i(j3#su&vlUVFWpCe@UuLFFJinDAa<6GK)9O>H z-nOUS`gZXqDa6yQN)kWaKj7n``c*J!t*mF0^t#GB>>JL+#-RjR2ZiBLo2XMK+7Jvm z7Z)TSGY4!KJHXrNwM@`NHpn&a(UKIe7da_ai(1Wd5qSXn%hSa7TdEzLjeG;+vwca> z4%(2}?HxyCbjE)Smt-*l+Nqm^(hvxg`XWCdAC@&E2u!42sBov<-WjSWUu!9OADn%n z{(&kV6;Ze`eRGUmPzY}~tF|<6j`O*}mf`2>ub{;KM#19j0<2R9wy=mz5UZat-l3B> zcQUszh`8{$uMkB_&Z2XvJ5VrE;gO;Za;VT5cnEt3m9)V?*v*YOmeIUqnV}j#_4osg z3)x`+w4DCR#yeK z9gJ^B)NINAWZ{>s*Umldb)NoJ2S#)9&A94j59N)H#E;i9(ScMXyK^^a>aBAT_H> zIxGm;yFd3IL&zFBPe{ipaMb<7az6MZYHbcbjkgB^ zF^DmG@6MQ*5B;}AYOhF2Y;op(qVx zcE^{bOLPN4DJ5t~5e~Yag3Kvj(|p}r>iDl^BIjl0nqYBdR(MuMg$>?A)3MM~DKmHU zq<8C1)mGJtInzh%)m}rUYW;Pb27owoCI1i$>wW=`<=G4*01kQs@Eh~+H)rl@4W<+S z5Dpzc%FD-!`7Q#zN=X@}N{`Ll_uZ>3W=o)wv~lpxljD85D?ltBT<=hHl$B67N9QP9 zbjdX?crg1=;8xz^3aLBJ;Q_A$PK?z<8T~C_{JM_yF*{rrjZXq$AO27EP4jz$j%NO^zFAI2I zs4gr%rsON38cHhneYD(5`qmq#=Yy&v^@D!Z=E9|A?K3)5pQuhJWsc8^SeVy&rp>91 ztL(#uUdFqYNeBqL=5w9_)(v%PH{vubF;Xc_I;Nv-;bNseT#=B_)cX_K@)hg0Eb$Gk zXKaomHMejF4q}$b^Z_&6HVOag5EYE`PS;4Q?>b+1-R3&o$ep$@(k4XU;?cV~6#Zp> z-73xSWyJSKSM0(P7*#w~$9_nrU(k5bYY=g986j)6 zsw!04m=sCE=h!gxu^axpsMJ+c9nOCB=a4?VUhY)ch^J46+n9YsN!!0i!a&AcURu(p z_?3Z`Q0AvN3mlX6ur3p&&PQ-wpZx5LY0r&@N&bt3f}QVa9$$TH`@1t!jv113YW?G< znt)lZ+VYxLvZUmb%FU3(_aQ-dDsCOiSAMJ9uTMv}P1mpepist+JpIcY*TZkp#j!%@ zy7_IvIt94@n7S9ZU>7v9Vd& zgnZFLDdA;N|BHQ6(nMEQ-=ckh_Q5}+P2YfqjNxDj!Y8n7mCDk@2Y;lGWqF77Yn=DN z@HRwmvK;{qa(~@`%sg2icyQ0)E}b+v3mjnL#Kh(&W%Rjch6tbM5>8kAr{SDNM>)6( zu%&QVgc(^h53zjx`AB%fGKG8^J{UR-xASD>0!M9tq}ia(0yn<&?JF=c$3SE^?N`?n&?G=6@5R9 z>E~N$Hu6O3S@aSK_9R8;Bj&r#;Aj40FC+u1vAi&twL61ffq~&Gqr~}+M+f71Hii1%DV8g9%Kp@}v8D@2y|N zR%>iv`#B<5I*lO>l;N2LCyagvBAOb|-kuwqes89}55s;BAXOYXdfxDNZVK=GS5@a#RpA2qwVfk_xUNxh_ryO0%|6nfaqf>> zSx6LMOqG-DHJWBVccXcz5D_pIL@eFIG-J%N2NmJ&uf2TW?xoIfo7J>pr>LQTd7R2% zQS@(&W4mrg*&(r+INF7K_WfyTk)`Idwd%tpr?$#@*}3giXAMX54CD+V>kPPX5kPFx z(S_5)3il6|;EK3&i7#SUp477FDAW0~fP)f}l(v5qHejkr)X773IJ4N9kQ{vtO5iI1?$2lQ%nGRR39-f=76y zU{!urHlv$Yn>hnpr_wS;Cdx?qw~N$Kyv-$6ldzJsGKWxzc~;j`nMUm0;$JZ~&XMPM zm%}<0GbQ{4I4)gy0vuECUN2dY5^|37ru`27>F=yP_l(w_|GPDb#me zOY$7g-NV`4YKJ1Z7Eh)58*->FFsAZzm`Sh7i$y#Y8gFER8f0-L-l9c}# zdj4a$MvYiX{h+HoE;&v$Tbea>u&`*>FucyusHLNBiefh(FdD5g=Kvbl#>ZF5R4u(@ zy!;3M(vOQvzb+-yW4GwgFUf8-N@RAtgS0I%Gq9)eLLs#OnO$3f!Sby&Onblcrho@U)7!RVJ53{jKzS)uR0`Yi9ES_o$96y1PD+QuE2Jcfnrd(zkV80CW(3g97|+Qt>>oAYhR+v+UkNzArnJ;`(yM zUHA5t8;N$^uXnwJ#M9PJnx2K)vi0Wn%lB01g|5ae3EV`%FFC{662lzX^1@yQWeLT* ze#m<6Bc8+k{Pl+{Ll?btH7mU!8hw-e5<6`>d6-GD4qBWS(#a|$D|f1?O{=GnAPcBm zdH#QVhKJMOB*$JoH=n}s!sG@zO8)1FYMU+9+@2@pe;l26JX_!Y$0?;+rAtw>MYU$t zp6RlS+G<5>6}2}ZMr~phtr2bQ8mUc;*fEL{q-G?cHi;QTKEHf_eb^z~=t;T*CV9WId0pc{lg3rytEfbPp^LsXgdYq(eqURR#X(K!0;ObvUim$Vi1j!0_Qy8c5822a3$;u&n20f1 z1%IFZi1I;Rntk=19Sgio87t%>OZjbt5l*b9>{5O;FL6Ntw=4!}IUF)IsL7CMxrJ+O zp)Q)lS7ni;0r&2&6utO26*)MmJNB}Va9(N0Q^IV5Q+bI#rK^>V>O6%nrv~gc|8&Uf z1ZdB_(RV4$%6ZzB=z1pm!yEw~VvRvxwQzjX<4 zgAm~YlB60_oTHSSrr~#<)RtGdpZ&{n(Wd)GV~bk?a5bj0C~2R2Tmk9W_$0_Ov+U@q z$rjq%yG+A&qT%Ogzgk`u%GbkOcs}!S`(~R`b{vjvf2=I`>6|P^=>N8??p1Y@6nR_fl4; zcMkWw1A|2utgVLwwFM`oBrM7~=p(*AzZ!q(k?Avr?4nTLa_jNnP+!%>Y1CI|cuRV5 z_FJ8Zr^v$3UUz89pOi`??KiXLIqx-Dh z$`tKthQ5&4D+)Ym)(-lz;Q!iR{ozG{47xt5Gf7u|Nl!FbqL||v`rr6^sDmH=JKd%m zyX`bXX4#06)cNb;`8nSxp>+MzfC!)a$@S5T5id`+{36GKhITepTUFL-6vz1k_dRdh z4pnSjbMwqe{FC(PhTUn7{&4*hq)>9+`=K#<0eT1g<}ZS8?myjZIiJp42`f=~cPp1! zKaV+!<*=GL7b`29Hp^p#jm(9ZJLxHM44!G6?#oR#)aTPfSiwI@kgW+%&2La(dEelBTCB~044MsIu zX))Zj_A%Dp8QRM82l z6}@=5#?Ra;XipcNzb2Tq7Ky4+;2bpxHI7J|bXON1lQSGeX^@+<(nb;5d6;&g2wZcR28QCP=w_3`UVK=^W zrlz88NL|8QLHrH@%XYL>AuR{DKO1?7OtqPd+7BN^(0AS;abaVV&Yyz3JAq6e-pm1A z0fZc~bghlObz82DW}nh{hDVL<{hw~;Iq0;$vHfm$p~iZZ*z41?&1CLif|cOQb78Vm z4kOJdQ5xGvM;Gz5={D^jza5}kj>DI2Io<;KSXaX+pTy68`MH^hj=Dgqf6K9Dctw_- zh@F>(>n-cL6v2NdI#tz*#oK!>+9mLS{n`uO1eTx$FDj$$sn?ZV-vI_6rGS2AerTw3 z@?n<>9{TlYXj}yX$fKr%82La?IL`swkwnF=!QWKQFz6b4dG|h9TydN}*&+H!A(EON z!(%SJYft^VhBR_W=IoRY(hlYeeE_(mrE!IamC8u7DV+Usu^OA9`|31{GS;@f69Bh4 zYu>Q5lCPUw7~SK|-YBW2I3IpZM^k~XJQ38LoEr~mH|{{5jvtT#D!#x`?m~hOW6T&R z^)ISlZ2$~`Ukaq$=j#oo!B3>hQmGls_#GLKeT2Q90rYtueg+x_Sj*`lNF!fILh_fH z-r72^&*}p`f`wkX|bXw@D7GdofEH#PWr1UK0biCrN!u_72PG3zBeYl;QjU%wPuUtyTjDqyq!X*RwByxBe?W1tN+oM zV?VGkXzxB@{m$k+bijb#y;W!4P!zCtcWL*;)7=cNyg8Q)4+cNgAC(6OQVlG^CN7Nq z)?DzYCZ)qoW#2A3NK1)WJ5O0!2oZfS7JAO-3mg_h5WEWq>eCsw%Lt}QRI5BvI+4Z5 zz!uaY$GyC!{7hJwr&0n>VUfD{#&w~&jUaHcDBL2UaUZ)v9IAe0A{oV0rSfyjGXGtt zcKL}P`Ra`5C#+|kz^zV1vnt;{MCVNdQ5xB!RzyJ6PVb+!KPN-oJi%wY3jL2imUnGM zuzuuTQ=o#e3O9g5%+#Tn?@)O$;iH)PKE59LEex9kOQ;`Oyw@HToeWiC-astl4CV@k zZi479^1pj@=iwR$)LM!8R<-FT-r38(iGbSLc@aa)N<}@H>6vW!<}TU;{l}$EGEh%^ z6P|iZDFIfTZAg z-2ORLcp1HoX6nW^6ehCMgo_i|SZfvt%F%Bp!QDOJCgV%S*tqR!hAUioJ&2pd&lYG} zb8zn~gyL!Jc0D3ij41sBO|Yxl4b7je)*H5Z*Pn}F16L_WjkGJ725>eaQ?neeOg2mjHCQCK#{qgbw7oFoX1s}(_`b6Zv{avY{5 z<;P}nJwAKvxEJPy*0oydF6uQMXIO5mAEGs;x6d~&DuX{UgL)Yi_L_yE2B_6#+QV;J zO4t_aZhd8C4Mx|h0{x=uGM-!Gkqjjl`Nf*rTA-L1|} z`1ekSf};7xGf-|A%+a|_{Q@3Gv)U~n%)?|n{xM87G(E!GfECr`i(HE`7=!HR&Nb=s-Ss7PDQ1NlF2rqvKcv#nR%=A26!WE-paiQaU$|t zOF&o=U|XhI57F#o4RP(H8R5+@tWX>?IUdvGUsDZ+VMBljUK$ zS?C2L;7EuN>Oa7uOw<9B#HiGQ08?e~hwLOMGk{s`)G?9q7X62LP;6w6A zmr!3*Gq_t*__Xl2nCM^!VdiBcxp+KRROB^?GUxrqj4%7unEpOP$MkWfmG01CQqzd8 zYMb(w-J3#2X5pz;gCp?l7R<{s6BwSebng|UwU4Jw9?3u3A>9ZAX zh@x$gy<(S?nysj?{oNH{%(oA}4g^Qt9K6T4`7Q}R$x+6Dzud{?ucle?OIe*OKL z=2TUU&>x9CnF_%Sj0rp;@O$rda1~UUF~qB)2RH;K=${e!yq_Og~TdBu-5-90ld*Wcs<){6{7` z7ZIh#;FeviUHrk!L%5cTyH-^)tk?>?6b9(ZvGhn{?xe~MmnFA%&MyVE;TCK1@c+>y zgcPhrgJ`QoT+jUOP6}aC+MV44{u!6|3;k(rp7aCjwK2}tXMS{m zB}wAA4Cq19M7c7qjRUeZ(LTr%dmQ`Tv298w^qsQ{Afe>>fz`%|QfYPR#@W4(qlcnl z;a4p$Vrsx88`}+hv_ZQ14J~aAlPUnLIIG@7QCq8D)Y3H`-eHV>)h+d(q4LkR|Kdn9XeQcJW^VByWxz)(rP|tF6RGb2o8{PWzN#Ij{ z@TTH(nbs0EgDhE|-8~7b&WhQ}hrx*6)EERS*c-V^6^GZGww~9M}qTHk=a^K%^8o_ zqq>*9*Ssy#t8bN7P_m z*Sk8X%{=kCv>wE5!Xc)*L6vuoV@}&CkP_hLoix^F<9ue`cE}MCykjqbl>hYcv)pnJq1) ze1iMR)n|<5oO{P9o!sSOzcoF(md_&(ySX!GI%O`3gi{Sk2}OUc;yqR-4|yJreP9rZ zx3$?k$q{$)D%Um(g3ga7aUE;XywQ?fb>?gDZV?_{dnA~3Vw7BHJJC5a+qN5s1q%5s z779L`oY%+zi#CRN`iHR|4qW7uZ!=OMT6@cky(1RwdEiSRW)fhT^haV5L4c5z2>-I~ z&lS^lTA2r|Uz5H$#L!Vitw!j3k9)#ShuDTe;>622DV?{-kBFTGt6Y*CAW2dfF7zEu z-(!|GERTSZ7M_z|lWz`GY)$_8P5yTyy3T(0_)s+r$u|`yy7pmI;kl5fzbMr<0HbHt z?B-S|Ys(@lEI;Gk?B9kiZ4POsO6OM6T2-9+!=CS*Q9pWHY1f10cdnnmAj@53g)@`J z@n!w)8dkuoq!&ZXO75BSDWU!0_op1>D7*yEn4R6L>VY`P8^G|>WW-f09oL2*tN-=hT0GhA#Y73|HjW(_%!gf;3W z?MB_Cqpc~kzB4O4b6_kG-kltlYvl-D!3L`XYwTOpNzp-)mREbx! z|Gea$SagH0r1t~jRn*ICiYmwN7FGYXlI)icze4a8l_U$Ch13To>v4|Uj{Zyqxfp5q zJXa2aZJ>@BNP7fb9IPuvVA&}hTg}*ONxfC_!!yYgwY#nlc#I8*W;su{(I9&}c=AV( zX>m~QJ}z|pwh*CZ%CB1IOgBu=a==FPO*Rt78y}19^^i@~I7eEVV-I8t z?VMv`UQa^VWX+jOElnM-x*WhwtX3*GHDq0U4zv}TJqIfbW1+0A{#i1}<}5BBZTH|{ zUalx^q~QL*U*X*>{)p$p{}3;zN4Ok7GkYRpIUn5cF9)wY+bC|Z3{KTA!1ATq-e_3# z=51a!Yx8x)>)l1JY7ldJlPW6OZAc+fCc+8$@kNHrISW(R! zykC|JLzY2~KkrP7?a=n9ySGIDQSFO!!A7npAo(75apzu~JQ?|w<&|j^l~|t99yZ_V zGh15iR8_{#lWWj=swZaZZ}wQ<$aNRxKDPjOMVU{?%ypbKOi)Uc3YH>aF4PyMB3kj+ zjj9EW%`7EFKSLi@WN+!r9HzVAL@_CK*Ff@B-EHT4D4}0l*h)!1MK$V=giBm8Xgj-F(9B{jZ%;X2wGH*KSIoix-YDmYPzZ+^Ben0CyDwvW`;hgqS* zYRVWhQ+p4N@Kja!MaYxqT`FtD!?R=x?_oh*&<4^Lap6nx)*S;Ir;mZTi9=@uw_5d~ zS;;N+1B|0@Z!6<7??L78m9J{SAm}Qx6(Nz2x&l2_4>4{ zIKb+ie?YQxNF^4J3k&eZp=lfn|Dypei{M$R{W@UvlZ&!eZJx~qrAEn_jb{oS{s_^) zc|D%2_On`K+1f6E7JUlMx|4r_dAGFzjZ@Wp?aw;^WdRqifXmjlM)d_26vn7JhqJR| zd@@UioBD90o2NwL_&=)Q#?A(l+`P_-&c@u>%%Z!yxT9M&&+mby?OJs%l^WcmB6YF- z_Ae$TZ5*l4 zKcZfBuV*}#BA{z97kHdJ(a3j=^ngcg&8eAy$ByEf3aG8Afe#e#hCTHBH42DP<6V+U z3@xN)ij{W1Ov0ii`@#HtwS_(N2A6_f8k1IWR!{0NZ>>KpF*JR~qIDq}jctf{`QPQOzma^VQ zMWdExMKRHa)59YLl`aSo6xKLIS$d;wi@FaNMv!F*(Y-=?HK~rw@af44?MBfJ?gefC zz~tF7v2qaY_)11j4rwfdpK1)ufQh4Cer5xxQ}QqlpMm8Qm0T}cb*8^Cx>_Fvsxb% z4uY?pLzijCjn_l)5DiB95Td^0*m8)oA}<#1Tuy&UIm)}xP~BJfU(@7SS?7s<-;i$J zqLp$nYT~>J-qh^bhB0sZD77p_e|wzYZY_(l>pR85C4Lh0ueK4)x_;K@;3}6s@@P=E z9GM;zoz~_daDUL6c6F#z8v3T%qy7;d1v3Dx9I2i|%7m+5Ekq+Z$9aNxl9MCn$=;?4 z73%9H;5fGrIVLc-#Y4-tZ{5B1luM_wE6pcoFm8LHOK0-Vu(d+uh0=A_f$V$g4F}dQ zR21!%8oJG1xh=jl>U(Xx;&Ycxxu@b|bnUaXsU7!R)7YgYCZ{hCG`Zhs?CT0=@m?`W zmTsZ7NTa*nDqN=Kc>W?APJ-V@j@(Vh>b~Z_rGgTxY8Bj9o79&chBE$kTlb86#Mgi3 z`R+>Rmu1lKtx13GgNSR7wjlY@K-mbL;8;c1jA{;~4O_`@!C9Lme8jeMRHFj>VI1ed z;@Mu4cLxn7O%W^p_S6P)$K&ifhoUK9v5Xo^C^CC;SMr zGN)wnxeA9esJGSM@jxtJjBy`rM3eCOtl*7P(T3ExgaMLls%6emFv`o|Y=RmF8j49ZjcaciAXLnlygGO{{1rB5DVZg)S!xDS}7<2vp)qs9qgGL3~ zhfkK1hF)`47*le#G0x|H_&GBiG&CEq6_Dxj@Gwlb?3#{*lH1}L@X#Q1arW>2I34K( z58TG!cW&bfdw|?Q_1I>|{1ns(bYWI`Pyj4|2!%O8@7q%9= zrs1mn$BfJ>O*Yk0R1djIE0XQMwedf=&e+xYlUj~js!DpuoY==g>^E*_+|lIFe`aBv z4NDn)%KT9N)LFH)s6?xIq+VyTeo)r^)g-#5LC$HGTp*UZySUA&;iU%wc6xfxJw-21&+WXmN+I0`|AB==arw_0^=g|nUgJAx-pHo@Q-FjeG07*DCv6=jk$ZdO{ zWK#(&*-KHoMB20(eTju7%KtjoFDkPX5I>1*H&+3R*-8>JXO{+X_iN_d=0MK+;N5u& z(*^Yit#R=cu>8aJ-d8n_%|JCq67u^-v@sFUCCO!L$;$O1Anmj6Vqh=(%m_mPk+C~% zxEt7)%lu?-SXcsVkhm6|2W z5-ia0j_eZl(7!UKVO7e&!gP349<;)XD5Of6f?=#+63+#w@o3ZcsBVMg?tXg{_8-ml zBFJk3?ST3I$jwxgs`u7wPUT3CfPA|n4nE)krdqTB$w*HdvxhVSKUJ4uUdv48K7jb9 zG5+z zTZL~z4vtC|6qYZ1$p>AViYh1T!SC(Gme#8HP zoGK`+%#0RqH&2{y{-CUesdDm_G*b%k9iLR6(-i_YP6O9?7*+42`8)}SB3^EXt|deC zeKl!r_=Na#a-66|bFQfs9~S-fo&Rf}z6I$$x|Fq$mo;y0wFq3!v67#;D75hdz_!i~ zSw0c;pHaT~lcmq_nfg>$E~*o7lrItptCnw79b;SuoXrAIiZZPOnuxXe`Ak%PC?qS- z@+5o{;nWJy*g@#s-B3QHAZiNZTlUh?(2(s|5mBg1BAuM66uy?7RptZ!LW?t%u)=Hq~>(g*6$8SfJhVAo{Lp6zuYJdYPQ}~3X zGg;6q;8;nsZ|B}`_0p{vy$(ct)pr`?H&XiYmHpz-t1e2FRXO)w7x#g76jvj`cMruG zfh1Mj#mjD}$gj3ZOVM=4au@ig_gpDzJ2d-FS-1U!Eaf%WpA5;cXZxs!x{Ljip=N_o zNrV6*@*Pq^mGOo4y24g6#CQK>N9bHOC=d^eoBQ|I(gkqiFiG3ExAT5FsN4fjk2q%O zoDfhQ$WmsI%Xyu#@FB-YcKU~E1G-5b$kR`j7h9t<#jZ+v4h0+Pm7CV->4;*>OjYe4 zHU6G1uD0(Va7-&OsDAUwKB3KhKtyeF2xOpV(-3mBsLYoYU-;OOkr~kLHLR(^u>O1q zX_y|JZ_bWOjp@8fbol7cb5~Rsz43EHlqdFk8^@wpT3MF=NgO%+r2_Irho*hm27E1U z6+u8GHf)Uw_dz+~?viFG*p$$3N!lLiEGKP4{NEwpYeVk7j5+?Ef@ubKQmb?_BT?nT zXbw){UwE~a4d8EHwA4^-)_vXE@jdT<9a#%K()U~WY-zg>*RzoykxV*Ae_YGvg*+$} zcYTuQwv_w>_B#VUvm>*ZF``{F> z+NeMSyMvUUp>r9RB6*aeKM`v71xH$S}1-wV)b2#)RCv z(miOOO^2EX{7!`#YtiD-FmyS-(-+mEN*oQ~l_8kNtK6)V%Y#{T)N5JKEE)$OW-a5sUD%s=Arku_RwUmQ`?IIxYU1H$ zkB(tRKx1ylZbP$vlXD_g#51GV+VRfkAG-yU<~GwOhvYB>7SX2}(T(j0S#Dr9y3S|# z6|&AzP`iQ7$joFC6w2T29d>Wpf7&;}(Lwxs_})iqKguLJ?Wy*fs*f~^pB8vUL4lun zE!jEQM??P^?^iM_k6I$h1+VQNs`=;WadK{FA=9~79diezkav3IZg*(q^F|?|ByGkV zDdkTCoyzfbj|QG1vG0a!DD^s`uNDg%lS72dWV3hAKZJZyG2PKAJ$p2KHm~kHx5xwC z3w7E4IBOI%#JMTeOGD>jIN&3N5?ryDz4>{iu0n;k3})>trm4U$Z(BK_!T(I?GxvxYoYh?P4*stp_Dna?mGxeHiTqPS0A~!xT&H^1v?v!7nePT zK4jNy0JGdex7*SFGc&fUQfD?hGRLop_ovB49NG_wTgAix%-A;j%s;6 z3(0zABWv9)DV43?+8sH@M_5=Fxx$kV*y#_26*jpPRJ*q31Hbcg`>3?x8S*9D+5LTJ z4`eF0c(k9$-@KW=T|+ytmow7-R&XV9b?qBh*cdPD2!vr0FH$^b5C8e|jir@`Q;ByY5Q42*}D z;~m?HmC2Eml%j9ivGQxXE_UvIu{;w~to*;c?CLQ#mPO*sG*?Lj+ zNxhp!u*tno`6zRfHPOSytXzFn544TxOyXJs1DDAy8X8b5CkM?YdA=QO zlyXEc2mdYFF619*$ZeB@jL@?S@VKjz1G@eDos3mWQOl8$BMsgPzsV)Y$;6@AY29h} z%JCWkP2AAZcs|6TtRLz{MRBWYtM$&r3zurq?Jl3Friva7sX_B!mrp)L-ulX`aizR1 zS2KNhAU?j#SGg_5^v&BZ$#f7I!_Q56n328xg@DevV_kD+=cc9u*RzeS!`Rg>!Gpgc z-WblcEmTu5QUKS%b*?kD&{epR{j>klGUxK;TrG=yp5;~C;=<>3vR~ws9fM+5H(sz1 zc2t5vqo}K6P#A$iC@R2miZAk~@S**uZaflAv-7ra+cl-Sbr?Kk6C+-5j0y{zcZVxT zGHvm?UYFQN(uubm8ajo_UWYGaXfLuqlu%oCKn{O9{-JW_&VyE^<=B0WSG{tyuEpzy zvw5l~Y?x$N_mIOw=(fPX6LA<@Gn=*7Ej!Mskl^$PHio?yld^(T2?P9@e0m*DDs@p` zA>B*+zAlKEnPC{Gs_q`2*x=SJd^P(YdO4$U7v@0D-g79(Y#C}RTd%49soglYJ7aS+ zYcZ{Lyd0%UOuMpn#FwogpeQ`6cA5Na}#8WhbU%#15?(lIL-}qRb-kopm$a{;s8t$7ej*miI@LB)PsN1vuCiK|V%%k9zXIeV?vz zFktu+!0eC3VC)xV(M43MR`>dKC zNR?71Ej`-OXnGb%u$O3EV)XE04n2)ee|?q_AV4J z{zBlu4kVWW(KPFqwVt-7mJ>&?`_H)MteH8X5#Gu$Spa_%q$8DXirX%EWsMGI z?SE8WK*PUcM+cSu%lq|6?8;U;dXmZ%1&lo(=cO!yuYO7kqT@ch@J4TKotZ}!PoHd) z|D#bmKb$%ht^>;(!L&WC1)9@N4Sks zO&E>~wD%s4ltg`fx^S9f?4Virf_*ecAg!B8IMbZ$9q!cLj57b!_*|vS=X&4PJ{|hu zBku@px={hH&-gOJZoc1+$gCg`V}09SP2-A7Q#`8qtmVZcy6>2&41@2SA{L=LN^?Lx z)9j_hW4EfD7i{x-ssXkk8`X!FP3?wCe1xotLLyP>U@ulm;~UskG6^7!c?F{;=jVQ4lt+6~+_ZzX}xEkG7C6bW(& zDHW$@xf}e^4{^(lmzAo}uDctjNr1&P>W+%^OwLK%V(83X!dp(+Xlxwm>Fne5=F@~n zCFSX}jn}0}6hYsiu@LT)W7u5aGpb{={BaCv5!+E>kD>^ZdaN8pn=cs6XC!1h6eAQ* zZF`NI{O!BV=xMIhuw$KL55b%yya8beelp|;cKoS(+XXE(Z!No;Rb>0>hk4X8$DG1L z<|Iz>n7OSet`m^Bq??G0%l?6h-$u9cqXRY5JA3|)Veqz%*0Uwao4S|dV9Bu2?O#)C zmM}q+;_sJ(efp0K^{S!A+bv(O>iFib@jTyDRWn}TZJ#XWSk)5XRKV7wc%cQkB?783f1E{#T2Dl^%H zkMNzsUJ07hFJFM@BPwnzEJr8Yi1JYw92bDB1Ud80wG%e1Jc5N$l!6V(qn=&*7k{tm<3h9v`-VGk-I9VRhkY{#=wmb8-0!H#FeBaZ_*GWcy0faa!Xm5BW>}G_T2fR#?j@xe8 zUZL_aK^bc?NS$dCy?ZRpa6ET(K4|V62hz6nh{g=DIUrTSZW&dtBkw!6RT)_scv4Mcz_=~aXoyjjX;ZV>4EzajwP=u+VWKwTn@nyI z_qoRui!Z8F0a;^&{b(~yRB*R!^9Ws1#s0$#kDCmIKXSkv(tS}ino$UqnQH@gE-Ih7 z9s`u4@(c4J3$*EI;oY+k{CA{c`QVtzU4eo=sM7JN?*cC)UF6i&i@T{c|xX_A33!ZuTZiig`L+GsLjl^G<~}$jbAF-vFIzDKC;3#i51)$)QpEE|ut?<>Zl<_Ae*E60@nK=F z!mOw(=4tck=8i*RTq1|oB2v81rc!yP_+kbvix!YA_^Y`%EU$hIs zDzyTbnkO`+p7Fl_UOnG-us-Tq3t%+(eYguYWc<|59lb)xiJ6Mf*N7~kjZCJw{OdH% z=-Kg_piwF_$@I!Rw(vUS6Syx*=n>p4R$hnQGKR}|M9Vn-ABpi~Qe8`>p9iNU#M!ibNx?~ZL zt+Rc=_&U@c)+C*HVG!5b$!)kF_A_oA4Eg;-IYJ`t$9FF8 zW=&L%Kn8eq@kKIi@)<;Jck@3QQxR3$r|g~v3kY%l@`m%K$zx&4gGP2oZfK<^<;VNB zz!HxR%SF(CG>>$PZZW4rX}I2M>XZGC4>?YX7m8Ecy-`>D{PEwY%21whwzH9otWuFw zNnMo5%Eh9@kitsD)t-=Ldju|!{hF@d`^$}WYo+3Lz&#(Dc-pQZe9NZ(V=807eU3D0 z-1#}TF{2X_;vOn$xwt!+lQ;wj6w1y6-YGb=DOaerMSG5DgzN9T8$$}0UTO-(Hz^1! z>|RlUq*|_rBtX#dYX1N%l zF?jR)sW^h_Gl;75vGOpSy-vgFH4O)x($V9uE%#Y8p6x_OG@dOz{F2OQUubTp5wzhaUDsmtpgp4&A?cL;&KdJln8_mi}x+ZIWX3$BO1UG>++`@^wn24>!lh{ z*t%b4QkMPsEns1bWWUYF!xq-Ey2C!n<_#HMhB1x$lDMti4x<3TbEH#CVz4dWJSv7e zTq4;~j2QNdqu_h+=ud8jW%{paDsdtTS_eYJCEcx zn~`!s-&?Bxm_Dyj$$W#Kke%Sk?EUjqx{Tq#ce5wZvU5{Xjm^uxIn7VFFOAu8Wz=E> z@I?lngr2#n^7p3$Pwwg3C@C<%o|Q_PZDP&O-5>vy(?pS?>OCSrE=0ZRzCgHV?|2N9 zmnx$3fe1!=%6>Sc|J=(z%$S{y9H8KvOA5C8jNj-psL!_HHqW8qL~CVnz#}d_6ML zIEt@JX4lnKh~9J>mo2`N@l+}kQ_9q}SNQsPXlu+x$F5=vVnCPg&%H*Iyq1aa{N6g5 zl$10(urP#qRULX_MlE3(sB52_# z$~A*4w(b(Go~!P}B{;pc(wo`!YfBKgmjcNGi@18tTMnnnr#q{DZPl8b1OFYr6+~r? zaW~8Z6Zo!!tn6{p{%&kldTbkoI&fWYfs&{MHVKew%!nLaZkUb`4nlBhC+Qrqfh;ujmDo*PJT8)HW4HB`?xI5A78bC3h?)H>jCs}baWX( z*D!)>{NC9}kEcO3aahcbIw9#e3AIg@A}T3M#sY4#-Nookdq}(p3OU|<{m6#PrtL!p zeQQ=Em^CQY;$@Cw?NrU~jG{de$VU>!NhYW~uL@GukHzZ}?#6+SS=mVcraYPukeAo2 z-adPqzT-57`+QBD7kHR(yr2he){7p2?*`=>mEHT|5*jqL->)7zw4RY4m@3k7Y}L@z zDbtD><WoDd0QhPB$7M{e`P3`>momhaU!|(&Pjf1sC4IgR;SCOhM^aEByFShj5RRS zyE$xhD&o@QpvAJFcl>gSKzCyuX6xWY*{_rDsa^Z zG+J%sWj*ffk>mtlLIeI3QkcT<@9>zvjK^+>V9+`2dXTOK$+uj}eVh&1i@EEz#9p8H z!hrQ6>0R+K?fiK~k$a0MFyQoE9-{*1X&b9Anu?GXF0+jzUZY%5Cth&_*6$6Z#`r8S zw2}gewj=$ye#$2thpY+V_nPB_UFL+)PB{|b*q8JiKc3tv z|3xlt+5Mi?`eEPK`&4)64*v%hB+s5X7bn_A)*D+nca>hV##))QDuO-n&bSx#?N)Lzw%z z@(?9`COPBcsZGhOH%Db$?sd64PxPebs!IKC+P$J^d_U`5)+~*>^r@>{Byi$nyLB0S zBm6I*AvGEC0g>wU5|_flcN>sEbu;&;(=H;V_RVGR{~_OY@s$6{K^Tu|P^dOPS8#N1 zaF>2IxpJ}eV+=8tlN8Qv6Fv@XOzk&_3LLQOq$ed&Ra&vXbQK;8{mUzMV~^{BN77>l zDoZTaPbQR7>V)>;u`JT4xa19-*O7=#>yS-Db-;3~FY=x*s=v)Cf9Q^M^i;+Ac) zF<{u3>3ZT5Fb(i_Jv_sRAbV=i? zXY%%kf3ZP}J1}tx`|L5wn9KH_9driwp_q~devg^w>p?Uee_FatbO_OpCMM~kgm@ni zDzyHisU^FVBCn|j;|!RrY&dU)saX^tn{H;>66~fTgeT%2jYs_io11 zGf1I+W5>6kICDa2eK9Gs*Rta{2FG)WGH)^=+aa>CeIzbv*ywe95@2q~=9euuC~{3x z%t^}$qGfC1nM?%sFsJr2m;4-ZTzDB3UGdr3s=j zolT&9m)iY*`PaV)vwU>YOUQ_Qmp!^vVCmzPRH4s8jQP;7tZOR!VQlmF#p{c9Dt;}J zP~dNn0=O)L&clA5916wr(a&lM9*~uDgK2Z#PW(`JaU$HQ8??kNc;xlylibgkG*N)d z?S|#0-)mf@kq;VlecpeHV%)9vzI3B2?Paif_gN`C?kD}5Jc{+K5QZjbBHHa ze#i0rq24m5XSfJi3H6u6XxMrVOi)qvfC-cN1JP)ju%8n&J|Lc8-zShoZKppHHXr{9 z>u1kdfFDvV%XS5aYWE4Sz9TWYz-$u;*P}5h)`ihW#o4?CI{OW-qurXDe<7Y2$;I)L zAzw<$0EjiysYUYWBytBR(vR{#V1{R$5M+zdjh`P^o+}KP`&S5^XSd=*d>TN?%LW6i zywqF>yBZhSgJe@tlZnT~+6tpo-eTwD7C!ElHC!xG5-Pjmx^C(G#`WNhwG2a$BRdv8i28qcV=H7tBDhA8-{u| zDQswW*kNAj{mVG3-k&`Pdqk5Y1*qgjg+;4`VGZa>3^V6uXn(*B7d2i2C9_n+p^eCx z;4k{uj|w-)@)3&FP3Z6BxWaZ%H{tC&LqYH~fPB;H7)oT^?md4=LLT#yP|_d5?~=N4 zNd*GWo2DeDt3cPzHP*cg9?r}xVY{PLg>hLiDTr9TDRuE9@c?93bFEY?C3yaf^~U03 zvDe}uKFO{~gYe9Z_NG9;m73hn{2|fdHSAxwS8lRUctD9#*u9L^Iv~!#≫yBXx7+ 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¬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

YsNlxNPrIcAw^-Y9mGPqSl44LOcJ$V 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

y(Z}%Bu?bu7Unk{))WXfJvvm-gC{oeJd$caX5IU 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 SMf?l-B;87+p2Yn-_WuBXK8u|I literal 0 HcmV?d00001 diff --git a/_site/img/hero.jpg b/_site/img/hero.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ef0a19ead25ed3da52b6d46236712c68145edd GIT binary patch literal 744947 zcmdS9c|278-#>mVB`R7}6h5~+9VRPWgTRlv6M=pQj{%Oo1`~5ub@8k2w&*O1w&N;91e!uqRdCv0Z~=Cq#fX@s}8n*Lt+X*C2~M_+C4nKNh9bP(D)r{Vg0 zb-lE8!Co5$e=Vo-`*NPB|F)?*%FidrBRnF^8_;j)^gJCL)_MN;O4a)UJEgWK9T!5v zlY|W6NrLqSLV^N6&&ny)?41z)?8B!uFAhCv_|pQMRTn~X7UHUz5G1n zoxH;${XD%<@|uU_tB^YU+YR%LSb71*cj+Pc>cO0sp+^#=mYU z1K-Nua`ncIzqWLWMumF^%Im@5+FF{s;L1N4+9?0)?(e)D3JV6Dp!|Y-{$vY&9KLa- z$WLhn1%8PwBp@QR4-$UrnOfI2NetS&2AaL`AvN>U&fK-qvmLR$SI%><1*T{mPnx=M zU%er;RI^h`IkRkAsn`+9@POpY&NDX*tuD7hg-HS~@FamFaB;wktb~BTvaqm_;L3V9 zjDM~qECt`Za+T^zffXx6goIa$fnUM`$zyJU0`N6_f{pwK1mO@|mVYKLyjfWCT5!95 z-1fW~OX|g2>(HC=XReL>_u46f@A$RXNHvj^t)!q5J(i-3Ue zDYzSa=O5>Aft0Pj;o%_$8X9~rR15Y*g{X%F_^JB<(`vwV{-hI3QTavp=Ux5-8i9NZ zt7(R)`FVP%`Dm+qhK0ko@VS*2UI!NkV*DwTfB;;2rRX0b3JL$^mXH`+`(L+&g?Fw| zglp=1YU_AutL@d+KBKnRLuaqrX?@MTYPxVQFKxsb9Zhdf@4q^!kRJp;Bd7^wUUkvj zE10MXEf$C!HM?!(ZR(`GA@9LlubOoV^YfX?hs>ETZ#hQW8ePNhyxDLr3_Mcz^w8^1 zJ2mvG!_A%UB1;C&TH5?(eNs|B?P#}iCGKAP@>!p4`Y+zSJ@CeApKWTn;Bmo05ItYP z;rT0q%-F@-ts=J{>%rXJvwW4iSyb+a$zPd+oBy*r|1E-GKdlTRX!Bnq$T2uLT>f7% zqYKxCBeb-%^|bUr%xJ^^a{8YL(@6Nbe?`U$)kI-vhtO$AxLRSPIj zzInWI`Ih=8H;aAR2MbnPo>B_p8L3Jqypmk;n@PTTGzgnjAZ&#HXHWWDJPEA)zsJ*t zKjUc?d?g4gK>-Nv^@n$Zs5k~c0^jq;Ib1MB{vW+P3|Qk2FaLLA=x3<^3eH^D&zGId zX)d1 z>D`CAw4?Y_+6LcX6MLgb&WY1scxp%EKNR_Z8sdx!*ShByjtX}U4)6{_CEoLl^f-H5 zWEh?#(!Wv^bx(CIHujul>tID({cKkNEF-zU4B_pn5;R@xYRPe@RXS?#6>8fq$IT9psFC?T5xS`EgfAK_)4%> zf`FKyD0DY6;+tp2m{CE}ihCe(--E;c_vqayA#BX0MCzc67aGefaI0N@C?5V>@H+k* z!K)6O=V$p-`fKo-2ZwpfJNpHCt2u>x1cva7&R^=EE?ggu(A3sJ=s!xhocar>|g%d zO7Cos_oJ-z|6m#O1gcXDM|u2PWo$D)mniXT^BTUR{Houp{^~S;lq1gIZ!IoL@}XpB z;XB_`B}EtT1wo;AYbGbH&*VrMyD+|=E*o4~+vS%|zTNkDwd8N09CdB(>s64v^tskI zZp|})rBly4cf{^)kGw@h4!~DD(@Z<_ZFR(AL#JRYZ(3;Zpw|cB$sqm&kNm1d7Ep3f z*hax7ucCY}?MQZpXqDI8Upf0v)gqn0)uR7I%={0wK!- z%-h=VNPE0_`yK`RWr2~w2Fw&9ped|O>3~>a;u1WO_3xLWjX%BPzqrQ#FUrq9#@v4| zKW5Dvd$m1CjGzGu7boOFkbvo4M}M~KU~GYd-YH3_ z8(ivyCw{-T4{rKzRIXo>o6yFMKc_@{bEiY{j^3z{;2d1?&I3gy6FUF8x*YLe|hv-M4h| zCIgY*?tFSk^Valxn3BJCc6&F9dv46npiq)(gaEq7-qd+eL3+h4Tz7i^vFhB+u5`_q z?l7O}52G(PWse5U7bFQ@0_prbI1<3I@>i2`NQ@^S<&pq1-z!BdZakZciE@u@kT`4l{o#Nn-8qw zuAmwO1Vir6_pBpsDtTmXFTPR`ZXmUKc(>ii$jjLMgKsPaD0yO9iM`ri@Z-(Y#YoDx zqYa5l9JBDau9wd?^t`FkuQBxu@$fpf55P$OkAGfZ9W66x{+KD0^}_wp!wGffi9m&$ zeRKA3%kWPXl>#zfvMzKKkiOhy%FXCBniFGcjM{j%j4Rrd3`XBN2ZGlUC0Ib;GF9;Rx5#;G@{acix&S`|Mho+Xd z+8Ow1FSWg1+WKlUitvhW}i{-N!q~JIo_IILzHI=uGf^uON>= z@2DMrG~9fQ>t~a1^#_@}t>5V|kFaQ;NbfL|UvLmgUsrFh9zsV`&*0BrVV+^$9^u|z z?j9(VcUU-|D(SvwMA+G=-6-#~XB7DIoiXOaE9(EE_=(S`dwBjN2cmiTdZ2ud$@}hb zP;Eusloeh5quzz}~+zX|h?y#32m;7I`|K6CeceqBr|JoEdnvp=o;%O3)~yiuNEej$7lN6DN2 z?j-W3qyIoKe>s_7q_@18wR)(RpO0U-$62S~h%irY=jagcD9b;fyhwGhil=&Tn2$z~ z_c@ejFj!gR7d`4HeK?@k2oLk{3-b0dJL|)r5q$&wJb!|ue=ryDlQ{tJ0bl(aZz^UX zA!q%(z2yA@L%hM}faB8u2X=}M3iq}CP5vBk?yx|Quz>#{kITJ~`A=Y;56=H@|M-ji zZ=e11x#fCj{VE}7#VH|y9gyI90ipE*%WokVu=$GLY5s5=0YM?*6)QzniHfZT1QqKb zfS3pg3Ja}RAuJ52RhE+cnKrZglVv*%2zKm3aN$DusQ|8a6q0Oet!g4oeah z+q^|edaKe-WtCmKbwF-G=o^^-W?^Zy-`d8>`S6jW$Bw&rdU>Dm@%8gZg-1l5i;9j( zK7S$Q;-$-}H!^SD%F4cdC+B`)QSk#@N$JDqFUl(_tEykVdeiu}shQaF?tLe@>r*%7 z^Ov5XVd}`}H`*9|e0pYfjyb=;T4eL(5`cvM6#aL}{)=4efn0(B<`x#=%OxOq4je-3 zg;#9XT)Dx_LBu0;;|{IFRg(Lz-+R^|s-W#Swdr(NhuCICogt-ZzGy!s`}YJ(`d>-* zr(pk*s|Q*mBmj&jv>rl2Jg)P`Bx{-Yf%=Hae5AI05sh3$#@a1I-B}4@;u0d9;Zzk! zNXEfJ65~$c2n5gkz|Xp8Fkhia!S=Ju5QROQNMiZSHgIA?48+`LdFWf&W#iqiR%Sd3 z$maQc4iD5?I$Sez$Y{WuJW>3*dgl6_O(Qe+<1e)(-i4kDU+WAkDUR&1R_hIF+2&w( z@Qa0B?-!*xfm^L!uemfM z%_zTDyLIm=Uv|7DoKw5MdADQeiSn$nx!OD5!yT-Kc=2rXoyRe}n29QTR`6T;x-@2k zEP=E*$HosWVwlrbi_4I)?*l=Zd7>K+dy%yaF|&YPIhft1#_!lm@yK_RmPprg^kxI5 z@iK&Uae-_z9GES%L@u&eO<6>i%gd!zg&0Jz9W!Qm_U`x?NTo>jB8J4AC-LpHPhhTP zZd{+!qyhFp(ij$yWT#N12qQ`2n}pr{JPR0wc}jd4qA`~t28NwuI*!4~<-KHYOq)$l z$|Efzxxx6wF~{dNt!%D&m+cxF!4@zv+kFimhI-d9W;!SA`9Ql3l^!D&A=y-wHK3lg z^yXTE-F|732w@l_fwPft$A_lZ>a#;BM%S%OYT}V>8kR?pg|At)0QljebCY}1^&z1} zpIUWH7OE!|+6C9n2mDMI-_Kx-E?!hfbsGcfSFAcLLUz9wwH30ZR zgP2Mo2W&HgEQTce9<|idGKp>jv}Fi?pqDbobLYmm&oWF!Y*g-F!MLAWgq$Kv#|vlX z=QsxqGJ6SxMHtQo0-=W?EkmwFRQ)+B66a2qo-||6PjX0$^&}f4-gFDtApd4xAz6-E zMefYbT|(DBHQ>gEQ@@t2bqC!sp4Gv3QUw!W7T}qDH=4ZcU8X`cr}4{$NKf@Mg&*0%sTh=z6Nokw0YDa7MrR*~Z5z6xc`lFMKj z?o*tLwsXWPopP`np;DVjBQHZ`69=p+5x@^TIrB{tY##Qj05GXhsC9EZ38G#n2AS0Q z`4$Lf$}O7I_|WSm%Q4tl_8|dFWR@Z3;xcriCsjp)!LD}nq|8u-=)~D#=KL~b}qy~N&a_?Pq>@Zzr zsvsO{DN?{8kV-jY#&rZ*HIHE9azbf_SMGj)3zk{p80gOTt6j^GTf#Cl7{3G_jmo9< za(EaVxvRb{l!T}AFzl|{WeDV(WeCw?hs1X#0xAlVEyB+Sw+n@y=rivF$BqYdkb|X4 z3yg2FT=pSBam#p2<211|E4}=Xpyx95i5r8-M;H74^vBTyc#bU3{hNTrPkQz;B(^I7 zh`L(^C`ciL%*hCzP3z=gKJZ=^H5*{GReP$yTXNSS!7mew@MGFWikTsa0WKJsZ>ctKo#sG=@ zhH>o-2a3kFP8A5{GO1I|$b5|ET+5rz7{GPeBo;%t5&bPK9+Qn9HkdVCZ3bw41~^Ng zdI59&fMNNH;Gz-sI5LOHxe6T6ffsW+)h?dUhEWe?^k*<;c-L0*t;iYUGX|V1e}Kkb zC<2^N7csjb7h8ePYtT2*NZw;iK1R&IlQA%`h)%AOgyJzI7SH)q4CW%H{v2>+9--_l z6E=c2HbxYK03iZ_U63Su1`l0+NPu_nrz)`w3%~(i7Y4fw!g**8la>m(MbjrhMJ;0I zPJ>hf?(G&wk<-IaE&O1V8ub;>hqy$@!4GTLJ>Sd538?2=7ieCDA2+ePgp-j>%DQsd}eMZIIoP~x_$1oNDM)pBuma>$Qv zH_>)QPWqvpqYcBw;br?Cy`DLb9gFK*lJv*=u=Y;x*m-uX>RW?iI_)+U`zFVUmRY~@ zGS$ z>(Rc=QRZ40Z_~737PNpo<;Fq`hWO*YYd`kOm!p^{xQrn$jw@C;2)>;6G?cqCaCcY3P!q2IBNP zb=0itT~-$QU-Mtcm;L0OGjNbleZ`inUSVzdBIv2CyHkJGYNd+uwC9bh_q|YkIQntP z8BLCybvxl2wbwj}YWJzUPmtFiEE?cv{NUx|`_@Ht?KeHNJF@e|+X}y&kkoQ5x?XeY z@ud^*Qp~U3IM^y-H?DD`_^`Cq9kZfOcO6})54u}Y!ehgR&(>*$I=pTBSghiRI{(u3 z7FBUVanT!pc*~bwrYTpOvjn3vO!dE84aUEoo}8S+rz6i`uMTW5*%^f+qPMYhip0NTQL$EW~=SF!{B->NZPXS$lgPfk~C2O+6NWN}q$#ra(#Yivm$JYfTEK z=rb16zn-GuZ1n3%ZoC2f;#|QBDjB3$#foqi^f;AB zw|7|2G>OJ3CfjGALiQqBACzN#_L+pu*K*Mq+AO`zr2Gz3)>`(Z5JCAKgJ-rIMQ3p8 z&M#riO;;~sa(SQ$v(5+1xQW7CF;`{S7&bw@ZlLsA8hgrkx`8CS3~AWLwhK^ZiKAR? zBFIV^ph%2n%#zArZrIDrwsghB!)e?Y zDsGY54;nb*mu=eES^5~Nw@g+W6d;m&YpMBI=v*`Aj;y_TBE5^B*&iEZ;%2@hTfQ5D zM5j5YkQPbBvqIacQz9V0${8?u`CNk#sN69gV?MwjmP~L}+8}xxBnyFE4b< z+YebNBcvG<90CzrtU<|e2W*4vX(0mkUv%JNP9!*RK}M7y>Nr?u=3~t>c!b${Y8j*+ zpRou!kCfDX`-#%;h&UDxiEZZ?05zaM&+BBm5<|oX&(0OKP}%DTDEY~ynyfeT}Wp!Yy#)2#R^113liLz4JGUa*9+CY_BP z;pI*Da&jOSyI9XU42go5^vO&Mr6@~rC1}i|cg>+KvW7gFaH4U1i3Ec)N8rE-cy#Cl zS(c#DoeWHR%x6|MhK*u({hL4B9fBEoOmZ2iz1y8qEwBN zr@0uev)6Qk@ns{l$s(`{!yy;^D^x!TES%AbBqJ${?BRsXe5OhCCdoqr7RnwZcM2iK z1^TICm7RLi7AEE1k z7Z<-f`WS=ajT@q*$FJCFC(z5DL7F1hvw~nNYvClyuNe$?U=WRop_ACr&!MIw z1j_h68#N`7`=nMNoU z4@T=xz+g)1Knuq1Sj6Omz|*(my`)Le*)eRMtP0752!?%TIIW6YAlNYh+LZB0FidU* zDM}f%U;LbSg5}dCG{=@8m2fN|jZhW{k=zI>J(0-os)C;&x7wZxF`l061>|&M0kAvL zewM`pg8;~4yqIMuW5^0((yCmi(`$Ih%f=toVBOsi*aJxeU8x1Ir#0x!Fzf*k61k|} zD$vo*(?DnMV1*+ra{MH0rzeP%uJi$bT>L%^xtMj$Vn+<-cy+v+D4sotjgHJ_5jW~} zzyY34=EE7xg#;id&~Nj#(EJ*79g>;8{IVm^(uo=F_$R(33~0qQ zT#yRA?Wp#1^BfkadJ_yH&0?=HqRldjibGOn8I%k2QdH2Z_TokdkcU=K@jw9#N3S(# zESZsG_Ri$uz|;s@E?Fi$rgMbt#SW+EgIt4P5)lQE3>y{)s)6flI@iy*UYb^Cz!jh+ z@^pM~B2NHr(2iDSm;#r1SI7ZVfN>o*Ptx&7l@+~W85*irDa;7M;8>2H0~{oYY76}! zN|6@nScYkveslaQFsV%*0M3S_!E9#SGvs!4*KC~f84kWuqaT*#vT(6x8{R+1VkB$& zWN{g{IIZ)9YemJ|um)tN%JJWvEcU27i#oJF&r>1a@-Hv7d>`SzFDJ0>@UC}e?veNJ zcE4X5`w-B5RZRDhwZ7$5{ZBVNgU;OBqIaw3sGnb~ztwaw72D{ZFiOuPj@#7{^FX{?IYB zU(1SpL+O`(G1Z-;6j0_+R-vMMIp_)VQD1AI+9$G$>AOJh;7zru+p9JX?05TN-;l9B zfIWF7;_l?SDD1H=j`$poD^whXq*jW^y+IPfQuYabeyZNM@VAWH4v+B}4ly{)f zy8h_mVBu+j^;~hIZI)77Z*rfPW|Yuf9+RC*nw*nM?j4M!%*Va6v73oJniMo}lavvv ztGzoS{t7PJ;jl}i(`ZD%M{;PiopimN$pHYP1L4pK;7s z7tdyzE7g{@O|FiLq&qZ6OdRPpn{Ry-t#?_+c&F9t0hvn5LXP3EIrB*N^lGb4-ey+p zutYj@Lc#2L^;A~!lYp2CPKRGl_&I}=TLI?~mkz3~^Lcrvv#m`pYxt;FW!3Rw?;||- z{EmHEyLTvfTko@MM=h8xn!alpjQc!7)$NO-4r4NSJDyw(rb=uW@Xzr{nPaGFH?mcN zU-;(e=3TgH5VxbzCfU2_oJL^qhOh3eGOsRl!0KK`d@hZM(h#E$`3*6u!)(Huk78?& zlu^Zxb)G+}c(|+VLuaaAm7b6J+cmDcJynN&cfAie4@dY%Ufmir^X-;(Uz=n1-pHUM z&mHXTzhH%Uy#|;je9!7P$kirtzJbfos*_XGdvb7BbgOAqT@m>2SaJWHs}ILw?8XLc zpD%eo)~f9(d_SBL>;i?xdsNRlaab(6Egp_Lj7#hMv52 zTwgEoK{=$%_4E_$P118jTZ!P%b__eQS#`8JTOg%XvpnRpZ^c26T{d?1Ij9nvqgHPI z*UnKFC8;Nu6($f!ou+S#Xyq+wIk%3cm#%8wWhpsW>JW;PD!UODQ#sOGbN4jJGr{ju z4bcP|tTT}nOYN?UV%LN0*2>`tP5ms#$oCmI9TbRGkd1p1#CCxqi^t4F(Mojc7D=O~ zYX)gMM+NS5VgIApVhdA+}#m@ z0pqWN2Tq>mYRq)_P7oO6z|9$WrYA`8xl|6jBZKmF8M@ALux4-(Toe!HZX;F0lO>ex z6pz8;U_&`BDty?HR4w`=w1HaXh9u44iKHF|F&}Q9CZ|7jnpNd?&K6_<0HrJJEtn0+rEC&x)spTd$*{5gPQ8KHoI$_ zWjwbvPiN~W;x?0CT)AS+v98@}lt$AiyW`=x?*iu0yTeX5YbRr5o~IQodOgAF_4<{v z)_V-+1zVPPeb>p0b?*EgaoeKqnKy3yoZgY1$E$9~vXjPp69O z{!fmSBT)*~DcdMXsx3$Qf2af%r5HZ)$}&8kG^!9`J!CzU;+1-+<%Pwz^Xd;97g~9n z>>I^Hrx^8AJm-Ck1i=$G$Cg9wM@w?x%CM;?HLF>y1Ev$XpUs;d$GgzM^<%*6Pw_pll&$tx zD%QgGQ^F6LjCUIEefy|b{h4rg*14TyzE$*6dYv=5ur+X`|Ne*JuLaeIHSH9yjL3=? zPJ1@Ly3mh{N0lAtJ~~F>7!O}HE9jhi9W~O;QC^k&+v{WZD)$ec@TIyN^eAnncpo@v zp?OAmzC3Oh%WFTW5i0~hwkG9*G{7)+O*oM-niIuxnyL?Hog2j1FG|j>S%&BY-OORv zZQ0tbiw{Q6eRSLqSiJJ?w`9sfXpF}5S4!~;Z=%MUEcLS$9c^~)vp&(^p&qYBGI>7} z+cz*s`iwf#r8_CdaqVXAy8p5(B0yG*$38Zk(x>$Dbr-V~7hYBMTZ*LL>gN_>do)!< zx9(0*eZ+l)3}g_#;D`qH$=g}M!Nb#~EIZi7JWKaYbxGad0-X+%EpT75O+UqTxqm0= zkmfJF)0X03`(Et*nxlN)XxC7wy3!OarF^a6iSqqFiaW~Vk+xZ*JA8a^41F&f)G7*8 zDEHfbs`zWkw!8Xr$}Ep5YID^ye>cskEy*=bC1(DWaQCPyjRxu!(Q9wC?rHVg)K=(? z(sH@{AjiAv=z7sJSqJZqgrQYal{4BD9FJS>mbTmBSWxKVTzKga&f3gQ=7ya{zUFgs zUoGjxl7h~?%toQ?GtN`D$GV)3y*zZduw{J7=2LCQN;tG}O=y#(!{bnk zt>^bsEyS)jrwSJN7VLhQ0M$dDcU1S6sx;ZSb~>cqEc4!_^!Rc4(Q}b*c@o7*{&2@Q zGXL_l&aHuueV@(1EOi1m+RLHk9&K~42qu;i&ft@JfLD|l?UlIV-Jy$I>&LkF)t|O6 zbtHhz%e$|Gb2y1~*3^ACuT2U(%}+3&V4CDMP7$w$ z`*Dn^Fp05zmG&n^RX1o>(<`$*AN!r#(9@Q^8Lx*eF+=(7$y!+7Wc<3uw&UQ|1JXxL z{Z%cC=+0MnEg3vdE3_+geZRr~{Xzet%oi1}^~w>m2FKnnqV-ZvUQU;Q9bM}pW$Qfn zkSKBK=GI~t=aHNooL+IOVprLjG8DifKF`i)zvPzkHuZC?UQgv!C7*dQ9fTjs>X?Yg zrg(aj_sl)2c)4`;RnX0bZzt_N8|M!_TQuuFzNuL~%6vW}y9v2rm=zbN5$LP3J?uTd8Mn6U7RDo4G2UfmuTLJ_RI|P{#8c~)x!CJ#slr+L;#0R$3b}aCA$N)6 zSgKVrv`(|P{hTNCf&>U?_Kea z16Q=&SXlH7ILQb&&U3wk-lBI8KyuV)?M2ERyui@LZ>+~=TagP zhmqoAG4zBJR|EEwndWCUi~wtV}0hS%+`a0D|f%Xw81|g)*f+hefQi! z)uT&@>!)~KFk!VfFbQsrx_LJ~iK}sHiQg*<5+8DIg$NGUP;0 zujRFd;5GY8B{eNJJhYMwefZcn_2DJK5+T9z%w*iE=Cud+el((OZgyWI{ooeh71YZXVz-Op50LqHEY0I z%;|x&PAYruyJ09f9Xrx}=1nJxLDXM{51cf4Htj}mN$V_I# zrcAg9-c2z0@o^KRy<0gzSlUzs4B4^lB@B{2Ac7(}(DP$_7QN6$XVM8c)>5iLI@RR7 z51vw~KVN{fXOMpgvA9;j6l_a|zlanSCrz6+Hk?Agq@{Hv=i_j$={1o=>S8ic5>_fb zNi^~yr)#$mX9|R+$57YPrW@$_m`0fS$6YOB+AN;T2s=J3np$dVFcWV;V@I;F=48p* zrFkY0@Fcq(Mp?Y5jDHeJ^lV13H(;`&G`ZR=6o($lc{T|!2ZPh8kV$Tbm5T~gh@=5| z^1IgOn5T;p<*KOzv()JVA#5;l3?Sq#5@f_Xn$$c^4)=K)`>+$O&oLZf$G}{vGP5oG zcYiTHoE%%Mtrx6ukyeGnKed&Kr&8#Y0up7BDhsb(PeK({%ouB;Nz#PN0EKD#42&O9l&a)I=WRhPK&Y!-Uv%xGr zxwwSl#oPwN8A1IflmHy54tq;Y@=)F6A&FTE=(X~98HhJ7N{n&=3Z~B?(ruy#=L&>> z7|bC7+={^s@3IGyD(K|WGAHYacJOG$bkui@7}UHHojVh)Ov$g|)zym_&mctPcyA+` z4PqCh3h9gM)0d&!pjmVuU(bsMuT}DIOE(nC(FmB380G|%RtD{qP)4Rmn1Q*tVL?8! zn0-oM0>BcCS@P$3TbU_)d)N6v=DhJ!OlFC|%4j+zy)T9)EiH?bh%ub|iQrPF>1NbY zqv=H&`GIj1JI4XQg|w>b0wEY}XQmAHfi@N|_nAj>B}IfiU^ZiRlD=CID5~UO3wbpdhZe7G@87V-BRxUWyT?eO*Gk(a_io3@*r! z`B7*ZymQSaE6g$4L#=`UW{goENRSj^a$Vu3OezjP%izIM*Gv;}vNJIYoalEt)iixD z{(`>wYx?E1bX+ncnS?;JO!8z72`+Gv>LXw;S$&(O&k(}fhy z9FM^Dhs0yTd4%*ZgY?h_W-&m~j0q++IVO3AzrVpURLu!o52Xz0Kl=ci|ryW!ETrgC$7OEfjMQ$ z^~ucMy3h&wHD6lVdKPHku^-Sno&&Q+k@`s6Sn=|5==MCxzN9(&9fQthcTzdLyfJ_P zgZEMlzSkj#xNE_817KYNFkvhXU!#4Fw*oK6F`0aPV3F+@!<3x`c%?Lrl0Tdv9z~l& z(5B}^W;tRq(;2NCTKj_0_55A-G63`HCYjVCuMc)~g*KxmfpY_>8KU*dz79<$4u%3G zBAKE;K^)dcFxm`e2U4BD12O;&VY6dzGZnd^8A1JotH3o~0c0E^&?2o|8M~xH!#m`9 zA^^(xa?;Wm*ocpCQ4W}jk}5GcdOHA^jzl3ukTedPD^d(C0cZ?6Ra_uUl%kCr%(Bqo z1RB6_V!x%@qSzQW!pI>({`dp-<-~+I#)dO8W&nnij=4vJU1D&Egr|a?80J*GNntW8 z)+fD{7mLXSU9J9uL0XdOcf;_xar8y0i5>u+=Z3{w=~D}ccw^s@%yfN5a*Nbt2EOW9 zn>jEIgUz1qWfnCse zy~_8DYYh_C=^HOY_N83RI?X0XO*UR)5%g9r8MBjYj16LfhiPeoWVrfVBpZluZJHMa zyTfxX59Nxm(AZ)~nZ~nUr1#?d4VPlT8$}J`9IZkPW)Jcmzyp82R!}!Yk*5|4f1%wvP8qINyf%H3OfVy3BiP&+HjQ3S zqVLzTa<@H4qz5aS zTkB$CJqd9bJJWTvN-IW2m^O)#NRr)!zQ~xENP|&w-12}U&T_{1?#P)P(1ALd4cB*t zOX+_XM=*^;S)J*Hh!$A`9xnI##|B=T=7;O=QMf(zg3!C&I_Z$*DHQQ!PcoK_tl?#c* zE0oHjbJ4Xea}%sGpm6X)qg~_<$CGs)Eg83ml{~#GyrP?wSfl(Ts&HvL-ZEEL`kDvfGm-CpxZoS`=W}S6iC1;8DQ<$FYTPvT z=)zbw5wKM(^upWKn4;oW^mDjl)#Q;bi*I?dWe-1p9Z?NwJq4hY{V*snLZ; zMfaqJIfs6|eY?gv`k{4=PVG%(=r+2vs!QaNlfga@Uykm1bR}!crP4b2`_sq1AG99P z0DXwA3i&jr|kdr>Y-NJmCBh9+v8qtHf6B2hcGKx2O4rD z<+cLh=QLKcVm|%I={29?-SRA?uQO)8tvVVgo`-7)_FLWem890xNL;0TaL- zgbOBOaoeZVpMtEnA`Soq=PRnJ@;_E&h)0<>vgIDkXFC#&KNhp16a9^~PpEg#wBWK3^%;GXA;9(}jx$z!jK`!jbYM;H4o zxF~je+Gkt6dQth3yz}YITiEHWH^=fj516exhW;>h+vw>!VpZyRLyaX&W?DC3ce#Sw z1sfen1!+g;udan{*)^joW25L3c?jDVNcQBq1DYR8PltVYlY_fCNWFMoIa}E-N3SCO=g4R1w>f+sA~CO@40R+GjN1vw7%B_H0v|Qr6Cw` zE0#J7Ca~EYXWip^|!jd_>0s&g8DWZXmmL=Gg6S5aU z*Kj6d##d0cFY$BWkNA}-9OeAQIBkj>VmOi^Ptgo6Fwu*W!L{ysOZW|JR zGGhj@z;B;(Zt>hNRK@h+iGhLlXL|#Wo~%84cfh^jiiPCiHFjYLDdH$-*NXATY5dzs zk*F0%G}etjYbyB|FyCq{_qFI%*__}|;FX>eM%P6ITAyj?oFcCHkZRNW!Exa{CwjO7*|OJ1Bde_1TYDYn)3eJn%56Bg@3{tU3*W040kRqT;PYu3Xn64c;QP6aoZq_2 z4@NE>sCxeV#y0yG=d+I7HjJ)pw{57@dLm@Ak9xIw@|rOw<8|8gcQWEJyt*$7_-y_l zsF3p9QUK;jl6w_jGXH%Q<9g~s6iW1BGZlAWleP2tkRSf)j;XZ6Dn;Zg_I?M@OE87z z#q_;u@5heTQ?le9Kf8w0Z?HT_4u4n$Lu;klIb4ZxV^|Fof~KzQ@ii3gvrz8_*CiAM zU@Qhsgdu;%HWU|&3kf-1^pYwQ+7^b&x6>#3&pfMV=NE*|)iZiQ>$0NR6ij??Vf1$9 z9KM`a|GuzJGz|ABtOQ@t{US2*XaznZGK)6aG2FJD%#(b$SZCwXo3#whOoX2(uZjsb z*5~aGc$~iDMJM&zqg8#~<6c+a=M@ic?7g$;#J1~aE>*XPpC5_VxKy_tO_sjSQ5r@j zu0VUPkyDxyd5h>R?Rnnkhum;R?gQOtJnkuc?FXOn*o8@AB`S?~k{()B(1N@?Zm{sK zO*}sIz|zLuE|2%fQ4YQq*}E)FEth?4#dSC%qltsv2P6cUU-chg(fl z>&jCoH(lUIE2>xn58CE?sv5D$F}j_yWdUWbQ3K|$jtHk5t>})}rh48xID748^N=?L z@2VP~5x;eunn%}S)4XIxHiX&ZrSu=}?bc)8zpZN+aMDs_n~SVv|LU>*iXqb{iF>?G z-3Y6e%L}NI$np~FrzkeQ3&uP?@?i4Egk1D%<=Wnkfp~F)ul8?eUf^gk#@O zDc98ky(@qGm?u!VIL>Aq_14UuEQ~mM^~q+`Wwi+RO?DaOR~u}%7Cme-Ut6!)eDvN& zUkTP8{Di2yxBGS81#T#E)pStu+96O%elMXSsb$ng!I;o>=;9D-D zDxl#UPh{#A={ztOjMsJ~hmt}VlIfIhk2rA9y@5SEUb)Z{SW$F@Oe`^Zr{Vn8W!O2@ zPkQ943_8ny8Je;qd|o&*pa>K7o~kLr_Old-?&~-^FZI1Y=7-*svETi+U~2g6)&x`A zHFC6DAw`>DemC#~hj52u4Q_ee#|0X*+k@J)D(>SS|(S3=y*PdJ9= z3XmSq-KUP@x7;Xv3wtr}1!`W5GaUYC=;lCF^8BREQPUQ;UOoDQw=s8}@+Zt-w!0us zyhq}#M!KAo(apZOco^u*#l7@;jrNjx z<)>B)ku>ziF9Z8U4j_Iyp9w_GZ|6RlJ2X_c;W#UQowz%Q#SJ{zcp^o_eu#tf`9^ zZpw`?cCTW7rO10K%iSSXVD#LSxp^i!zGtlC9F{aWE)_E=ZZjI^UuCDNb*))>ZQO13 zvuUN54Tfn~!b}H~XV27>GGAkbzAh@Cn5Hz|z1_C9hK+lxaq)&lnkRSbkN8arjqBhY zE1WLSu0>`DjT|QQ6{nQoef;dKkr6thVv~=?UiHQcbABWF9X}FvzPk*!s_K4^RzcN4 z_x_oa_Ty>j&-qA2&o{hv^3!i$RmR8_oy@;Of|!F|XR>+QR)dr|ry6CCwbo50xnTof z#Te}v2_p7#<DxnjR!xW_xl9cl*?-F9^K#r>vNzSLS z*(#)itcY^jDzO|_G2}GoIh4t;avFx2Ic(U>PW|q_zw2_jcI^+h`+mJ%&*$U$cs`zw z+d#>d)0p|w|IVAYPS+EkQo@8%62(X9 zuZF&8fQ4d!@-ibdkDliD3SI=An*%hrVx^J|6?O+-Phxh!qb|6Rk8aA#6MWd6vs1Y& zWOGM&#p^K^y>jvSIfdW}Sn_<&x$=ANe?bX#XZLD^6C>r9wvL?o)g_%W(s)2o?zG>bq zX66{y)qg=3o5)m5tf1v0S1-x({NC<~r5$jD_XRcAUS7T74O@lYc)XWq{6dHBj*;iH zD2gTW=eA$T$b3eGEcP$x#OhRp&R1ro(!MSq?#*l7S!UOkmkto=BMW^J`Dfw&dfl1! z?nga-cMV5g?qdZP^Q^xBkF9}Am&kkXvg)80uL4>@LycDmMy1&}mArspeA@slT|hH7 zN7Iw>hz;;iWlC(=fx^qN@nkcymPF`hWjcQ(unYAL6rYk;NU^~xT10)0QMnqGu@#pZ zR*Wu>kVxOwOQ#l!kha)jbaSGc;h`%5`FTMOQRUx)7MHHhEeQfhny=84nH-$zT;zj@ zwHmqiYx7no^7wUJCQNX_^3d6KCy9p|K)GE4S|TG%ljW?1pqO@}*RN@KtCbE0o?-8* z@jp}0vXLO1_ZOslMcUF899#&HyNz=(QJ;m;RZhZdrWi{gU%`s&d5Kn609`@WXru=q z2eU2#?!S&p19LA4Zb%f1sU&ed(1+ly?nbwG36`XZ76ADfK~%8#tB0jO`zL|uxb7eG%x93!!4aQHO0Mzze5FyeZ25-PkOLSzCxnps!Q7X}1z{kH8y7{oe9 zE1uBhsgZ)kN%f|#ac1g#|Ov(766r&}v(1!)7bZu3znbcfL(B)Jm zFuo8unuHfBT<{H%gSRIQ=3|cED;GPtJn{uLU8Gau}kEeq7O6F#?_^SXNqgPcV>;zyD)b{l)nq|R zqaYuv4lTUK&E#Z``72{@G~fD0$(V{#z-Z6VFglhUL~tM-jY5~G)e^rFBV2|w^@q#@ z2@d>|4Q8k@^iHWNbX-1Ay=iP~zg)5jZ0B#U?$1BVj=GUQ%pNW|H`qMLwW;ePrR{qg zb`1GhDc<`WiF1XNtY^w`ZJCdNK%NTB^dQSS*O)1xxceNXAvSmjBKuZa0DTIISQ>xY zp{ho)c`Zyyni)7(1lf?B0)as(8r!h{G+m!?;83)j;F(6=lk%Jk*WdmH`P>YJT+ee# zW{K`oONy@5-@mRGbLav)^QdlLJ!Q3Jws--uwGBy`(KRNlw!!4h2Hn*>G??q0mp>j5@iVI z3i^dW8?HVfjlJVAd2s#$gt02~7&QIR3a&vrMdDn8zNB;Bdcs4kHIXJ6gNE{MY_<`4 zH<6Az^%YTIC$ppYnD-e6_$TP-`eT=n#cS`ua+{DV*renfrra>NTa%K%^n|X6l;`f5 zq&zLP44rrZ-qBJZKK9EXqP-U9Ow4LV5Y*;=d3N88&L8{jHC)HlwL6?L?st3pcMxq6 zVvE@+AU#LAOo%bhjdL#er`;~}4Qf!#H{X8!fURMv%ZsplrqE*qeSfnXKt&Q^RsRlNj&n5fd znj4}TBdw(kmHi$ z#n7U*J9#tlEqwEQW@1?>Prkh7z<@z%exUUU>dV4vji+(*O8E`X{V7>p_4Ywy zi*?@$f1(X7-1$|?PDdDvP}S>q~X9Ukkw>s#;l0uY&xyN*5f#w~yL7({8_* zpto$Io~*46G#KO_;JUEuoet&41zF}^^*LM6GdP6KR0XrR_b;3Md`~ZNOQAn)l=ZJrI&tUjkcO$vHz*P z0|_NP?sh?+Na>3Q{PnWjwCptBe-S(z*FOi_Pigm756IZ(nA=_&h#z~hF${C}bEjX_ z%g&ANvT2`>m@Ck?hRhS6xIxn#Os*8aa7iii{`IHUE1&MT_XNZWP_w=8JiX)NuV3rpFA2#p_3d#fi_*5PBG zk*3~=^{VC5q?owLu!}OEcLkhU8rgZuuL?qWUO=0Jy zD)QQ%%kIOJ=+IE*{Q8O$Bc7g@*t?H=G^wS!F*Cb90cyDNj`_y@g}ygW*vgMj1^V+S zYOtYOmad_`Cp`kHA7y~I-s5xze(1I|E||SL;Eq`E|9De3MgQEG-sO(w3d}Z6Uvj?X z$5i{n2a8>5(rN-d!JTnbdN)1AhDa0xmZO-Gfh>7zIfwDhqS$;Lm3LK(GME$a1(Ry@H8;a9UVnU z3L(YB<Q#dv~RI~^q;8uRbwQqt<=DCtf4TV`@Dsl8`}X9Jv5BGDB=MB0SslP zw4P6w2hu+trxIohpu2s?V!6VU5%M$0_%~d|rli2&LcL}}Lb(60IhBz6?RMhZ--i9y z!b^+kXSz#N>GNq0yQ?;j%RJCMV)J>FGb}bud~`}!(VcuNNZ%(rM^XOlvH$qYpqTOS ztO?7QarJDN9K382QE!c~2v%T6?|S9?EFr{y<%gROd?co*L(MkJI^=lFrb>LXc%NDO zQT8nq`HBrHTJ`t+C3@FrWg5W4_L6uYW z+gb~$`g}aBfDhJi+yEK1wtc!V;`iQ6SIa)+yn7#d{0k2JAce9Exk(UE);3U92cDD! zbxmB3jOeR#&7nqprvYub;JqsN(oT}n#Q zi8aN2eE0gw*pF}ba{n{)_*q<#isG3YmJc|k6NmnSOc3A_Eubge&d7L zoZ{xJJx_R$1oO34O>cJV3trQO{4mBNrb-`5ajcdA@rW z(N$HC!yI?8K+&-ZW}~=2=r-BcolFKeq0y?zR3CH2Lxva!WgH@l4~`wvr?;9HTIY<} zxAdn`-fLQ|Oi#jL+Ii3TA>9*Qg>8R&D(V;S#>MdJONc{*LF5m%F9a!NTDi8FgUp~vVV+Z`wVcd zTh=``Gh0dlS{;7CQrnVYFX$BqiJW+tz>ibz*jusm_$Bw0f~)P@wwFcLWmqe!_+SJp zafYCe=ZAi)O`U!4&`bU^b(iXm_u^NAS5F%b9y=wjalslbCj)XL(2n2S9-#KYR&$`T z0!F*mHc9cKiJ^?3NYtG5iC&&ixiaSFU!zj2Ie-)EJGkxbS?q4z>s#!9pw>~txZFmw zzOQrZgPIiM{Z%kw?kif0iLF82*1m$$E7y$_!o3fB9j+ug>ZZ}p_xEV{wVn(pbp63K z&QtTgoO~!i^VCcNa&=~q=EUSR=`DmaTJ@|oI2ov#cK9q*7!63+`dy6((qYK&B+F_e?G-RDCjOs~+MM&lo?}*d7MicvAw@6Za%WVQc7Z zmiIq@dKyXJ8la`xfD5_^TL5ok&$J(m+;|E1`^snEZTt4wSC(QHiYH;ankE8r(c>kR zD}rb;R&$W|hC|1!)}Om~hf^=^n=`-TVlKr@%y?va1Pomq`c%2J`xTVgx%(-PX|S>7 z{OI`S{+EQGP9=TbbCoHfX>~+FFsj})Sp1*Hosa$D8t2Vm=dZjm89e-_IcIXQa@eH| zOA&&>MDR-|qxbM&>H5HC%hDQQz#qZgGW2@QBD@iJ!@B zBc?C>K!G_^m|*|#u&4B)TWaqg+g-o$qWRp{%Uk43EyJHLFa1wCgxgVfeH`^c3X ztYUU*&d#7n<+n!zk+JjGmva^UgJtNP<_hhvyqyu#2jBR+&s`f>#Vl7%NB{bRgQHtK z;Y=CnVS;?@ol~VWppeJGT2dG%Ux+;6Q=NNBPwEVb`R5OKT<=kPI2ZK$@cOqCii*b- zP1h~$e>N^)TYB$^(s<+Hjg$B)3Qqpct8X7DkTEr~&I&_SE+xIFBdnMmkFOC$f`ga* zs~qNrD+j^bnU4OLqAbVJBL86UV$fi2O{5j25nQ>}3R8gxMi$dI!_E7G7wD=i@ADNy zv^O_7%w!X~qPzWGhbrs9wz71EwnkYpv-?P^%JJtGIwCK@)D*fIU;(`E3;>FgPC`eB zbvj3`DFia{Kg>+Kr4QFe1_X4=1DT{ZW#$u++=!{r4Zy5Qc7tvR9tv1=4ymT;@Tq^vF~7VgtLYG%RnHlxTa*lI9nUnt7UIJMchSdLZAc0{aJ zMS@nI8KauHA}3Tt3?Ufnql6PT8HQX|L?qe zk}`2fI7VJ@=Pzj3>nc^+0GHt`G+HSE*V0IZOlEM%l?MjQmeQoDfPzuuHSF+sig7#} zYqs!uJ(*E|5~U%t&>ulTU-Fra1M{^2jC1B%OyO|9?M0n;;Wv zoGRpogGCTN;|rTof1P8y@Q6X$-N`Vi<&YCgZJ!{6KMTBvJJMXx6+?e!8?^fS=E4s& z9SvDw8=vdmo3Nuv-SF7@x?g`NWpxRgw`$@#v0c64hz4-B#%N#6HGl=u-nO%q-_c{S zVjrV*?Q?%>)43D&DiuYiqfPY?{X{Hj;2CCzA8IT$4ilSS>EaSdkK2_tM>=&M*CIuV$dyK}daDhKUa#%1tvj==<{DvQ6M zs&E9lVE}Pz=y9!QEh1N+POISs?~(onR8Z3I<8cRR&11^dFWOF{4pr4;#YA2n%sbob z;hOmV#-g(4&r|!~HJob=%lFW~sx-7jM*gFq8GVi(Wll@$v8sSe1~7cRE;s3e5nPgP zUs)qG=!Ey)fgjbh711wE?F{`nc>^0eg{+s84WGRLm&9(JPq9fizjlZ7YUYi4T6m#v z|4{vRs`s43a_x7f_5L17{$1W&T?JEFb(!i?f8@&jMfHOK0Qb+OfxhCfh5E^_p>tCs-hUuwevi)Io`aRKZ#wo&lJw(@j|X+Rzdn zDiAV+T!HwC(VD|HPKc5Y9#7K@fm_8C9^WjBN&n8Ee`YpZ6jz&>m34;n*n-#JUQLT4 zEgdzuzBtCZX19=6pWgR-1wAO$MX#JJ9(B)^Bk5Ous$$m;(rgP+RG_jayrBQDL0*tF z=^M{sOpH|(%?j6A77l7cTx+;TZa63v|gW{+aKl zgCTM1Z7`0r(sQBQIXqQj5yv1>RMplEp1Uf&z{f4dM<*bCR)#8g@xGjK&pYv)+BYf>b)#sZ# zR)>clUt_%5MtQQV$Me&W)uDJ~1Ypa?7E+0}fx?KY?)#put@b(7mOT|Yw@wkZnxAC& z()W9K)4XEu#||*XDn}U=r=44rn&}BMr(f?19}zT?euxxDYd*^+`z*drm9q*MB;Cac zj@Y)NF)&%A71y>EqKMjiFRP3&siZZ#!m81yJ)=9NfVaRIty;S)vQ!%S4GfUO*kHTC%Jjdc*NEVOX|n~ zH7hO`NA^jPvy`EMrsCq^s}Y zZ%00*j}FuRtjEj}8x=@@#)9fou}ebfKU<4;w_XeXn| zOby(O#a^jZgEk=>*r+cm&X4Sp?tMFNzb<{33r3+ zofg_o4Mz-^yQ#eiS=!z>aeq>{0?be8kNKH_UD!j926LGlVu*Fb|Rq~YkEz4$D5p+ zR8^aF)KpDJvoYJIjyPZGX0Z>buM7^&4N9gL=@$sTb+2LU;GK45o_$5`u#vo|vP$nB z5sYU+`5iBnSLY7%KX9sA1EbsM@(sHMvCO81Bb=T@eA`4}o%bLuDr@P{Ds1;p6FMJD zh}l>DWa(Ac<#PUhpN8$9yoHgBCLrm?v(=gcBa zhwR)2O7E0v;)o3kixSJU$;AUNzlWQbp3FkNLFij6X3(b*H$*p3qof@asGQ)~hQ@Ao zi(c>T)m35m@F;qsra>1-hY2=KK31qeH1-cr8@Et%TwC#=W$W)C(ak9YV`bsY5LA>($m^;Z8wBQQaFI1b-Jb!Gnp6is8u`KE|0Ow~sku?8 zs<>5A2x=6zW92VsKjtwvWtsimIujfKbeM1eh6^G*1zPNSf}@(+ZRB^$WZ*eyZSoI^6)}K`9v(0+@X}$TBxUICDgfcSi-3AW9IeD_dAcU;FAaoD zkAjb)yNg$cf38{o1|TZ%$CJ^``^HN!d|vMsaj-EhC&gl=?~Qa6veQ=FWi3B{9PG`e zOJT;+*i~|COTX4TKC{e9=!b)PI#biAayg<{5ir|v{y>Y_LHeJ5x`gB*s#kWc&mH;$ z%g=StPNaRJ} z`y|0}Mtl+tBOQwpG6=DPY^)Lr%fxuckTtC~Q%-KT)p^~Y8XKRJqlJ*Fu^%5{w5X{Q zmxa-YL;c0n*Qfr15P1!(Sg%@7&s(j*Qr~nJ`to8*8Qal+-NVach8hu91_>fP(?xgW zjx%TiBBfgj2~nD0E!m1s!&+b2ik+njVwkraNn#xWX8Mw3@5jC+!Ewg@?{`2ah!ufRTAD zq%U9uz-7%qaEqpfx`ui-S==D4H)WQc{lB%>-G0;5?PQGZ|^*lQ*?Y_3-DQ9EK&xxEAMR9G?T8tF-wGIwwR6Gy_(NxC(K-Y;_B; zIcNQ@2Lgj#v&B{hq$F0bD+yLfny8Wf->HE#C4l)ny3|ozP8)lN4x&8M!6zVhL&4-S z22kcXG3i=4u5A`)ni}P_!|J8p@!w@vO(_J=GZ%Gtq{IW4#+;EWv%P#)vj*S1zAX?b zYd*Y|URMjfQ1={o zN&H2@t9qo)c%|kS;VcibB4JSO@KWc}XtxdNDt}jwmtHPVl169U1@(=-)0%!S|33Y#iI zYX;M3ae;Bse+X5!3xBw}J8FRxN%mZ#oroRZ!51q@s|Mfvi=yN)4mw`x7w?zg4qYP- zs_}?!!rjne6$74x!UiAOfdIF#(EdA-O=2i33oygb_J_<1B7XH$Ie9HOuT`D@GY_Z* zJmH!5%k67nIpNQT(IcG&Z&DqGXF{8+fkgOo{XZ zw4kA{>JAlMx3Elid=#3r%Yv9W=wUeVD_RhEcRo9IsiBAMh?;;@MYrBc7C@T(EaM~* zD~k$CP7)=jQQ(}>pZ?wk?5i(Iw}rEE1RFke0pKu?hjV7Zo(Sv|llE0CVMWUf9;YLav=6h|?T)f~fnM}La-#e1tq3}!WT}X?U|6%lF32)z*SMGtjD4`Z z`F*)ygH>@xVMEQI@&&p8II$p%;1hB;A{0m#dS4oViorVPG9-xdbRCdf*fe?ism3An z%1lMKSUgR{9mb?_RoP})MzB*tO0~?_aR%E-KE7wu2GbGaMxFQU-pI!3XN^5zAdnqB z@RmwP`+ET5juKI< zJmvx(-^-);H~_(HfUCR8NqS8AyfXk0BC_tu$fZbm-0fSVeX!N*4_UQxbW_c0Jyp>2 zkbO>DIyxI!?1!dHRi;x9V}Umw4Iq=G4-W%cn78Q_!&0n2!k<<-WXK~wJ6Y-HHb2CV zK-bX3wd|m!LOxA=+OPEy4cPAsJrV>}N|HmbumDsIMvv!{RIGQ1w+p^GXn748von3&; zANh!`s_pZh-1Qe!nUjLP6FhWnSBJom(cb9I&b!nyt()wlrkxWO66)%Zc;c{=yvRDc zZnA{wacx?bUzlGN811#?UnlY5NE8Fn1=> z%>6i%xEridZ-nGN!l(||UR!X%g5St0T%vXmP zRV$rxIpLU4^71@spbi5SK=TX6B*BJ41OeJe;F132(tmJmXKM%< zSw>ADsUFs9Q(Ua#3DbOO>78Kd-Tn%qL?|phC7G!;cuOrvh5^tC;79ui=@T~BfojAx zxS^7CJ?~#OMem>h8B8AR#v8*4c85ygc~bS_Nkhq&v2B3VZ)k~uTP;D=(OPfr=z$7W zuttlqtBn3DT)LGJ4f|VcD#UmnMi-myk;t>qyI0_lyk}_`R9q})ya|muEpB|?VWQ{UrfC` zVsPYF@|D3WtYXBPxd;WGLPNaI8v?VSB58#)>}1^gcT-@3WdyKmt;H)2fM+wx4N?Z7 zOxOVur($5T_91Z7kbk4P_J_U4Pv<-YwJU`-$)$kU*!mb6(jtHF=&dV6n(`Js8|;A*8dRNg!cd(q)ZFe%j5mgN9Y6N>&yNSas#@@ zd^}>6S76M5J$J3aJ+VFtV+*B(qFHxMdgAI&<7V#@@huGJir&aSyhD1@wi}M-MOJF4q5Aday6;Yz@_*qWTQ6GVTb%tz@4{<9Yr)$Ly0kN~^D9 zI?q|Y|6kx`P#Gy$lmfeZaKtJt+n?&}S!$vMeQ7#s?dQ9gK5RLim^ApkzQW^bWcmT| zf9uyC(2eh_q|Oo+OJ9F-Ez|(F$i`#iB>!F=0LBT5iLWkf4lu~1h~e%GjWrez>@Ivk z1J(?P5?~h02rk*eMSVF7j{Wh44B<{ZkZU+@@js`yZ&nS;sZV^ID~5y>gE$`l1??LZ zZ8KG8gE{4x^qh_PL`1L75$Lnhm6xDZ8TRm3rqwg{Zw>6omDi7Lo!O5@?!-Z4mYjZ% z{+oOss|!telf8LWY%Ju!fwB!w=)LQFnn(zcs*tj1ioKL^U#zxX4a?`^86*6_2)FO?ly+6p#pQ90Z(=K}-9^P9eim6syFt`&z3krhKLZ6By4m zXgE~vu|Y{R`xpC*2l}+s4v?iu)>Fh{lXfcg6yfJsEe@83EP z&ABv^$V{5U#WF3U?S;WK{6sNgwQtSFu9k)W$!7&+1)`V}gZJtaMic;R02!gpkfC#wpItL_YCP)$;|14*z zBskA2?=eaZeMEM8r%D)kn5q6vZfqXDPI?>Oi_)OE9LV3ct#Gxq^5kPhZGBoSZ-p-Q(nQTVGR9;n-Lir`)kQW99xQ zGY4f=gU*ef8*RMjtE7HdPgYsy;bzl`|Gn-dOaQj4VzkcS+klh=CGYQ&v#T;yESoo; zZ?fw0g4|9L`b021yZk^?aaiTsD0(`dy+U)qUY~?MBFWa>JOGd?<>T~b=#I?jExLmZ z8iEVLi5Gt1>dzv4!qjt;R^t6~85;01f@mYEW2n{w^SDMaQ3u@(-2{(sAKNly*W**g zAw7#IHfd^-=Lg1X99rP<+xbj_F6tdmh`4;Y?CepR8gre2A#-Oc@ZJ>ifWaNB-8d z$L{9?_o&BI4n;5To0!mBI`;-EUDY|rb115nX8gqE3hClq#(a3a!4UW<${23f6J?Oi z$c413bU;V1?s-{fGU=at0koBdNKw48>-AI?MZ9xt*kDXq^1(!Om%O+j_TkXZ(9X1< zDjpU1w0bKBU;dF1qo;RoLW%8~@f*@c)=L)N0W7D*)di{)RglycymS-6*KByldU7|p zfSO|P(VspRS{#jc|C(KuU$dTRsky~{6~J=E-d5RtJ5zAEnS!KJbkj+cm783!67rnD zcrsmWnR*p?qKqb2rDVpGqf)!e*YBD(UMKv_!rn8 zUg0>-M#}ee!<47*8)$=_+3UXe;0aJxX)!VWmRGVQ{WpGtpm zT_5S*%k~tMa)#hfEMMfhPQGp7JuLLhbDJw?xfK0+ydk+M`PC=QPc&YB9xH9`t;1fG zl(Azb1I;&MLb0*|?UpR)2q@&Nuj&>2p9huu%88d9E5gpIJ~?;C>%+jsn^TL&wj9Vl z@NQ~qFM}M4`~viJ67rtkU(WF{yW;%3+^(RgV6>9z!0Y8Lm+i)yn3LSGdsC-hn%QUP zDLkeg%oJS~}DWJo@u_WiCONZw0Kr2k&@ z9!S^;y?-ln^2Y6$t!=7Ms?v4<^;n^AOOTy9VmS^!{^UcHsA=!gOXQ|ma zXp`odfZOl=rc7=$?CbvWyYN==^f%PP!MQ6hRTf;*%`tBF*=yH^qS&Pw&mwM}IM%%* z@rjPoyU$hTulbSpUB}YhuKc<1k;wSLucQF*V^0Op8jfzSM7VkiTqmq99r9X%qsdtf z>HD;mYW+$CS6z~gnvRqfYMJ^qjv*W&d^RWMrU~f@dPhWgqyNcb+(yCk(Jkx>+>Tk- zAdudM2R2%pdZAz>JW0C6LS%g3*R~hw$n9=wi$7tTFFs2}+63;?*o_AOji(Ke#_Nxs-7Y@F+iX`{X#vRX;vkR zX=&(@emzBR>#+S|uA3F3_*(A0^ACvAmG!5e|3UBSh1EnDDR_*|d@3s=pab?AtPx8G zuzm$nfDYaeY%f0=(1y~8(%wyzf&~@F9>ngc>8%)z?Y!o9prQXND7O_9&_IRU18BOM z?oYAkcEhB{w%YP>(AJFDjh(uTP1IKXPa{dHG6Dao8Z{|T$CAZ6ZTSgbe67_5UpZIX zj(opIbuH&EJqpq#pRJ@{;)-{CRnv`WI|2Q1?aq1-5qM$IsO0Nv+$>5BZqx3p{h%sd zdKm6Boi7tLS=n$pzA;T>>eZ*i?I7jeqL8*b^(jGxoeO)H`A4LSxCZ>DCB&?7NOH-n zIxBm+^o_{Dt;$I;*6XzR@PK0}HFQ1FTGU4bEcyS#*$h?$-rwU{GIXjGKljVjQcS>) zjF96W$^?;NS(RC4mmldu)mVTdNc=-67liPkB{K>M?Mu6)9cYa@y~A%?(ccJd>SjJ8 zKVv=!HW}_oXg?d#AP9y$qsV<~xILxN1yyFcnp2XkHH}gjHw4|Bp^NR*;G+9DmAWk& zXW?51vs$wPixPFz?^GT7l-m*%O0+CjcxpEhzSkrzYRywOgMMFGx2CrEs6qX5Oway= z@1bsS_w_C8PEJmiYNg`UMic4AT_N+EijJ=oZa;d8gk760YTm9!PW{J{BO4lFIrl0aLxQ^7vYny`D`OE;!+Avl#tc6 zbm<~AT{SWFT3vZXHi~u){`>f3>$uSkd(-FXx3n%ckNnEfZ7_AK_%uq4ih@=}k0$*H zc{hJyZ|>g0uIsy|-}tHds|9t}0>E{z zXLz@Pbpj3w*iOA>+p&3?#wp@(N!;N)nfF$kl&ncVV!^QP^=JAE=$7*ZT|-gBv=5R8 z>4UTt7Ilhbcs7)-W6AA(9WPkZ6h3N;)oV1uC2Q%=o)tjfb1Ysn;ymKh`ZfNiWCbMWja-OVZFn3C<*Nb47aVra7W9zhX!(qLU^RpyDve>9T{n)@g z(wxULn(Z$bB1lY`A?4T8A8FjIC@)N=gJ?8s%i3m0&z{eQjyjI$c`rPNxCmSs*~H(>GsPnFYf;M$jCOS@;7l z%wPy4X5!kYM*j^@%%;ZIz)#6w*sOnR+QS$!K#qtZ_5s`L9xGKUX{=2}cFaOABeq}h zfX&dv*0mmSadIDBYEYQKnv*p#tE?i~+zGv|sB@-W#vdq_4@*q>+OKm!N|(HR&h=W_ zr~|WCGUsR?Z`zzMyO-tiRZY&~$xr(}X4$-!op$&bQO-(kolII^&HKO-fY~@Ed9cvl z*}u>v;K5L|`zk8y#*6dCrfp?Ey?|5a9sGSVi!e{)?7BfeN#9y`xM1X~-U3SX@lsRO zha`(sMsxJg(M35`$ng#}IpuaQX(vf34E@Ct#znNq`gNy}Cl%Vi-%kjA6v*&U+I7J> zWKV##YUp=cJr;u|gNNOsrXct{(>x80ctHfkDozxd96nZ~^Rl&lkYI7t+O0b?K=KEM z@PInuPjXD{-_Er3)y{p`z2?L~%S(J(B!hA+X5G)y9M7&Wb~k1 z!)Hi6_{4>g{DSg{QQuDWM~QKs+ImarAljIxqIn8LVgtMx0Dnyl==xa#?sQ~!XK7y6 z?SVW4_h(jyPDX5%(eaOKD}lptCz%<}kE5p(Se>8JlBZVtIuCz85R~B}L7SF|^|*+O zaw6Apa`Ncqom7E0z*SlsCxI&6_V<}g58MD=BqK8Xq0PLhtsnMw%;0O^7EEiF-wR9K zx#K@4DKdiEmR`JWE-m)S^9=3(Z8mu8VV-_7PlpE%lG9z~X@gN{9JD##uHgI~yZq}u zUC%rZTQZN<`h(J16rJoea+bFJ{0r*t+8$NDraLZ-OwFxf4@yoQ&u~yKwft{2z>a!F z>h(P?J0Ol8xQOZ2w`gzJKG0S6c9NnnXVAJqv!J%X@f2Kj*=6byUJrD_&(w70EAnip zUb4wX&Z(?YYus-B=?05_pC1`f=9jLtAp$4Tb5L`RKCP*ZuSYy|jEC+WMTCZY&92>d znl)HEuCxJOx>bN{Y*65CM|lw`Tkn~dBi$hyN25~tvOU-A8h2`H)CCm=r*hHPw8tNZhaZ$fwOFA&_j2K@=sg0kbgKeqkxC967x`1>%O|^M31Z`t z`)}PNvckl^oQh48s{u8qURY=E_xxa^610%usPSY4HSGc0DK!!w{>G)exWWdC*~v5! z!dWr|$6c&@Gc(;`eLZo2ntHZJ*-7d1OpVT#>jXKKnOx-`gM|$UF9+A*^Q9t<$RigL z_c)f>9Vxc`R5Br(7nshAMjzynGLUw)zTE%bF{B4FKz_p%jhy8$C#$dVSdtao!oJ@G zH&iq!@3wCgJWoH?3e`(3Fy^`p?tee;Q(b=aCgWjC$YlMVcGym9tpM-Ca+kPE2|)=p zagX0i$G%khgN={wKaVh}YirV(*=&3H^!EEzP2C;=xS^gHedc4<9Z4qs-q_$hyxnf3 z`&ZphugY~eWP`*4JrR`}cfB-# zg@|^Ysj{J?Cw9^%j*)5srqd0XX)VFwTbvMu0* z?w6VeSRu`s>g%fxf}OHb8CZ6@@pyzU#PTOw&VQ@!H?b&=JJsBCFl%mZ`M;{iV+TYO z-IAuWnopeg7T0fx@rfJ+B~tI1B`ijx5;G}cn*qkl`S7wpq*0z*w&up555ZXV7c2UU zgahRh?;Y(;@5rApPr3fGs2|_GSbN|OHL&Yc)M{-_IsF>8#&)Br6|7YkPR3cUT&X^u>2o0P_KA{%0|GJF6AEini}DL<%QD;*P77ja;S$D_NB=O;RK+( z-;Z<=SWFl`<#Y5)yv+rXczEu7uaSpEuE$xAY__sbs!P}UVkzjD-Li42V+^4w0mAv* zpu*J0BzbRXVpGIA=DyGmJ;t=pR_xCLh4Da#3Bvp|r@K)&a)Iu_p*QCmP(6qb-c}3- zopdD)Ja~tDldXSldFE&RIP3Y0RM7|+YPRK6VR4G$UC9w-v5xyKEqY(WiLE&<`d6ay zyzKME$fMbBy^A{U*N7?A1w~zOJ6EYrGsM4seK;?&6qnW~$}ePnI5WjD2VX+)#N`W= zP~G8^NWT;98`Qw9rlwOE{Icn1wGLH^UI7}5Ze=VN=$y{oe89=?MUe5>`FR8e4J){| ze>yZQP)@TqVca zU&v_gkuAIz5Lr4~xUqQz`5)JDK5W=i5XQLPpS(r6nXKdKud;mX|B>|VflU4X|B8|n z-I2=_lH4M48%q~LD3V;4D7V~mpDl#kw%p5Q>q3%Pu5+LJq_P;6`(+qrY_4Oo_wRhZ zzrR=Z+BvVw^YwT>F1^b#!AJkB+6&Vy*#=?hkEcm3DlC=Z)u$(4{>O6y`g2C|b`QbB z&~>&)L+|a_n`56Y8iL&~;?;s5PjE~qr)+>q_BDG}KsjUMBqa(FK)4z4%E0%ZH1&i@ z@tBiQzq6rVIA6YomVZ(2)i(Z4W^T`BF#rcIWO3k^L-Y;G)lGDbCu8#yM=q){~V!vm*7kfRj|1KC_G%>myk}mDB zT0PbnWi-)Wkzkgrm3xjasN-!|w~4gJx}g})M%#3Z(7{cE&pI;so4ekOi^2jPa0zBq zW`q9s(c}2UGSyQ$VEwPlXmNCh^T1QHqTB(>&1TZGczv^bY!mc^aHj9ep4GE9^96<5 zsgPOWF5)rZ_Z|UCX;k8){_clG<@Mh@xz{Ust{;5YP%F$rvUsg-?Yd?>T z-x5+`kD5~uv9^j{Rc(F-MblV`rO~1$<)ABu z5|v9_*#WSg#)<0h-~Pz4jm2K7|1QmuNdH;EaHeb9EY@E!c95&gQ5@McpBh{#E|}k# z3|4SbowbHLx%|$ig)}DMwgrPneH>I zMS(2A=P>J{f6Iq9QWMOF1KV8RWo%`&kYeXee=f-dySJ2W z4XzX++lO(NF6QUe<}=O9YJF+FOH1qca`r(1UIs;*PW+&~E%7u%dX9>xp%MFzQBihh zk~MCI-OWAR=I|y+voT)mSXEccCDGl?_>O}|dKN$CXph(HUu^~KH~hG@=0VL`B(iyP zq(^X3aPYS&Gflso$;Q%(!3XGoB~%Y`5(run159i=6wbEJhY*f()VV%lOnyHT`N+}8YuG6Vo5AH&SUl_HY1(>_ z;3b2|UqubY-Y;%eVvSb&)@l7+Kou+>L>`lNmrij9BpYMA%X)Wy>htVHqd%7i5h2b| zOKs6Tyaqtp77BVV&_dz*98!qi74vs%j~6va7T!fTL!%e3Z`PLnFOAy_m&!4dW)Y{k zvugVvnbN^B7}iZ**Kvs;0)PJS@U{H3RtYYz)NZRj-oA^KgX5ltzUKX+%9R0eDutb! zjs=m#`oc9U{%0gj8Erm`aE%|BYQ*#nJ#*jDTtw+8+H@)cg)dOsd^8@~OL`dGXF1a? z43-K9#!?K@^|rnKnZlo{EVVqTR|1w}Y|Yk&e-b(M!9a1mzqL;;?aZ{u?PrgqPl+FF zNjg3*)x00h+1rxb3vz;i6~9#5_IqUYlt!an z!Pn27N|DzsD=~MHKdLF`Bb8%Hw)Nt=|JDf(s=rH=iG3A#cY1nrI$z2}Tf3Ae{f6V| zRZ*$+)jZ9H)Jn%K%vhe%b=FS)qlU!JAy@5?UL%a}F{aC^U5)uw*=#?}k={IZ8Z zPBHHP=-4)4?#Q6dan6DxVZN-e@V;| z(PR0W-HO88qu~tW*_>AhSA636?nd|N3G0sS7Dbkl?-o{wmCiEvs)YHog3eY~d7NKJ zD0aGvUbsvD9iof;#1I2AX+-DKYg(>MC~~ATeRdO)l-E0^ppCpsG1uN2yg&z~L})NI zD%3h`I)+jogP&SF2pt~W^bS^8Hr=in_%~Y?SMqv$Q0)xW2=U0rsHoQO6O5c(Rn?dr zaj6Wu5dTdq_zcgXG4PX&9(m%6Y4;c&N8FPey!Cs=T!Enr&=JKp*N;#MjxQe&n0+1= zPL_<)22=Enys1&9YL`CK@?KN)U(Zqbj;;1a6QAlFY)J?BBO&$>j=FoSgRd?3G(L64 zLDUhrAucf&LeTH5gvGSM$DX&8o*;FQEPDI2Y-`Kz=x^Ef)5)&$OGbX9%{7l|ah0B) z?xEgJoNO{g8SEAWwDeLcccTe_)n*Qm%n0Gp82Hy`IBz5Xb{$NE_O~0?sZF0Ce2~`$ zC{cL$(#VYF1|4GD06E*{)(E*ZOmc z;-1EMCoaT`hh4~?4PSVfBpw<0Qk@tOppjD1#;0~T+s@4msZ9w@%X*l$eyNBZ2=B?Y z_!#U0p$jsW7nXb7adoRw4kPhulwv zFSVS8sk4F)&28tZ0%8LAK~@0efv3`6%dafu?_jgpKdy%1(r#%=O@^v*E7fJ@He~vF zr$6+<=$X1S@wKTDSFQkwftfXKgYdI9x};>77I7kP%CJTKVAW~SCcPQD$c_F@y4B9z z>Y9tRJ40@Dby?L5^%uwO#vJa*UT?WQ(7AI;-dgF`IyKi_Gq$wSI@zN3p4@dgUR<_9e4~(zGzA+Gi-Rs|+N^KEs z2ExhWxsd+NQt>Fo?n~YiW)B(JSl42^8=wwvG4$&8ta#Y1hR-Hf5}t{_gVzHL^Qq~h zpqy^JNP>=d4N+kFi4e7IT;f#(5~Coy@Z~?A1XtMclmo)4T$N+NeHAkob^UKh9q%?q zG&dHDmV>rF$9x%L)>mfQ1C!Y`sg`I%ytLIgN}n3s{@f0BJ)9ZHsi%>pI5kQ07TeiN zevzK|4G4hU{|1^k{2VEkH`CaZRYajd4tkAJQ#o=aOA&C~2UeXU^zmbuI-?~qJluC! zN~-zw9iLLWiKX@M$}V|~kD`)~pls@%nkxMdTUu3yLW~2R3s;t_%@Z(4ZGR#RL%)}1 z5|<$yy=&8NLF)!EN51@Nua*LrfhGrixboh+&40ekIH*hpQrArIoQPaX8L}4?(2-Q2i1LS0J1r z4QxOHgzjU&e{ye6NJIL=F2pYV<1yiLJqSI;Fy7~XPOj{C@oc0w7d^w?!A<}a#&6(f zz|UMcoJ&h>z&AeMwc3Ch?5XxU{SelD^x=rjJ|n{}Ev|US zHiRdZNo$wg(jMS=6ZEgb6!V!#VQSL;V?UPMPV0BKFdBt_kmh`Phlb%lO_aRbr2*`6 zsx5p}5Tk(eWR18@ehtJTus#DdLAgMiOlQ-HDfX%liRg83XEZgc z?z)1Ez7P1){94#h%U*y4yEX!dAq>K9hsdyj-3ASrIm;^s`Wvc&=m>@Pi0QC)W_TA7 zl}+9(puYMRrMI=Y=)LtA_HNaKS7zr{~N|#3T5pz>c;@sd(XAK`T7RY*|Ovdjy}PbLOM{WuL%|n#;FM;5YrS% z1p)`4r9dY%fT74QrNe3|1|vGx+HVUL`~8{j25d$I?e9^md$-;_J*(Hi4VxO8tu*w(I&N-GNMY7{O!` zw%7Ji0Gyw`JENA5eu+O%V_=ns>Dk_I#%GYnAGHP z&JjAY_)w!qB8 zM7tehZBV2R>i|!gWqy5i3R{HQvP{Xt4XV?X#`adqw*7`Yuu){F9^CqW%aYK+_1<|6kcQn& znI&B3bJHmisE?9&_8al8GenLmu$uzDK;5wtZ-Gth3{H~ZH14lQUS9tHi}rFmi%Q|? z3)iK-M#+Ogtj`B_-$+{e)&cGR1ZU1MK6e5}^st3`F!sn>{u_qC+|n96fNni?EeW%Q zi7uz3{%F}EY>Gpwn>UyG{hpD{AX~;MqbARGeZJ$mTauK0*I0gd*L4(EylNZL24Ub~ z(uj!xm=CafR1o0m>WBRUay|AN5w6U9SQI0z?;7qd6Q@J)W8JCh)7R(Xffu|Y91Wuo zrbI3OZ+$pY@SH@^o!E?Jvw*>};a3#tPnPMa?pa-6tYZ^fiGDG; z~#$ z?R*2NcFp$NAQpJL)K#{Y!=%Xa&{)KBXSCCCSJEj)C<{ z{t;0D`N1W^|69ISp}SIWwfs$fCq|x7b2!5fCq~^Wftj~~HpTPCihfkDZj(0_%dqZl zb->Ut+i-_)Pww8RnQ{5BC4<~do)-pq*DG*fjfw!U*X93sKKP}C6Lmxx-D)gk^KnhQ z@7h0(@UCi$umtahXNww#pOdT~E)fyIgnoxIXxM1M{IDs?K??UX`XqG>b(nVyZ>78S z%i(`jff5oN#Ee9~8-~gMT)EwhyB zT8A76y8!1tuuODVu37qm$prmxW7)lLOqe=yGQ|z}dL4;0QU_odR8TCbU`(g5rG@ZP z9GNNYfhO0!K%k^adK`iA%@2Tn1N!KE^(;{UgXs!qChHJ5@l6+ngt43l%>l@{WBG&b z|2tSz#efC7G0W{wiy!7($DN{+TD3k=g>AS_ESmD!@#g zSYJ5|SSI0|$@74563#c9wBGT*n#8bGk-5=EK?`rYr_|}0t^<~~%ZC9wc`@mQSauk^ z=K^vK1s7fn=MtH(`t*VKD$1LJHn#YnqO)%foFQwiX(=q)ELZoye&fsy%Zjn-AO32z zjC4JJKzb453_B!?VwuBL^O=CW8SuS~o&t`i_VX6{VUoHbfQf}&or3okXM_XU;5YaF zv`pHKT9W^aI>JQO{;K3A@9zyarqWw#Lr3g~Bd_BXfo&P@#@_>xYLW_S6)a-?K^m-y zgOxh-PhDG&2^Z}OQ>EWxJHdZ(b@ub%VAid6ylAy#WS7BZ)&q*UU`MVbGJ#@Q>wSLs z<7eXWc+7L4y(#FTKRACeW!#eQ!u!zP&zJBoUH><3&Y?aL;EIvhr?!uuc@aPoWjtu5 z6Le^#vr$0ZGj(8HfLYu%;7|@ToC(T*g34rRiGmae;PtS=y3&}XYHnlRgr@h5Lh1T? zBR>3kgNdrjO25C~xu27EzR-pU$|NnziQS+dxXh9ej#8JIzk#>Bv!374j6Pl>& z7sI&|$_(x1UQ93<+O#}Z_IvMoiR;X}P5OiLqz+v6f?&N8_S8jR@LwOy?>Ivvzh>+0 z$^Eo5u>W`@0kth_0POK0m?Gca5lxEj6X37dcZRYq$+tdHhq*IhY(V<=^srt!OjQ4k zHV}PeP2`-`o4%Qb65}}XxpG}6MRYj)u>k~lA*JGMmW9f6Z$>6s^}1spT}e|mYt#qm zD77?fIC-y=_RVJp$M%r+W0j2rM4ZZ)--tue``z0ZoXARy#S{zbd?GIJK=v}RDV_!dDcloxpzEw_vG6ruP};{Fo?@6hL4qF$PA6I@fbC~)+r@6^gXy) zYS%TYQqafPGIw@pE-@Owj&^_CH8oAXbSDZ`0-SQ{EytZaal@maRJg2z_ceP$1nei4&&&Ud2fpUM|T zr{cX|e>QP-dGt7z5mE+~6%ZfkQ7WvUe++^N1XwX8z~Z*E`wVdl$q+8o2)%6K0dVMi+( z&Y?$bM}&|J3Hs`KpyJ)1+7dyeB&#D-#eblC+db1EbD>{HVs^y(u3D~lM^KX99!4|> z9^1BxU~;7A@?Xwjg3KHi@uh{ejms;WxQBYBimPOATqJal%=qz+`Ymm#hq}4U&q8OO zB-$*E;hi}`Q>YgUnH^X8)$YEE8dlSmJiwLy%$G)h8*7?InVD8CY&;sE^K_d}es+1m zkJ$AK61le*)E#)FxMiZnNf&sN%eKnj(fhi3imCq-yWizLrAR>io0Qrw-@ZdYflNI02U{ zPK;vivR0H*O>MII=q@lagYWz4y(pBy2}wjh%rpYEClV~--eL?pwrNnqz7%+b%9|d< zItGVO2k>GDw+Ce=OiJ5^+4P#^(zc@K>@}6rvM~8h-Ah@%(2j<;Ddth7c6Nn6fKA?+ z68EfhwVg_Ql`~bsUE<{y6|)4*2q?AGiZ$1pUeZ4w0v{+xPDBNBgvVjp$w*@-?Os*( z%~CIuV$ONVov|;`te1d}1hw0zQ^dtn8K07Nc{h1J0iHNJE06=+D31>ZlP-Tae3(CL zDYnl@o4|8yXPTLY)J+29$5N$CU=`+7SQBzQ@EA;7ELnB(zA#7)?$wL+$ioCqjvvmHjzthMAUcD;?z&*vu z0qUWvKVQ(*JYUxL-bJ(d&-eau2g}oAw|^>~ZXdX#VNs|Nc>8xs;aTm4+F-9H-9oDB zGrGf^&-zASsRq`2d0?azk2&Ts^GLVonFVTi;z)_jg9O~RBd2_gG8Y(QW_G>0z6yZ& zX;AgBt%})wsEnBRRRIamrl22`LBTdhX@o7R108_Yx$QORRTfK!8S>q~^IWwAZ_0lB z*k1|+kTKL_L*vNoC@A|-!4_g;J$-j`D!8G3-9TE;jfDXF=$8-eXF)rnc1HX50wc+T zdz+9P3wZv2JXb8$!ik1R!Z`A(zMlJfpZI(|kUS-uwB$=uW=_7GaLPoTeUt)}`W{=h$#?KG-ojIQuTw-qeG<|3!o`0cWi-8+9CdHIjp z2XtifGC!qH;M^K$QJVJ4oBhitQ5v5`zl?caUY(mvl+B1}K4pt|Lz4G3hP@R!97#dO z4(>(%b(7^yk&xn%+}Mp^Z&H%zn^Ot7^Xr8;<-<9GQA72|cKA*fbWf@_@PNNp-k#oa zd_p$D3x2W@->Ns0Sg%!!{u_9p{;8pkbT)C(G7n5uEs__TJ)IunmGAz*HJ2Zt8KH*quOr(XA?u5fJ5nn^yDos0KoW_ z{If~|Kh@>pWgS1xtT7FRee1g)Xu92B+tBPwY=sgot>MO{M{{Fk3p6RoU$-2YZ zv{y#{CR7O_MBopj`DvFo1WDeLJse>ReKvUpOSlS|p+SWYuK;(xDkGAUqxhAVr z&naYX18(`H5$f`RIq3Rfhd>$JL+Cmp3%CimUCDigo2LSAtne>Qp}wdQEbX1X3#_fE zrS0u(LgE6P^~sY>_-Vvl5@~*5EEs3e7~1j)5ZiMhb5>IMTbyVbH-NZgIXX45y$mq` zU8mB5F|t!;vIUEp40^E;pp&9E0^6()B_iiDZ&QEPB6! z4B|FfZ)>^ip_pIjE^QL|J5t3NvFLYeNbPQgAk_s_K}{{$VG92_%BRH7oa;S5Hcwjf zoam7_xe6iRohK^LOBt~-5qlET)5ju1wfA@qfxD?--lcTi{Ggxu5Ft*`U02w#gF4IN z(Il|@hZSv(UNt$me6(n1;y<3OBs1erBR*8`$(<=PMSVZ-6s2As>23CB84`bNEXG1- zF(8RIGCyO-G;N8V*1E%q$l3K<6&^gfm(SjzpuAGrF6a>O_l3e}8$lTCyk{ z@2D?_8=_#hmEv4L_mNtH4K;n=X;|B#O?mPJ(@})Ko1(L2cB6ly)EyjB`~KrmlfC-* z@00g#;1k~fw|<=qffm=Clvm~4kXHvx6t8?z5i*lHd<`8z#r+V&0w{d-Kv^~fA9U&b zf_2~Hmx)5^GAWEBIw9k8>pXMaPlwN=)0<5kvd7EHu!>Q8ehnj%yS`AckAtSy{eWQE z`YgJ8FB-WD5OMs5CsOmzM>UML3fwU3S*i2juS5Q(pG4tIc}M}RGu(yRajDYGyjZ>;N^A&MMdNOk)<__RT8a)1;{w~NZR{Y zgx5xFABtj#o|304P~HZhf_9M>Vc7A3e;vWouDqf%#vl2$_0`%aDYi2x&S^8$C~dp! zDR75Qv_$&zh*1Gi!myEAPmeYMAF=;ev~^S374OI3*Os7eY}ZB0y&r7EullDh4urPP zZ0;)4hxC*!;bRy`;ETt_+1nNaib=oF}G%Qg+*>5}O6|eu> z9f>R5hO9xzi>uyCt2jM=h2=zHq+pqe^jz9dFThS%ROK9^5(g z+QG2&n+L#>rE&5xf5u|kn#|3b6^!}<`=|VZEXp7`&5BM{#NRg&Lub?3HBe}DWl6k`Y zG|I&IW%eEP6!=TT@2+a|pLjEV63uaykqu}i`h7Vf`RB#b`P;d1y*YZyE>FlR>Y^zD zr?jAI-TwYZzq)tdq%O(pK92CRs&+MzKkIY$`)BVj*iVo8>Gcd|k*$cs$Q_-bGG(Xv za2>mP(>|JI_%9nD)u6X^EHOqYp+cXCGC0f8Vg{G4-9~kCc^O~oc9aB;%ls)>(z1SG zb+zv8xfeftO0w7Kep~@2Ta=cvZU#_>WbR~*pz@|0Q72i4hJNl|q$UqtwR@uPmD~6#`9cU;2pv7v2a5XD5z1Ya+l;3@xcT6Z)#$&ouv? z@*ESJICDB2CXy)k@>FGvE8pE|qw-%n37oUBHX?{BLfoeWK_6iPD#2UK8Aj#yFh6(- zw2s$_rnp`(ihOHe1^nf^^g32Qb4xDKEglgI=Z&|?3RSB3MZumd?Ye?#NxwArtnJX_ zcu{QS=Qmxq;sV~KIGM~U8dZbV3aN4emPdEP3s*<2GUj(O9ka9VvF49ST3l&=&}LP9 zGxqgI(6d8Fbh^*h7k8?ue|~QB%HZ#VDYloinqqObxE~!&5>r!+7g47l88jqxWpWL!l3fjT6}JB=BY4OvmZl+)sdic%eLw!QGVg2OV;02sxICf_70mL zzWp-gh5J7-ex5)*P-_4Y4zchebWDvPr?zugRkM;(mT&BfUp;3Ow>Qh!);3fyCNpLu zqi!raUmIMJjoBkTXeRl}#EM}nT4-cbSm>= znsPXDPX|Iw&Dnphr$=no5EoRxNR%44N~vc{8reKtw>_j{BYCZ<{-^#!8}jw_euF)T zKMCOth`mBT!iRuPd&lp);xMymsF-JO0xNdX!J`40U&o)V)fgrpGHHn@fZU%twPOcAyb)LC*~ z%F|BqWtKKpALN#IZ@+Fjm|HK+b_G*NDwnfftvuS@2;dg_ljqKZkJe@i1y2kF8Ud7+;=i^MECPr75yjC|I{*6l9 ziOwpxYa3U_Y=bBkiS^oF+Ivwp0s3|{G#I?YM=6$M5gj8!c^x zI2P-i@{NW$@?w>TAI6nn?jCQHs1C8G#`*B*UoHDe75$a=C*oWl+lQl5e?=2}2xjs3 zu`4XGkQMYlVKXT54ik(^Kh!2$j&_W(%npkF1;&Decm3xYYA##!E!kcE^`7>!ynM>K z1?`tJSW|IDp?Wl5PUzQnE1LU|_aIvpkLBk~qqueSBumTxY4_8nz(E_?1#Aa6ac6~( z3(mRu)Zdk<6$f_xcxc6@e3fIMF@xhfCsGtquyV~g?-R^{WjU*5I0L}d5TPyipx5!F zZnRY77p1E_)fxAZi&B=q<_}M#RX<6Z%N9RvN%{Opz+txdGPY{MZnx~wo>z!~7xe&aLa2J4?=6p54`-uQf|_p3E4#UXITPq8 zo%^q-)1CiMO>o_tl0{gL{cV}z3vaa7a=ovr|GuL1D!7mVQv`=#UqV z)__Wn3@2YhZ+ z^^}g5ypQ!#(I&|O=touTLYY9m_-nW{qU~6laRoGD))ktzWWS&8rE5Rg z#_Z^*aF{SJ{%zmKoH2W!uF(>+JOLg~dwTlF#0ys5js7Nm3h0bygA}UBBR8t}ji!UQ zwzLD-V@O#Oy*!ON<;7a@R|Uj1o2|SC`w>B_E{YbWsT%uJPv$E-m6?9@vX72p8#Uj7&N)V0oj=#pnXc%{>^-zTn+;>;y-@TS}6(t zE_nKrgM&j?sWJ0&N3H9_xEH7Xj(I`d8nVgs;RU@kKbcPGfdH*ePa;R|7yuLBpzGyN zKS?x{*VpDpzS{TxxSx>xlO4eNDiOezUUmaAdAw0^cbBiV^<6zIw6ZNf+__<_lxLj@ ztx9q%Bhb6bT+4RWIS)Ew=CWNaRMgOAc3m2)>9&@)ad_L{BGlihQ}CY<-mSsJ3;i(5 zkIK!1TD6}$04_P${n)vk+RmEh-x1Db-)XuEVUCKoWe4Vw>fe5Wc%|%S@gtb~{pC$p z!J2@*!_{8Abq*c|EbTDMb{L$>fp!zR9YpDS0iI-v$OF9E-#d~3|& zktHkj;e!x!JM-!m$VGJYNuw8a}JK^UDqEG6K`xPv0738l=r)QVrx7 zwN=F|SF4)gCOtqBzrFXpMZAf;xkSO3k-^Wf-hTn|LE_8g9?GBwR@h-N*Evh-^D&Wz z%u(zJr51{ld=IDUNSuH#N+lqL!lospK1>fP{r<<1lDYHG)rhOTKh6|e1ia4Auu6IMpjV_}s6_w8KuB|*^PMQG z=aI)Bwm4xd1_jkb`SNrU0v*U{DRbzd4ZpV9=PYAJHC2oiG>wL%&y%j|Y)WCQp+-|E zR*u)L5dLl7k3WA>R)Rv74Vvb-(y%3lk1^+pYTSD&SD75slE76c(?Y*rqOBU28HrDP ze4tXJ063m0htNxRIVrbVE@e1femJ~?kW@5S-lKn9EUeI>p$yYj;LQ>1kj!jGbw+1U zPqzBCSL%``U|0Pg;d2|qnLN5rY~G1IdR*~y<1~&9$hBV~EQY>iSb!TR!nd5!wZ2oy zpet34&7?}_g5aeg7<+8Jw|iJVuQTTE(=^14J}WKlqS61FiHKRN4*ql5 zwWrXM2JL3}{L{x6?QX-@C4B(|>+yx=pbkjYaOvzm$eL-C%tSad#`o~4aJjxwNx*d+ zrabF(xcf0&Caiq0%cFxW=(G;%v2zpA{WI8ZCwH>9;z(NHmgNYZGKAb70J}0`yS}ME z2zCN>xA52b^K|c2)-#LJPp6z{w0ZaTDAIfRLgGh-KwU=4EL~0|Y^1BmyZW{up4qx4YZqH-p zaY~z3uJUGq-kqj_-zn*d*ToAg?Md|67brFO-x~%FXGwXjeitqsH~$fM({YS9BSt4I zAN@gM*C||vhx1vCOsGpplFqLu$z(}i!~YhzGPt!wrZ zca+OIy-(I5ANxM|n0?&?_LuKXr&MIRy1#LWJ?9Q9G+1lobT=AQ+bHi@IaqUK(_!mr z$eT&R<8vY&)AOd)Vtv>80=zq=!LaX2~zfgohp@;T}N=S@u13Pg;Ej2ZXP*w>_ZIf&pb*3 zI;f=a=iZsYm(9BS4mu7K1_MhDF@fj83PpEXck32;u4zg4;1HLJ$X4?o!En>(j3>s)X=7^c%`kWlETroJ?sLXdt(xtfum5-Vt=uDdy% z5?ogBOu?zE7@q1;U5otV*;3~G>q~uu>d4m?TY2vZ$m%M|llGily=f3a+B8!>1+5PA zjq+|6k;$rKguVfE1_C|b1v-RRBu(2dwXO84|KQO*ndMv60X+`{%1H7%4OJ^5QsK&t zNyDQZkNY#avZX|r`PY`Tj2v{zR*T3lO*F%cNHu~cGU+x$X>&D=mCv7Hf^db7EWO(q zm$b{J!I+8ho`AvF#M`lwJfdP^R3x~a+IH2MbN@#zX-hE63DmlmzeoCcCh)s(nYX?D z;`MaCb<6ku4Hjh~UoB?NNIgBC9y3IYFAIKDpkqX|Bc)`%_*C8C<5X&Zq&>g)Eb-%I z-C%kCzVz*2Il*G@2?do#C#ad!d=YneO6p}4|6cMeLmh&i<&~8- zk=5=t^TFo2GtPa8Yswqb$&@;GOG61zN0^*BIat8rL&xU!<+SIn@IqX!y)xMU{`a@= zt@hm*3;(cxdX%I&G&I|WeIhnOUZ6K`>6x!D)T~qm>m70Ochyn*Z(9-$w$>?Lvin1& zUTZ^oboXxt%>Ms)d_b@4GuJ#zXa-jpP8@$ifF?GDb9~n9P`rTCCx=AU%~ItclXKia zu+iMq?!g-mTTEkVTqzcjk=)g2-2piR2YF}c9PoJohJMss2yd@>jr%brBe74YeMIZN zb$~^k?NP0c#0q&^+dJ9+axMS26x7T3b0Wind8V{*e6(lgM%bV6(cs0KW4DLZ)KkjN zw5lJ z$es`on;u5A8$I_+x_2#u8RY193&pzAbfyV?0HiSI=Bv#|;b(N1F@8s!Y4MBO5p_upmq^am}BK-#CWb+*e7%0PUnl^ zHDAHjMJ#A{pz0e<52ckdO^3XR$UAw~b+~391A=M8t&%$zuZ@_UPTP)k%nFMrbg|N? z(4Z=O4Qxnzx%NxDm%CP7`^RYszBnni7gVfUXV-Pp@;xc@nXg;U=>3pJ9~`MXVa;H; z`-V)uo5a?h#Hp+LRp_u1!7U1Ii`KT360xx*%K6$4c|k7Nahm)@Yxlu9R4qVpXpdTdAmfPc+7crj!jCS&;qQMp3i3 z&N1J6A0k1e z(PR6r3TfTYmN-W#j|em_x0DS+`iHGO5Wf-@g_s{KYw7!5*3v*rEEn}Vk4}tP%FzGbm1RV@F)nYAjX>+{ za5JTv+;~YGfLpcHD{qRI2;GTc**(dj0# zTW#7p2CvhgAN)IKBpM|812cZ-##&X{#!1@G!zPr!;hYnwO?Ky)y{52|XB^@L0F~xs zJgOmC5JPL|-k1zBz*~mNyM(C(Pv{Yx&(%7lt~;_YGgGNAOE0^gmK<>OQuyTbxcvj} z_w%M3AH^!KDsFFZ1&%X}rwN@?|9EFYleheUkolG>3K7*ed6}{HhGX^tx_tdF0A!^e zPwmX`XsC&+`R8zV7J06r_MP}ks0H z3^R^kUHoSQK)Ru@%MXuU=NRo55_ow|vhQ##D7@%8@UbUI3dS#)X7e%Ye(B93drg_- zqHwE{%chfkw#k|H{Y#(mK+-W-(o8tl@aZ_vDm_poKfhTYWj3q^rgB) z&ZYas{u}`o%GZG_q}kspFS9+(((N*wj%F(^rUzPR%Oyf?#Ryxjl)3EQOe1OQH=vu` zb@VGZ6&oYyNK`A~%C^k~h-bFT@*j&U7D0h9Qsz|4c(}20^Q^UuN_Uu)D`uW(d1GDFl3=6>&X|q>dshw13JpVkiD8FCE5s<9? zu!l(q_EA}0fbepRv*Mg#I@s=BsJD3MXF2s-Lzk4wO63Sv$zIiJ8KcS>ETRdk*C zw?N)%R{w1hx&FF-v!GKZ>^m?c#)`qEzZ&}2+Hrdc z@jlhG0-4Uy&6Bhig`@{ApS?~ka!(Dd4fM{Q3-TQe%6{;5jLOjB3f42$oPpd(CvI=9 z@#|bamL*J#eF07ei5p1NR6SjQNWzYu_v;1_Hqi^e$=6sy-j}oPdLHlV&nUoOZld=rgyNNl^L5raHue<@ai0^56`BnCeXO!{ZRTYs%QMU55TP`t z*y<&u$``SL!dxzY$!zZ6AL=Ki+4{(B$d6?_>YHW=+5fNhB8vhziJ-zInQvvwQIgK)R$>6 zd4UCBdxw(u69CRR1PRyK$FwMgCC`>8%&x_Yz(s0U$+PBK(^Dxha|X4|47erU9o{rI z?sQgV&})m&#^>l~H$JI^>c6?&sC7MUcYW-h$nGGf8zNi=nI8RPJ#Cl<&n;qJN8`;z|K|ieCq0 zjGrq=6d@qavTQpVEGpP%ID-Abf*{f5J*Uzz0HwlI74CU??D=GIm}XdS+uT2MkG4Z} zUxeoPAfnuUoiYKdKCE;+wO#&@X>;~`)>osGB|=^UpP`3LH9riU8+5Bshb1X%iI#_c zyB0pIVw!H<(QV_BP(HWxD?QWuL6=RIK+&Vs`(a_m@3nt!;CgEz-UtsrmcrD^N8pDL zXL4S_yh}Ki%;Gl&S2+(D1J=w8LM-f8D_nR0;VulCV(s|} zv-rDoaj(JVk>6Po4sEkOXY9Qq&V3HSyddT3RG&$3JbejsH4~u+I#>-s?LoUCtP9+< z8Bi+s?0&9+5+Lrt87NOIAJ_H=P^vd;zG-`gQoP92A# z|5%sFAC0U6sYNOIRIu5XoS~wmR4vtQugn=B%U#OzTUGjk_lW&(TplGV)$3>A=$BLZ zE=RAFn&O8fKIII{=w@A{>D?K4E%%Jw=l62|`4E1(Z0bh~iV-_)OGri~oo~V)1r9N2 zVh-d8SZp>7CWigQiX`lL6Qrs>am+~A3)MqlzJ}9U@4roY)mk|?j8Lo+sU)|Ub?BE( z{3vS1po(q9B5Z3_G?K?Cq0ud;7V+YmYy}Mga{JF|bA)a6-$Qc3jz=n;F(YolD zfzNSr@v7HdWC~w+?;h}j0vt~hTm{KMGkD}`ig!+HuN+r8&!c|C_ z$)1<`BE&@*S@$i;xR8}~?uw9|{mr^$6PKO632|{o<}HzN+=X*E*YETD%OChS@9}(| z=k>gv*Nb=_3`5axp!-KLDHobDJqe>J=ix?llxH;^G`I} zpg?^CWD^WkLXzr`&;joUA3U`zYK77qH?~l#8SGF!O%#gR5OTekhF>R8gFJ0=v-mfC z0@vhCj}@Nw5!OI{0ey=(@nW7EHxbj;=KDx?L=du`j>_E_J)Xe;H-x=5pU{ux)a);LYD_^`2leURNvgs zX%Rp)8G!I2rZs@dnl9IM&OnG>L{w@cx>FR6oXg_(Mp0b$eK4Ygtno2n&;<%eHLXC~}*`pua2({`zhQ$UEtikG>2WH-e&a zPgq&IJ11b8f(T{fX&-RO+Vitq>#0ntY zD|L1W3Apz)*<0t&rd2YgUz7Ig;-Zu14+V|K*^gobAC(gvYQ#k1`Zn3G74TJurIlx1 zB2@Gi-x#nsw$rkh(-nlOe82KgfOJ+)4c4ksA;$e@j96~<)-|lwrqWWie9^An%qr>E zj?_WIKfodUz#MD^+ImFvJk>zKv=}Z)0mnV3$R^tL8vwfaaa6WG+{I5hlh>JIIEHo` zHZ~qLq=_!KA1?D~vK5AUH?-=!6+SmO!`#3q6M(H|r9tTRcxVbj3#*TmaJPHO2J{CcYp&CI0U;zp9exwK(->Spbk6VbDeK4^F*TrL^3$!MJI>K+aP)@c# zaFh4*(J?R7elGO$Z8#(>pcyv9Wfs1CbB<~_Z^W|8HOg8F68{NAu~rNq%(N8Ii|$am z7#9wRF>k0KCrV9`XO%~5aGbit(+IoUlj`|*EpuQHvS&k!T3Z|Jd4cIzWX#1%hY_i- zD_=ET9zETJ0W6O8HK&Ye4!W08f^~7mlBrEjv~gj`@r`56SMQiV2P#!QPmBENjb6Xr zVp)kcZnU3qs`ui^DHGIk@Km=}3cH3FV2*+)k5E51X+6{;xF+3%1Qq@XH$?SL(l-q$ zzWqC~E^>6w>JV(tE4=z_yxuvux%;^fByPFsQ(1%ti#yvv4ZA^S8Y2wmxBqaY0Abno zw&A3nEe;;4+&v1&Yg;k+8mFb`K{d!;vt@&9=k&e=H`!>3^oP#6$1XP%$IBse zlrvwich3@1dUgau0Fodd5MMM;<0*6(!Cbxv~-JM`*H16`MHsewR$|P9`vOvnrvxOh^G^k|sg*qo^n+HOaE=q#D0rLP@23>g>b!_j|DKyEDsB(q_Nko#KHc9c$ z{H!%KwmXXAJJ4rUJE1m*ei5XIv}~Jb}%(AV7|`Wr}mb5DKL}6o2dL& zY?i@~X0oHv%yFjVl%6O>%I>5Q`E(3IV2j>YWr47)4y)QU9z?@_*-Y zs{A~%(?|Vj0e${H;`cvKn9Fx77z^|2h_o0tT(6j=HIPh4I>id4mV6TT6Z|8iARodP z*9Qje6lNt946e4zKPlYGhgoHcS{A#S^UDE%gBsy`X&Oo+D>yzeGv~zj|0KP$;wQNV zH$u{BJ`_ZZfr5v@jgu;Lr!w%J^9{-pfEJ- z7S3L|zXc%=nzw^=36Tj+Ncz1?{fhXXoN>%SAD$GL;>Z7rEzZYl8*o%BsCyc>#oU;P zmG{0ahAfy_CY4y`-K1Lh-~G^{dHr`nbuMuobJ1+ivG3UP*o0li`9UAvOU^2# z@xaa6K0c>R$wts)G~j52f*}`DSO-uIzzb&%Y)UmQM_od&gqUH6z!%^u%n1}15(bW3=A{FzN!JH6 zLC}~^9q%AL-Ej18y8^N4RbQTvsE3rnN~H$JU0Ri)5W3i9fITCn;dZUll{vY!LpS;` z0sRil`Uaah}|?R{~W-D;*RPb5;U%=kk#YX$Sd-&K}Y9@HJd62 zm6<*I^~uaSp`*t4&G$``3YycJgWcqkm6?iffq;tIZ>;I^;<(FF*G^#^Y6|Z$OX+FXnjhg zo+(dJ(EvUHGB-PDphL|{Dffhw-Cw@kLRAE&H52Wb)X0p8g7*zeKx<6Xk4-WZX%(^jcJ|n!{HZW5HaOMiXC>T!U1#QG7ehaL{w2cNQ%`Dl#2U zbMgF5bKhqJkw=g9oas24E#(}FnB;0V4Iu8krvYXapTX%39fLOkNJ2+=FYw;aM<)e2 z<_9>Mzm4k4PW1?Wsb(u&tA{~$LEMswq5>hz1Rx$bpTsjvkL4J5PwE1dCFu1wbVW+p z(7bOSR8qa`P2&?1ikDtyKdlEYS$_$^$CV`5r1e>44~VHxXO&!v$XXpChLU7Hqoook zP<&}R8qN(|=W1pTvKCS6R;d{ccK-l$uR$RAX(~^ls+n(>J8s?)FM}CSW}`oOj^fn= z#zYtaWej7=+w3#%iiP6b&nN2}+(d%*msAJAEM55AYy+(c!gM1j3fY`L6o-(YuL`EF zU>UNn}rJ;tpW(iZZ-+`Gh=JRODq>uRG+*bz|oNAy4A5Rm#k@ zeD|1qS<#1$4(c#sOB%fT4)Rf7g;DtOQO1kC<`lbkwSlf0<-IOrPd&%{O~2X{-97hd zCtORx_UeOlQ*ElKD`uFmkkJGj`4OwFYe<&o6B0$3|`*;V<3hyEG6f#`ZThE1$0suaD4N3x)qT9KHY2eynUq8R8-yq5ZsblWDRgl%xetP=taHDe6jt=+U%|7YP!S0 zkV9#1vBL(6dk+}p%8_YK7|hhDR=eopL9=^*TfJQI{zTl1U;KSij`tt#4iT<>h@hk} z*}*_4Xgq20{k$*YdXk3p8G{W9+nr_y02%ikpdBpI*u_cj+Zqvk?yYItIoa^;i4F7` zvgsT3w30wGKqr!Vw9Y)3AF=le+_*6?iH2T^s&bd@m{nIoYoGQD2y5){GJI&t6a=CQEN@*0(qFb zZO-;jaEk2zD<<2{lZn@jM$ zWWN+*xv{IQ?1C&ZwxlwPw+5)RB;01CWq#0Yg(4LSvQGs-;iE> zxks#YvGUKqr~YjJs0yI+3#HTK=*+NDUs?5e`XzOlK!Wuo-6e zx}5LCs_pRge1zqs85M1I%GQ3J{%Av4%BM_~*ejcT>PYIhI!4EU@g>l@lz65p69YY^ z&~8VR024LICKTV>^i7Hv)|paMSo|AEmm~G8N;X@^V?B{I5GeSO$_h!kCwHW~4u7tL@23A7O`?LJSYzZQuT*?$V@ zHvrQmNXQiMCGZnY=-Zr3W;%72Aj`O@i7z8_Q-uDqSfm*S2m@(mB;r~l)i-KyFj=1ve1Qbzb0LZDiecv~e8`>8H&e2(w zllOb*7+gc}0O}(B*qVZVgLLyv)WLK^6U5N(+EqS3UIYegu@g0l3M-VM$h}AknY@x=_3ML=$f8~|bf?vhu%AIU ztfNK86U748!YbP;i>{kmgzL)rnNfnhg8dGx4v=IUU{j<|vcax9V(VaT16ds0j0)~| zHt9KlUTg%NVTjXRiO6`wWeTznW?q$Gp7PE>GxqlD`4HFM35a_rGdm)fmM)k#d*}Q7 z;Y0HuzoE^4S+<&ib(cVVN3c?Slhl1hT$r;sUWPYS6`%4B;G}ijL9%bU2+_k!pl z$<17HIdzhX@1PG*RB4fv#9(MW0I2XDYt1_^dTEHA1sZJaMiR-{Zq-i1FJAa&_szCe z6^ljW`pihm(m}zCiWe8a?*2aHZt-*uFXn zeyb<*`LRc*?qvJ@0rZ&q+SfKzTC!pUzH9@aEd%DiXU;DudV3oOMK?5l=NQ3cn*u5Ry2EZ=I2 z=awnhf_SyV?@grz#5Q`B=)5n}GS3Fa=xt9j0X71@5?YIjLq6LPMa+kR65F9jiV5MM zUlB|QPILjWZg`WDI0ufJ>Io;p_Z!+NR$rZOKVBXs=5rj)A3leLHURZ})3y8jCIX;F z0QKXg*`A~_f_y1MM4=L@>Hrg*($j?F)3YN$qflIMBP#eI-J9}fUFaU%n|h_;b`ygC z$NXI9{NM)7;*O#|Vd{Bp{2;A&b(cOjwFlvcp95lv>u(p$ALK?w2p&f!Rd{utrN{cD z4J&591$!XpqG+GGsJ?wT{zHG=yJsXd>8jpDFz2YZcbt+kF5HR& zbSoKx%1lmSO)@WIL3TD$1=>ZW`SHe{WC*2S@^YPgRQWS#^@OhuI3WMyAx7G6vcFa2B ziQKMcZCKZ-z)){x;`GPbv=PF?O~_kNLvtTG5qDM*K$y9OnS7WtaILJ-f!2Z|O&~h6 z!Jr(ByM!_M9^v^Cz&Q^h07RYl4qiDz`OnnC$#--Ye$H@q$Vg39FPnQ_OxaDP0%$2A zI}z*y=xe0Jf$;@kex@X15XG*Z@)Ji(oHpR1?+oEMKAS``6bYjkVfq@APZx%cMd;1I zRXLgyl|eQM_uHm}LPWP4@9l3IbtG>H<{oKMEK^HE)@XjUlLl&V2;J@2cs-}Aufq{2 zcSV@89yAy6$xdOoSwjk>YZ4wBu95x;CWeb?fbuNbmlnEJd)gj#jAeZg5T=YN+)tNA zJlAE9EHYucj;$8UJp5%X_-x6`%D!^%kqqQ#rC)x9k=gXh$)~iJiJ_0z@wN7?`?Xei zzb)0IMDF+{y4~^pN!ZXHL`+Yw_*B6T*!|}!^Dr5QL$rT^16aWv0yUxs!1PC;^Kclj z8T9+;c5oHFtp`cThig!geM|gA0GQ!y*$P4nGE`>uAWxpS6UT%hIrHn=GLTy5lQisu zj+k*rZ_Ni;vjKQvhM+7>;iR}z9rYT=iMR@z?NsZMR5W0ph8yCQ1wvfA!Gg2hw-${^ zrU=21O^4d1AB^V(;*Pqbxf3w;mYl)yjbn)80?gA1p^q3p3hv!mV5MbIkz^T)7m^jO zaFX+vgnP?_|Ep%hVYCmGY17r*;8;aVz^(3M&q?MPhvD1T)=$hQG4mY0e@?qBtC|qxznH9@Q z`7~MuOAGk~zA)!_&u8zq@0MbaQNFU!;$qo@wFo!Bg&3*dH=2WHFVsq*& zt(W?C*9b|##Jm!#`O-S{u3d_IqCm>PzIR( z1o(19K}L6qg~;}Tc-3wo@wqMbJK| z$dIp>Ns3=xTh=HfsV?XW3cngf=)3%z3H@QLDX(kt9882)Sx?G z`-80WR#tl6$|v%VicSx!$!hk8$5Ol}j|X1fPu<3hUG>-hd8&YYCy_>aGmQTAmxZPk zjbn1S*QB+u(!A)S4J0iPrJW(!7922lyvO|}X$Wjb*#GS&?&_kXw?{b)EE=nXEZ9w2 z`ONDdK+N|HR8xM59X50P$Z&`@`;g|T8z2ivZTZxsZ>0M*wSr11h;iHnVAwmQ3q%*{ z<}($N_pCEZc7)fS=w+B^{KfVm0=LHU9;1NdJ&wtK2hkI1l z6d9*&9SvIOA9YDZiW+d>dNP*|Dy$vU>zs~)){%Et{{uhw<*5MqQh{836aVpy(k$O5dRpee ztzuWfJt1sj)a=Kd#N>_+Oc^MO$L~$rQo_X(zbRMIJ@H+8y*`m0=7g;#^YNcoOe4v8 zhf(Jbb)zr+JR=;^!{AnHuU<_DD0NJ3w0ebnhStyaocHS@pkvV^Z(?S;8iNkBHotD> zlzs%gGQn}bzhy|CT<>CM3a;Ph$))rWekIhr>S&H^R~Jv%S(Q*<5$7q4V=Ej#wL=N` zCY9`OLfAxolr0?8y&{6q{=X@$vLD7_#6IsIrrdr>I5ekt{;-rhe-x-w6y4WHC^FNS z3)d{ggvZ~o9wn6~sym5pa>Sr}T- zpbF~6A4}DR0)t-GrZCqs2{xBQ%-)a{R1z+GsXe$@78v(0U=DS`J;$R@%?sf4y}7XMpOz{=&~{!`xB zuI6T>4_Lfl^B$OINgs(ZV?#?Ne;{=oVz7%3Kos2UsxqJ)BWB44sG=O9e8K>37it%C zI3{b5-}P-fbQ7DL_k&g7rOKQ4TI1S1-QCj9Bo8;V#Qh8XhNV&Pi16^;q0Mpo;%({V zkKV(;5QI+tlIbAti$89n+hMdlhKWOFghs@%Pka9S%tF{Ja~q_2aClgkV@K9!z)Bm8 z0sc1l#6P}p2fbf$*a*b0(62%`ie<{Ym+dn{02S(rm0G%DbK8x&6Mfa%obk~&h^2Wn zJ$+Dq8jR29R~*`sIhOwZIk67TLU&py`uF!7B{}=Rp0C(FuR=_#h+8$G+VG*v;`e7Y=Sv({K#sRK_Iwq0HG{Q0~40E}&htQTbNnxsG& zHeq#<+OXTId9M`|<77Xc;eCku9)IMt)&vG^V(z~ha-b;l{cb+OB{n*Si$sxO8abXk z-xT{EI}%F#+0VX{v9dMg)v`V{)Y#Wp@ng`o!q!ZH6pd1S1^q+IYz*G?R(!Q*;q;4? zr|)Fx__oNHugW$wT1Ldk#kxbT+0+5kw(!rfMms6bRr>VpVJX?NCD*o^fWh#8^Ef!x zK1u<0BC=AlUk3w*e9n_tc-?C0zGa`}y@azhZ&BMFx0>JByT561OZ^fMqXdj4KDa42 zfa&WH`{(Km@o3(#x9wiD%F17sP-&y5ANM)sBvsm4jaRWjdfdxBI@ZymCx>P<`0b8#|B>QIctgOP zTUrm>bb|i3)>NPHy*^*%*O;HYnwJ^sgX9@L-7DX?ChBzG4)CA-mkbY~S zrL@PSoGV4bvOnU>G}*xj>-q=2fko|^+siahkWug4>0WJ;N`tna-gy3boBF^E?=fqz zfbR`wV^anP6|w(=t!s0C147uxSQ&#cNLQdiQ84xIE_PQULf-(DQgR*hFPlC)s}$J9 zaO+ghklrp-E21(&vAJyj1m>+2`z9^qoBllsT@p*dhqbQDdDG^bmn@9u$jX;Z$tw?A zK$V(CA-R`|QcV|Y-rmY{Ev$;Rr>1<|Tl=|ppmz~hq85465|D+FVE?wK#q4Z+kXI;8 zx?wa>TAXX4Ug=pD^gOF_Oc7lxc%!#LT+Uea?Os}%rILn&nW9%t>%4=*x(8AX+F+X( zh@s0PBR{7ZXUQYqb=8YosdDKW{r`HtlXgBfUfN9i{HXke&x4kEuy5ui4-r<0H{aH} zx>)=}PheCe?Zdla;AR7eL$pjTQF*JqTv$4dDL@rwIjg-Q*-sPMgtpQO*k-p~`9!?Q zj}oI>|0_yO$7BomXR?a+=koYv4yhl#k_DNGa21qZYq+BQE5uXVv}(9**Fhc=uBd@U z6QMu%E1!opatVo5n+2+JP!m06uRlz=^((P>Iy232ZfDg`7xYnrIxI>;BUFB-g{%}fgi!|q=d)wfs};pyxrQ>Wkr@5@IFb=-8sX8sc$IvN$Zajzk9w3B zYhN(65`f8H{SUy?ct2CzNN!@aMC*}5_(YDUuJQWZlE#9kuJ8JbDm?6oSGdlemvuo( zTCt3zTS>ERnz!%sHs{56MLb%vWuj7G0u!QE;CL}5Bap>MiXzMQh0*zT>TqfJ;J3?D!l%_+ZBSJr*$pq(jq9AFH+!r_p6 zh(I`cHBZADahWJ-IPJKgz+r!H-M=;o;3Ca-o?rX8CjLscoP19(g_0$qx_H7{sOP$w z9^b?!9{wjH#&3slVsYh+B#ZW*)IN=r{u3eUw8XctJ9%tSP@&tf^?8!!7v8*HW`b0j z5B^yrP%BmTq-P~{PpVuBU1K8PeWSMk;`^WYK3gZ7-#B6ik=}&Y77^b~{e$<{-Z-WI zZY>I{j`eT=hIdXzp37)ACB25KXHez2o(+h~dbl1BUdErfv|IhI%ox>>=hGD5S>5J1 zIesuXI%>Wi(*qH7P^+j249IOwe467lhWoVO=rU^3Nai#Vs^x6UTnLs!DTaQ(sOeO( z5clki@VB!UqR%=t20Gqml^d!tXjv;{rLHHRT<_Cfd8xZknhGQ>NNpCRh%lA3N!0xz z7YNbh1$9@wa=c-2_Y=Qgs>i8k z6c3W>lAqNUN36cDJben~f1Bi^63Odt8IZWQ1C8mTSOB?$Xwb1uqN@%#nMdUtD=mY% zk*tE@M17~GLt8FaaQK_tVc*1{@6!MonUe6lyEX0)ne7Bux01gsb2m44nqp($U#t7= zLYAXvRyWzl&ABY`O&H{heZeUPjEWy^ON99W8k8mEw zh#6m8U*E&0y^2x%tOQh6y*nf`|@^(JY=Ns&Hy>jZD)t7>5H=nB9?6b;rsA~Y|>hu-zuwdy<_>1cA2+@ntzcBH8(QhwRjj^bSWHT-c()H+5GCz zGh7Pqr(XGVbL2Cw<64GPu*ZP?N95i0)!>yt%^OeWR=YMI(t z9ZqZfurF%q@+IS>@ln3#LDzO+kVkc(_riz9j?wJ*F(%!GFh9f6_S9)b^eK@uVGE#H>E}=lne_(ue$eqDh=D zd03kz;w0g}@<*FiJvmiXRi3|k`uM+Qr?h~yP-(pQYD4!E?M0Y{M^`LpH7%?uf4jOd z>&UYOlecP_=fd|kx8izR5qb%zWN)D8=-wJhh5cyYL!uk)hwCuSM;O^9R6wR#s8*HwC?&0J;(RF%fux zFbPF>!EsvxGfUqz2c?lp`aD`}qKC6gc4<{=5owTJgl>9bSk((HE=AOE2s)@wL#i0{7&;NJdP&%^3KyyCMfe3 zj#9|-ypuN|S)uj5&zS?b_Lwxw~M9|~d z40iA(!P@lkxWRT@kf-xdb!JmASOy8p1kHn4F%WtM;&NgEufbX0hriqLfAqC5aI&xd2h0$Kg=eZ9)H-L@-(78 zk!CPAgx*8%rmTAdu11f8{<0*7E6y@;0Lha3=U*1v&bPqk_KTW2GREH&IrHG%%Xya->0r&Vdwl#Z{d3(7FI3(z98h zi&`HZV#Q()V`$UheCAF&vn2!jpfQUv{+Gq`Yjw3-sA9IWV)<)7>}9~h%5?qP5#n_e zb_4ShU}Y#H4&-N6{zgHZ{39a z|EF*71BP?*gn%A#Rw}10+Yc5KQEAtjQ)pagqR+AlW!|={{`+WgcFJ7(I@kFhW5od(t1yCJi8sL zeOv<3!zU*CO=iTIygK7r2zJQ_K7p2=7)(f9VoqegTej@uP66-zU5H&|;mF$V;sv&G02^54b)Qc*X>@^oMMP_$EK!fY#Gxv60%|?q!unn0TIb3C z`!AXdAd`3-It&$KSZH^PViFs9&hJFtK9d@C;P)Pab9>z4{;Oe zxD8CwelVW}L4S_Y@+oi8L7=U5Qq_&CGD!!0=!ddJpODbhmgi|*P z*sg?DASQ7@YE+9I&ePkCLezJ9ug?`isC7 zse;eCYb$yy)v^np^6zD|Pi=9NP%3KT&Ly4+pkNMyx9M8~} zk7WOrqwhYT@eyUy_*1m*5lQw)e1>s@fadT00btR9JG_GB`4G6t$91t4OCEnwfIwcX zbtWoPbnx6w`Tl*}&jXr0Rr$lUs$)Hdj4z zkv|FcuIjx213F0P?5I{KcgT+ERMY$K?B>qlcPZFEY$K)XU;MH_Drm@L*Nd*`;7jMK z37EJ}3D<*_R!T{7qfhL6WCXz*>6D)t`qZd&i;K+033c`Yups3*_Xi4rT|D&7UWI-_ zy9)L0pf}e)O@`*Yd>ftDu-#7F~Spypa5Q7pd}0jw_UKYl>ywWv63?z<52#P9QhB@ zX}sD>-rL@;91c=1>=iQL_g<&GLuib=W{cY|Xg_VRbX{NPO>$V`Y++1@n+}9m);ghY zUNw`rREqUh7rvy1#Xeh_X^yW4XcJ|&7o#8BJj}a_wSw2yd7Cc$liyOkV}FPwUckgH z9(lHgl2iNXneh5oXk$JSi1|zIul_el?@&*EWY=iW(mvu@|47;m}DV z2ZcL6n(K=~a~Ws|x`|@atTT$vhH8~p73ZU2o=9n=IXW58240_OKOQnsh3i;NF`m%f zeh|J=1&m&={RmhnCquJzpyXz1*2qJcYzk9?9vP$s0}F(hm^DoaL`9|z5daTQ;fuqG zY`Y4n(9lv^g%Ty%qm;9PchU;|%&1K}#`k-}snYH3$8TsNvM{Fg|&Kpwrc=cRc z()E#-720=H67kaue&+VOGBq{i(EaAkbgqAcMY@M&KmOL?qWH~fljG0)8~Ba3wvfi7 zEuyw{Zs^R*bBil4Ri^Ur?mtf~JwqjGXX#xipYYUFoNWBz+l4=qW1(}7U5iX|N@4Qw zk}hC-Q`dSZudg}z%lyYVRK*P~@Z15ZGqmwPck$N&dw8zdapbuc`d!MGzbw<*6bP1S zRIOQtz^$yHij)r|z*f2}tdI_-5|T9I^lImj;}DDQL=qmr<%drA(Px7(5N^-1f|EgA z))cR8fFE0)IBbk)uSu3Wdin&0n|rj=tgh5$fM)WRygK^JV(D*!& ze#ii-@4b$DeOR;TOB*Noy3pW|0nPQv;|^TzD2p~DnRiv2#*9clTX3&yx*^s5%;EhB zgw}neOTg6gLRnea1=M7^l!V{@CW^aeX9Y|Opb=Kgx&e9vkJIr*H4?E256MC#s_-IN~EPVR9MDFc2kK({FRI<084gX~fdyBEL)|s`W&XX*LpLaVwfb?|fqfFMq5SY6m z-!#Qquo1)#bK%cUV{t!beQ$pAjxpPOM8wSqUdYg&zbyQgbBXvZ*{6GTdAysff z9LUYH8~y7irV_o>D>v1a8XB{Xz5F4HJ&%An^c(VIOY2D6KX20*phH9`40IYu{uOmN z-xM2C9uCwiSSpr4E&_IDP%xKi1AF_`R>R)y_NcjpmJsM3&qPx-fA5>+}dfqgVzi1 zN>}S)5vAU;k>_~7O1#urD?p-17IO-lDr!UYBjn^U1NL9()(5~Up_7;V`!y^J>1 z)8?+Lw=K8x&mt-hv1hN#q}rVk;4}EnXLyP8g&zNV!(S;bi?$t<0|LMy$($XKJVgP& zWAwy$!+H%Qr+y8dmmP1#uKXv7(xCL6jg@xwSX0Z-C^v;s0|xe!<`d%Qme8T=6^V5Y z@#7-@>8k_(UT1FOwYCnyj#uEDK^eJ&1=l9`F3E)M@v?6mA>YAmDvYx0bM3LSWP}8z zo$vL;;u7aj?BnUltDA1#Fi+Mxi;z@wutr?zVm)WR!N{GtMU1Z~oZ?@1mhZIbO6-}S zo?-Oonl3l+9P_!VJzPJwx0yFf*x)>sH=ZFfG9>HoNDp?bt#$GHlWUw(U{h!04+s;~ zCCA4@Vh{>&#~)^qPou1-;3_0X0Xa)n**LhaMlqG}(u7v-uk+RGcd~DET72Thq!rU+ zJs8%2U)kF6ZZKPr7sp&1Ft%>+m`d957{0beOmmvBnxEI~0;pOJikTNvgy7JASRWt&^@u+7rYoK-}kL(=;kjI+I^FAjJ9+E36uTw9VH zvfn#VhICAorrN|0ycl_TPj+JzH`hia=c@k33Bh^M|Fjny$kBr;Jp#V6y`E)?QT2a) zd3x&Xtf>u#a^o9-MKJhI3ir_$Hwv!$o(Yi}yxVFrf#LnUPm4I z*@=Prib~r-mlQ2WCYQG(ToxDRs|P;Y{=WA0E2=J8<829Mf5bl3JJD@T+dM z&bzU6NSdPcPLsECYBhgyCDA2*7T&O!>v;`39V*kDyF{0Lyu2#9wVjc6MB+y8!Rz6{udY(0j3{tcEekn%|DQS3y0hF_-8Ix2f>QrKusNhIAR*}HAX8%sjO z2wmG*@4K~p7ToWQM;0neF9CC9ZtW=7bXqw5qi_D(molH3teul9@AFP+zN=Qn@GIq3(qc;*%tE>J+a^MqD+C8r zik3mV@8(#N!Nhldi2z^_#uWU*!Y0-Au;4GtntD3*@=a=UFYAw!Hlnh^y}v9U6jQYI zjrBvA;g>aoMD_CU{%ra^J9{LcH~3&C`I58E4S2Of(f+hr^FrZX(sJjud56I5uI;n3 z)0^uDp_d0uTsm4#RQ|GTuDhU*6|Mjm_E;ejA;SpN-YkS)qLH?67g+EYAeRfY))(z0pU=_|w*dGXf!-8B zB#btpYv*2P){AohFY)pQv%f6c`*uOi5!0B)dp-KK7AO5dJWd|+ha|g$vACk@O#iQgq%K`xIgseFzghRv-P;~&&1J2#Pm!O&Mm?v zySbq9xDl`$8->snR*{5dkVps{Qyx0EvXTeyqs7x5*kq+H#hytH8PXaWg7RY+_It9I z^Pv{9Xrz#t4kcjwygsi46X-TYerE;bIseeR_4T}u^~A$d=H&@cePC;}kL(6f0?D|@ ze>DM8=iVZkO`Gca>kT`eqc)^aRn^ATpvbny)`?H*8i#>_6#WG zE!o7m4(Q2O=>9gy!;B{=+zn)|#eQei-JLo>)%8}J*{S$q53WXM`63!C5pbnEs=R~@QXh)o*{Hx45Ke%Y2U&uOno zy}mu<+>UzRh5v%$0=$omPqOvYN#JOv;B_*sfHUTZP9FmN^-(=T1#s5#i)AUNR?RCK>D8v_b( zSdkndvBZ?V9UgjFuK^o%wW@45fC%COl&og#!h934|GmKlymi*yTdrgfv}Pp;;wrzxY_MC#)=G;onfJ z@$2N55lroHwP7{$VS1>o`sjyn&G66a2W67ul;j!g-pCqF@FZcU zQ$1zgV3!7^D+W-f)u*T?42AV}!7|iElt7={q7kv#2)fk*x6QuSJW32zTbt$iSY)NS zx^L@MNM)m)J&8joFd$O~Y7DEBOaw3@Os}qTS#M3QAfd!U3~>EngJls#_V%7(HiI8q zs}|P}yj{yYvxFWL({33nZdFed`6`GpmZ5Z|=AK)Ns7TL5SFof)EE-BLIpMvZ%;usB z0h}N=;CvWm$~|{2%uw!SOO*m7;Sxst#F%AIM~RcTuQsjkDk$)mrSWFY-KF-2Me_5b&sv*bnIKQ&x^aO8D8oq*@;&Eww9K3bKLS$NoNNJ+m(#0)!d3ZhQJUKR9=8@ zuFX)P_f&_N7#avt#tTV`a;xM$WuB8(Z;L>09ZvI6UEOejDcPJ2tt?!izxKtt!E(Tm z)*Xbw-^XpOY6b18`9TY#E-yHJ#;OHU)M^<6v<8N_Pl zNL;=VqP%<{>wcZ&MXT_H;YcU_G0d!Gq1M}cD@0&hdC~Ge=f8!&35|TH`P0V0Wp!c1 zUtivRX}Zc)d-#aRmL4y)(a@JJqbab3;6#3QfeSN^01SKqTCuUQrj4eFCcF5y>q!D9 z?bA501~gtmD%aZ>waVZ8J$imz5#7Hph@YOvJ<3s|QLNZ{L0@uy&t`l#d#B#1SHCng_-Uu>uMRkJV2sKQPyAO$Ged4qsT z?a<_7Op0Eu(|#%_G#g`+k7d$ z2c8Oh>)0kD(}gcx)_#zsUTp3AX_ha8>_k;)17QD4+)<<$LX(%vmxRmEah);Xbt_IT z-SotjN6SdXd8c6~moVao>1C_Pm9VA=D4$GduB@#Z)b}l2D#hcEcWMqVglf+Q1MQoI z5Iyo7$dB|B20C{mJs=eOn)dfTCz+IYj=*xKK2I_`!t(!qlf>1Uww>MwN~L|=Cm@Uo zGVIfFEjz#v(O=4X^X}nl*8NDgOjV5~_UY=Mb?&P&>W?sP>x|}Of8T_u7nz%+W^UQ) zL|4|DIP8`V_;*+BH8eTzmb0|C40!2~hsHdgJ3K7J2lWB~WW$n=xfG!5@Nk7T$0*n< zeQT*NuJ0%-+$(L&yJ@zPI-TKT5#ya{lQ)jEk5{qH7rTI`A-KnTt=X(6KBh(8y3J7) zCJwO$;HBU*BwDt_uoByEBD;OMYl+0YIn6dBr~;(H7m22t`nY8X=R@{t&0iWn2=FTL zp@r`wx2F6NWHO$61h+C<8NvpjBORg}tsVJ%kx~{!TAKwEL=$A+pTK^Mqpd`X#zM=) zC148{(uOwQe18TfscJ8qsJ|Pq+xFsDOkiyG@HPR%%bxrOR_wotrFX6#|C`AF)mb1N zU0<*yS5Ug)%Ui~M!O0Nr6GlYhutQ8I3yZS1%FY;A-{-#t9MmP`VLOa~n;Z9FtPIx%G{2 z3_J^0n)8k|S5oef0OOk|y-o@&_VZbgr95d~4LC82Tv5}99Q`EV)Tj)ci53f{gZ7z( z0MQzLms@hY9|vz89(33W+_N~$umRs5GJX&*0!ufco?Fo!1mWhBoRMiKK<ju@M1ZGjupJr3T} zw^_WgU#Vk90)AE3d^{~J$~q=u48}7(=Tj$_jAqis{Z=bjIZYiM#;^qA=k83!vh+f~tJ^>f8rmTD0^OgTq^ zdI7!&aPIQw0dRM8TIoyUZgQubxK)3diRqVlc^$tGU*hgima1fm zOV3V?(%*VgR#a=A5LeV)>5w++OW1xBfjoo;N1p~0M_l3r(=!IC?R-&I_2(KFdCVBG zFrsAPt&hLP$PsD65Pr2LX5kTk2ywyvN0DjGqQ^T`NM`Moq(XS-%(m>e@++`I zWAJY==If4tBbeiA^j43lON_PMV1QRcO;e(|-`=0Q*?vXzz@KCelGJ+Ta4lEuN|3EE z=@CRsvJHxz@JUJ%_}ztLxuasQ<#10iR>e6Uj}Lau1=HAly328`%0p#>jDu?~m}I3l z@s+pE%mhaytKUtINbR%L)b}|{aT};d#I#)wxZ@Yyy?!~Jp)ttA=>x>8GRkcHUbPI> z8d<;%=e+`yJPKovSKG3ZN#xOSdPJwcb<5b3)0batLM7(J!NvKHGSFVtzw?JQRy0;u zO-w~!T7LRnt)AVh;*I?aE04@{I-*(#C(t5Vaq@^WKRCkE)Oh~k5#%BFxq6G2vm7UI zLZCklz9B9?ao2s$#k4HGP(7J&aZ4-b|hFS_u5uOp0E>)hZ<)^+L;&E|6l13lUH9HHp!H{B*G zn!lWU1HFKIa+RyTysl>!LwL>1|mN#7QNcfc||2ZPO^_Yh< z(Pmk@@v^zbtO&rGvnB9^3nz;V<2ZPGKgAv!)->^n(8`2qRKZt6x)nEJiqgrbG2z-t3a(MRfmXj~?>l}daUS4XY6ZUhV z9M~ts0gk6Hi@|Vut*kc0a{^*hG%rRZ>0aK_Xk{ z7kc<@2S%547ij*vFroEM8_2ZJfZzY%?|Ac*`VP>=#fLaYk;~*(@3~9e?7scTLiv-1 zN-LYQXx+5LKrZAO%@x%{YIRgt;sz%)!+YS)k#e>c3pYz81=#QMjRFo`&A0vR;T``t z;CEsO%sC?5^6ctodlwhd?rNLWzwi7;>=Ub$D{}m4W!aUx)zjl?6u*Vd2ndw$Nc>Oj zmJP3X6=7V&@26Ih+E$ZX@bQ{cl=dugl8Nb7X{Z%tDpHGT73W%!MRH8Dh%WN3^FRG} zB}R4mgxjqr-0=^e(<-WYSty@9Kx2D`onF{V-sd}|%sD`h@o7~M+_cfY`o;>-m>p${ zy?<)s*NzpbqF_g${TsQ~H^V7qnt7FmwGVHf`?W$%jpK_Hva~afBcy33k~tp3_k7Ag zzzA^fSc-9IT9+P`gCw+cn)Cu?a*DI;-@0zTN-kp=P1DcpNPcur&Cz z93XB;T!Oo?!f9eb7IJDp;|!%`#R_mwAOZH}o8>2k>w!nk8FVdgGNh6>MUp-a(hm|5 z1CRYKw-GG|gP9n=lUbovk+adgW|yXBn;~?yPKTU@pW3M*J!(Wt14?aWqj!AeOhd3G z*h#Cg7xzu!6yZMZ51!Eh7OdfP?&)xqInRAqgtkjl`#2HzOF3bgHY`}|6Re>ISDU`9 z3vKxRowDJonyBRKBT-}>_WIQEulti7SlTVH=O|IIc<&yB3+6b}wGVQS*9~x;K22~h z^p|{zYfGC48)VvN6Hg;D?A@$^l;cEyPlvQSNfXoI%|8y?x!*xadj4-s;vPTpmT=XM1}kHp}jIch~+Z*}?8n?*eP&!M2dE3xi3s^3Kpb zC246Z_4E)!4V4L(#J5$J&Mw`q8<*pdBUAd=%M@69&s8ZnDC9J6Gcy zedtX>Ydvni%T_iPC(rz4K!5m~)0Hsp+V;)m4}SkRHR5n)Swr?I0hr((1dhtkwmZmD zTrZC6o)O|4OR`g2!K`=;UQ7Z@vO0_cs=vCzW3OFm^7B=`H9RJIdWPCK`~YyHP07li z#a|x<@k3GVZ1CX=t#S1IPxpX4gO3-Z<9M-RaH;t|qqtOiz{YL0)ibw{Hh{fU#999m za`!})_!0;--=!*0_;{RW&UhUf+8+|8B-Pt zy8KO_4m=1*99cYW6e*#acYI6J;^vUv;)iO>#)c*%{z0u}=YgBU@ci(rw;2neEC^kX zD)o_<=gmRUNt{VvniIz-kZrlF0@g~PZ`7wPtif++_Yyn%VYe~XTQwH~FKZ1*8%l6? zQ8d8IK{#>@ELvj7K4P`YyP~U~>rAsldV@kTmFofpr&PK-3jxMe^~GfQpmOz zXpV9?(5mRPGr~o)?`JAy@p6l!n}Bci_OmbF8{JP)Y1Pf2?xoyakc6Cm+H2p}7ZU%V zKHKIc#TK*UKjWP;u2t|@rNul*YNQQTzTJV6cSrV5Y4Y+AhlH>QnL@<5Mvm)eczfrR z!jPmDo7gZ-IQ@r1?##l+Yh*F6*Ae=wJoDx=MDXS$%ciD=`q3fIbM;f z$NGQK6Y`uc7Q`03i0%AcdLEN+g!xMSo@;wULZ9v2g!#P#m>VTllrRmu9?!0I47bnX zrA_Ww(!cd5nO2=M&+%N&hhqIZzob1rKVZ9Uy&JkVI*8L`CHysZeH?4K^Ga6sX}4i3 zX@7Brrz*(DBq!ZeEaIM5xM`ob>^i5C4P!7n{b59yc(otll~H(lbe{X`5>?hv(k?jd zzWQRlT4Xiv94GN_k6R7qLb*(g zvoR)<_7#EFE0g1nP0ep=>T8>8YMQ=dWfraf{8L|5U;RPLzpOMs$+>jJzf4j4Kxb9I zk+o?5&2Hs@vZSA8x(70qo;rBSeM(8TZ8&J4G-9Y!j_-bt5Mal(Q4crDFl<~s*jPMk zCGY^;(*fv>t<;ky?mpu2RZZr7Ew0WB$Rj_7H(r;PY|Pfb>_yR~aBi>LuFre=9lJm> zr?#B_LO9U01U|s&oc_MvYLC@P@EJrX4PJP=nosKP*_ zWHk4LXVuZR^-dskNJ(1oLbhEpNWM5Jhp)erD&B%S(bZZCIR6nOtVl92dloj~UI=^# z*I`th9c%pI5^edOt@_6bjxgISXc#6?TJ;~uqJ9`DJ%7VY?qJPuz^p^ktd-YOaP_zD ziY~5m=~=2)X1<7Vsm7x53ZDI#Tiwkx%*mepxuB`Blj{sl=EtZTS9|f1uy45ie08oK zTe4GAq#eL%pVO8jT)~LPuL=E4m_R7Bb~@A(WYI zFbS}-GuXjZ9T2%#GFXF@)X9PN=FBpvzUpVUeIm!`N zP;w&9IX?MdhEvvxkK(ZB6IM&0>5F_^FSg=uFnb^1x#qTj-@ z=N3eKaXQ#g(|P*Q-l3AP+j%|bnqi)1MbYGJ$FUf>8kdixItX+8q}>ff(Kc*klk*xK zy2HoOOx0rQd8oc~d~6O1x1M$D1dd{AxD-5xf_gjxneJ@}qHuV_<*_8M5Ti{dYm2PF zY|=cr?>Oe5V3>f+E3&Q7KGoQL%1NT^KFc&I2EJ~wmBHQWG&d56pD+h`#y!vd7)FMC z0i?>^^HiX%;JMoc{`I>%uI|`omoTs5QSiL!srqr0)}E>4{YUwmpFY4cH@C5o?0XD) z?OU_5WU)t}RN|Wg^!s^l&?Y231Xuu*xvo%|6G^ChFl6dF zu4@EJ{|KSW{tkX7_V$YpkRR}ok0a}&)|OFd4}vI)CaukY>~7(|Ol`g9^=3a4y%)S; zYP`9~L#C%I+mTF`zJ6Q3iLv^b=VGzunPl?9tNb>Q1s}ZjRl23rVk5C;61)jZqp`u!@FXNv$T~;nWcY`Rqq8khZ1UtHYv#h52L$BW3*B4AxP?I(! z$%!%2`iyc?FXQ2(ua$>)G!e*Lb&e;{+pO<{hd8xu@muLS|x zxo4KW3M}m7e1WAJX+F!61nhJfJ4|6Ili-0S?IpJuLW0~TZ|M?+923p==`B zt#WKq^Q*~%5q@ok+>|0p77=wY2N@WnsF0Y*FY-pA8?Aj&ULm?8YmC92Aoky{Mq_tV zL@t4H!d7v5TMNeFB=11^$IA4Qk}g4%9BJ_b)HdfBbtInm7AR4;VAS?;xsmNm^NlsX zn5^lfg7NK2Xy4l#)%c2--QC6V1p||P|AB^0gMX){#X=6>66j{s-l8dxOe0%2$fn{S z#N}Z}&AwMJK#$+r$1GG{r>Sp9d!W zRorEH)3iK_QlIXBAO-(jR6cMu0hK;UXRKUpet#iqAN(d4)!!6_e71h|r_MYuni#t* zVr2q{-K#g$g3m%f!8590Yk%<>d}c%$KPI_Nd`wISSV-ep|Cl^yOKy4GPYJSQ6(&-C z^9JfR$iY}t{;9*}hol5l3vD}mes3(!Q*nPs7%MfEs8%{Fq!Bj7J)i-(TmT!rWGWqvIb%-HapH%19f!N0!G!)r%6uvd|x-T=7bXDu4iTFoZ zW?`9y{$JYnoid^PBBeh0&iBumt;$NKNXM`{o~?AK3EM8xZ*>=y@SPhU zRnn|S3HTHp{r2oMT-hCeqNy?QXDIGnikX1mg|XWyW(Ul`VH*ENR=kh+tTNGoG0MDK zo13`Y_xE<&|4YsAeCdfM@|#~5?rLa! zWWndA>8ifhMt=+@v^PzEqS%a<70socdto<`+@lDPpp)2x`xdY+n2?Sr5JU`aT0g`5 z(OrzaeJ!}%Q`YmyAhvnpxcGzM#H*>y4^px@YQ%lrtAFI{TIQ3Oc$gl(VXsM(=Q3ux zipS>L?$&HI%q;u(OKdh!3O&|Jl;m(_`+)bGcLe}$&kmhYp1aH1_mFn3YobF;=!-s6Hf|Cx!2u3to!VP6iCZ}A63;Czh;6X_JH?|?M}ZjL6me)aCLjHtApm-qqWy$XhO~#`%XG4_ABAJ2G@7zHM|mX3Y= zk5u0wL1Ys;3j29O6^C3O-(P!)_RI`>j2O%>7r!OzDH~$sgML@Q>Z!&~Wk;ZrQ*KyV znQD!sRX*mUhPdQ50_SYr`%SM=INkltL=qDfcz~iGj!Vf%Vmx`ap~5<>$dduzqxbqO;a7qEL6jSl&AML;B?lNwW7+{03lG20vc?s~q%Atjp`b%adP4q_0mt zUwih!bbqmYjx_qd)$!emVyW&?8+UirpM!zLHec{DPj*Xrve{=loa~4u`j!JuTZr#z zNwZ?NnV)EGY>S78i z6Pk~J(z7)K`W%lbN4>b&>mTw_J>cJ)iH=g*qA#9!KY20Xe&s%yEOenDJ*8Ob;&;XU zhcP9eLqZO=D(-JYLt!O7x`*%XLNQ|R=ACVGDVD||-Nx#LKK1nxYY?MpQA{&5F}WrS z4?Q|DKN4J3;H&kh_p-XxMNAa(uo0@2HT5IO>(&op7|=@OmECTJ%U z0V=@M1bDbN84L*N`DpWTgsBIQ8#?Vlc*RYSQ=h|e&O4KqnDiSh00JmNrI#~mo)V;^ z(0`;iNG7sQeK?k-ETB0G!v*h5UAn2{& z4U)717XJ0!B`Hxc3qvMV03976chO>h!JL?F49kEAArf@P1F})=xH7A4r%GhjRF4JE zd2tSD2`qP4xW+)P0`B?trPPBPJZJ~%=!$>(#iGCqENhk7?;eSXOO@szW6vMA1qDG| zTOG2La_Btg`2r+UE*O>v#8-#|!r96^61SIdQrNVTrv8vIp2RoZ#gU&0>HP3QBjYIZ zXhQNANMB%qzVjXS#dih8|ACy=ICU`RbAuh9$D6lY7Ma7$-O>$%g45t*KXn}6Olu5S zsw?Ld-B-~9=x=(Z_;gAzw$Te4xez6~J~CpeyKH419jimhdAgiBKY|NIw~|z~IiB(# zw`fdsF7L+W=Sk&)o4adEV&bR8?Wl1uXJp&C zdj2B~cbHvm5xT4)MkZcfWV|$g#ChDTA4xBgZ3C+oohnW42iry+#IT}*D z*rhsR*afls!!SXw?z_@QNsgHaO@;+}SeR_$H&gWsa;vzP7HbwqegQGxo>n$z$44q) zlkVZei`8S{lSc0iWy6-cxpm}b-PPZ}?^IGCnFKo4w25q0wLf%?AzawI*s{1mdXg5G zGeFG60wYWLmG?@H*V z3SCO=&dS9Y8^HYg&?eCc3B!Bv-ny@i$cZcE%*b0ZYM*S7uaT9sTqA-6gX?CV-LVuF z{wuAlMq_}sSFhzbxkff+mM-V7&6f_(T8RB!J~bX*lWaY zJnv&Vv_%^|!&G1uAT?y=jo<IEJjaYDq z$R7APQt!*l*7w?IAVfdCwR4Ss=tTswOI}=YKQxK2!cZz_hiwVVM&)=WZGdu+aZ8BJ zadaHof(Df`Aj#53T2L(O4u?HC&IQb<{6!ANYz`cFYASSaP5eKQtFqIa_4PQxQ;O&u ziXe{ty}i|79H$EOBbg-Ew}UyEIys^Vn_B*EC?>tW>VFN4Q{`LVdb5A3gS| z$Rw3AbW@s1-C@pm3d(;DmxEk{67U3%(S~vmsW&Z&g|bTpHl3M`FR4=eEmR&ilmh6x zx=6D2{?#!Mb#0Zf7-RKfmAwAb;?|d@vRt{QtK&9CrB8=bx1?5g8SL%V9A<%(GDawP zqzqh00CRUk9?#z<-t3ayfV^M1NjB?ZBsm-=iUm2J#IY8;zuIG=Mo6rF2>7-8#2 z08|m8ms$@z(|M!i?Cz83-5hyBX%uOhoX?4K18yxoAj$O+35~wR@Wa-)KO@9XtIoeS z0+0B)G`QRV?i<>%{^_sS53@_>PkXK38m6FpYu0iXK&PiM$_@+SrmhWBOB$cL_e>hMZ_nLfyKzM|{Keb!po z@#@2`Z-idvMrBP+-r)~_<4O0t{YrUf2-7IAsXL2-{-K0hZBMOiJ*EcF;EqoNP;aK7 ztlXuJmx}vC0)#Bw;$nrRT2{vwpd4kZ_XOG}+%bu}#g~_?qwc&*R|+KI4hOV@WWL3= z3+H&2i30|`oKSxse3cOj4OVUG@$~#BYny1lxLWrjK0UKz*rm-RQsD9ZE6TB-Ws?Ew z3Jtw$UhoBY#5cf7V^qIwcb0;H+{wv_2wM+zE8 z-{lM4>@OZ5Kfb}5(hSw6J2+x$600>m&}tsNrS7?~4l5}Gk^!axgl0N9E`PNYHFu8Eku${4 zLTJRyFW2_`;R@};!>7WH8jeTPUDmNOCRTxyJ!x<2aO!rY0j|pL(lbgIO8wk+#Z>YRJ_xZq zA8em-Umh6M$`D`-#a#<$5n~^vK)`CT-ZJ9@exHimC~mBdpYOZ5;9q9-?D&Gp4DBoS z!rA2F&u*CFFd7d^CqlG%2zXH^5x&8AS*kB1q356FeoC;N?m+-9WamQP+wU(X}n=?a@bCn4Mj^5utb zf74&iAMz#36#S~H$Bb?cY+K?i(5Dio5E*x$S=4gp?)mGyzut-_BGVMRmpUMKh-1^RXZ;Ui@L2vmwGnn5?pyf8c zF$@Zc6c$L@m6fkv$G66l+Qj1{6(u;qw9w~h0_&}BfKm5^9V@Te6RIiw76Xs|1J$Z_TC~8yhdHf5 zx;&iftEV!r_oMTc8ZD;bcF8?yTbj>umJH4i`~k|3VHRu@C^V_Y(*J<9IK(fKycshn zG4K`apI5V&X0rtX4GpDK!Ew{cv9JT&M+2ANG>daJ*w-tV2tZHSPCmF0ap3h#c5&}n zzob;$d&?iPazpbbJqM(JN>q%61OXAaK}D;U=5}tY89CmO%Hy`-!`$AxJJnEmhO`~& zwpEaQk}_WEvhTSv-)gVPwAp^mOjt*@I3Pz!el)@t>9Y{BhIEk#m%%$qqz8C2bAQ|ue{3-V5h zjgV=AsL_ehFT+(b)^=5~GM820%9r|6=XVu4@$uNR-Y{{lH7B~H>ixJFjsZF1?&c-B zym#@j`HT)@b}iy*7ej*R2Vq%G>V`r9hVG+e$$3U@4gUfsnhrZ&bl$vQg_IDcAaE1D z(00b$Qjw+pQ=iIFQ6)-Dj5&3np7Spz=avI%LZlWeX-y2|1b@Pf*?;NKgqas@EsBEr z<6u3?Sad)PBL|XZ{Y$?U%9-q7dpGI|Oxg_`nXQx@dzk2SHZ&78W$V$uQsTH0*=PCnd;7r&#kZM%R z&5a_k;uNwUcjQU+TeGL`#~B?)vG5U#A^n%}%!HeivVuBx--np5mVyp8M{*>Oga)M; zUz2@y`W5ZMCbK)f_d>PL*`0f{wio@Kt3DN6{zSM~QM0Rpx9TmXB!E@5I~-ovhraVP zyrJraGs%-G2u~ZD91q>Z34+80MMD>Kslv}k#s!2GQzmq_xlvpEIMZFHnO^d;_TCN7 z*=ypj8=Zr_`VF1prVCq*laKtml>Fgr9iPZD`5CSAP*lp$;QW=jr>OB_Qpwc`Ux=`Y z6I$v~{m83E!w_Z;-DSJ;dp;v4@}E#52=sf+#H(cfXT0Mu3!5=89QyCV-njSQGQ*Wa zDt*NRHtKbhCIai!cun);ZmMJQ;6;!LD^dYQB3#>vc{EW+G-N6Ur;U6kT^o^Q00xQs zospAPU*p_3I`}pMU@+b2{n1a2^6gs5ANYeO@*k!5&6>$w+Nwt_*Rc|rkB0Ohule%# zbDCCT3Dxv#eWBX%`tFg5v0~F_<{A=dNpuaI&Pzms7>C-L zHJ75**^h9gFI&F<4%#PCmakD5*P=!id=|BKyKUMRGWBn%?Rb#`hC710_D!lp-zh4r z$i^4&igOvS9OcW%J&27|9Z{4pS=Jo?NHUo35|BNdKtGP4o*cU;P1*z1We@`UpPt~dqC$|j*BrSz}S^(-PfO>ntL&Brs((bA1F zG{@bXSTo{ncI?F)UK<523q2X9oB0FUwf=#q)OyR|{D*)Zy=i%c&@iyVlPO<3@N)IX zkJWdp#Jh|Ux#TNB7E%HMkjd5=G2!39k?RXj0m<2zFRsg$OBon2iZpJ@GJOpe42Yp= zwk?k1*y1jd;xW#8pRK7uA5Aj(`tUfgwoE#X!%TOTcjYeom2M5J_SD|l4S)l_S;;$c z;G;84NnnY5B}d}gdBp^e%dtsUZNCcxh7W0I6z*D|ZVH?!MdYA=n)tI~uAKn*Pp_4v zW>B3{QpgX6(!z>Sr$-reO!*IsIFB7BB$b(b_0YH5k`}f$kuKHO2~HznMO{m5DctT3 z6sBF=&u`>kdv~Ng#Yi?ZjttrYbGXGrC~y1@KwOv81)!~y+pWzPqTAUAnew^9D9_=> zg7Daj(Ar9`uq|TfpQnN&-}pV(#S<0eLNUS#%}2sWpmFY1#S^~~h0O+i@I}%G)DKU{ z;xA3_Qhw#Nb;`=`r5;KoTA1H_I|ksq`V^Ppp=qO=;89g+nrK|C(K9nhvM}Z2{G8YJ z_RP%YB6odpAZ0gso@XS$4^0Go7jPr%0$g=Ew5g`JJ8)Z5pAtYG30+&{i|AbiDwYXY z2iW3ekbM(8)FX0yr0I7tsKdCha2AI={pJJ<7SswnE#iB?c#LB$79w^bO8no8#`j_} zfs2-GX<+`3K-_QX0$=9kM&V#%y7arP+&y&gpNGvCIG@A0(&JU$`neZm(*`-E97Tbg zd%@%|=Go@;mxKw{9t`kcD_CBd^J~tmrB_#j1ro>M-7pvj>gQCkmF!gM82Aua;*!Zl z#K07E>|b51R8sR_nrDh7JtUkSnqtW#0w1q=6h*@-h!CfB*v4B~_C|4luyxvw{G-(* z$YK$eASw7}2-vwuZO4Ue-7P{Qf6`Jc1UCgF_JEQu=ok!?X*S1~2;$`J-71UnRH%Y< ze6si(B`}g~=E0P4_tx{T9iAT>$4^?j76$C9EDo+2oLSYyk1td}{r&AT=I0x1qDn6V zfi22b?R+r47saHhr-}JtI;u}=o$ApE zp%I~KCLdJNsn4uILT5N{*(myUTalhJ`!4|uygr9C>T{y5-N=K-xmu#i>6JM9tQk1U za>%Q^y4uE^{Hw9)uI8Hw4zX^yFZk{s8V+bRWR$<^}JlNmL%!x|H zo)6^M;RN2Hx{q=+nsk6`>NGkv;Qcr~FZpVW1wp=AqC7(dJBnEl`ghT^@wJ|4K?I`m zdasPyk(6uqe<vLVF;3NA2>2t2XaZc_xO~D(<3VSEGJ{Q31@Z_EUl{&vC~AGsJuPkC z-yfwO`NuRJC<0j}tiG?oR8XgPyw`@)IRT|rIfkP3HZK5`^j z7ZfsSs8%Fu0mC)k>{3|Mq%qJ_lj?((+X6+q;oL})@Xl{tvPaWRX+Dg(a6ty|%0~_k z^e~X_)b7pbaLMw5z*u1HKe9bG2@y)x0=QptEK|6GApgjILj#TtYvUN%!{ib;Clsx7 z4RM4c3)JX%RhCb<7-X7)Fy#_vT;~AebYdhibU_KNi-CY6Hvwtb6;hsjBXF@BX$tA{ z-HRIGE3f+R;4*V}edp((l?C-LcvRD#sc14|uJAshp7)ug+U5MIoghTejkQee|P1bfSQp=a#049*$ zcQ1?XPfqxy7OHWI1-OdEIx8hAr+mNevgaVxcQ@83NGN6>=@y%_jnCr#JIYxt5zR@C z!yYn}-DIzJ=%Aw%GUaoa`t#ml#U{5htBbs?>??ArDify`ZK4(%hOoB5wmCul!G%%; ze?ea73J~2;TZp%In}xQL;|lqYR$J*r0Qrk|qG=g>C37sEG2~t|K)=Ca2pNz##{nk{ zNOOibBFWrZ05^1H6cbnYgb>M5-ZYp&TwExo0wO<>DS?uBr z7)RcD24EMOyTd$OQ7tAkt_;V>7Db05{#kC}IMcMI3i-#lxPZ`3RjwK#E{8!|ZRJP( z2kIBMku>cWdP2q zfnrJUJrc4N;uM68xzZe?P^?889wY`u?MSvTlY-|dr3$PsVA1DmTq%x;I1fYE2QmsJ zJ|7>)2YkR=m@sF#x)V?5VvLe)na=@(|3XM6h0B-_S{SBmR{}>oGaX;bZ5*ht|FNS) zP)4z&#(s`(4*}@A<2s7tfI6_A%yEDTSN=wImavY2aMyt9vi%^Y4sZaD*Ja)N57c{_ za|N}M!4ceJ@^7pbLd{nE`gcfB4{?Pa2rml8Z&GzB&0KxF!(VgH^x4^3c^`5uOp4b} zU9rf)#i4`}fIq%joGGQi_A?PY$VJiR7gs_PWoXn^Yyxehb^UoxZ5tKzoeTIjDJW#v z8nc2TsfoB_jh3`!SlgKROT9qx$CsOxC|rx8p2%ryp5t)ePjRscc*tblOX|&vAJ~QH z8uosJi%|cQI%7Abx(3R~T0a2L4I6@Jz{N*BQc|>_Gv-3RnH0NTR67ZjGE+%uTk)WRp(@Pw9 zxN4oLA9I9FC61EGjMYPTkw=c@%$v ztJ8ZkE{E+aL+F3&YTPjX!;2Iy+`D{oX-X@rVT4*b2H99G80n45!C(4VwI$)vP+%Qh zs<|A{IMq{@FmMexk<0lIVg9iUa$tP3fE2e8ENn;&(#6?XA&(&BpJ)RI_r(+Oo;Vhv z#R8A#IxseXXqDttgeRVBK`~L8_J5#|q;TA2@7C{X<2_wjz8Ga%GJLqgT0qYQ7Q6K3 zW9se3XyUA3v>d~~suA!pF!hxX3WF7of@^rq= zr#lUgx&C=d{WAU}MmvnPNRxY}iDFS{`msr&(KJ~6R=nksO<&qkhX!e~vu64$P5a`Kyy313tpNpTmS`*wnH!SQ4)06- z6R{FC+~0Eb{PB#ljXU|#sy|oC@BzN2hT0L)u)4Tk#qMkLxiY7RRJ|-jdFHm{?Z(pR zQTbGB+yol~?M3+`kdWGHh=D=AGI$a_s51x!62!RswCaHv_m1|LWXFINT^) zG2O?XGR}4$@?uSQ73(*$yOhG5_t!|N?>~u(g9*uc0VUP6FBBK=0Rqv)p<+oG3t?$f zvP2<^_nIaC3=IVfv4Wq3Ttr+hs2%jl*_=Dr8#Wg*>SHMUeB$|nfgyvt4l}ebaJl0n z?rZn8mo$}w_x9HdZzc~->`Gbb-#_%D)hgI#KE^8}vwFBWDr)&}FUy+N3{2>UJ!yX} zJXwV;Ahf{@=cz1%lMLqR3UH5eE&zDvs?6CN(zpQ#7V=%JCI*($%c=wMG5Qp9s~2*mf>W>6 z5$PrM5va%+7UDEVFViufe{!U?4M{mj;+{_i-HSVuB+H2oRHSXSs=PG7_mH0v%7HbC z`esU+lV0M%i7@-kz4000$OfktE?h#MWcBiKJgj0x6Iz6Ke*M-jR>9E3|8aEP@lgMd z|BBKOQ9>CNQVAitVltS?~CmM4b#&za~%RQ zQra5pS0C0TFP6!4*oZ|G$;0ty`5b1B_a~IF;WGrdPu=!@%+=VjU#?ibdT4FI3;!|A z$BDW#t5eS886_7_Oc(>U`)F7ms3L_iYuVxJ z20W|%CCXkBp8tkd6m)u;-G&8ZY~XY#eFXYt^(){OwW$~W9ch27pd>LyZFx*yQ1!J9 z@G`~ub3R?1lb05vQ#vrh<_MQX$plBrJkWO-dtrv0thk2fjXWLpQ!_`tYHMX{yv?(w z_q^QTPBKlipju#}e5 zGykLJyq-T;WT_tXj%}THUicJ3j>x;#WxvpJ3fO{9_DezCG@F8pcO1M=clvqH;y(59 z_mS)2W1=k=iw6pJ%fOLZec$hu=5P8-`1|ua4GqkW^u6Vp@uH)qi}R5|j=cp>sQIvzmzm&wN28R#jN}VaPt%Qt zi`T?PN^C3Zr`56ryC!wd^+u*&TMr|CwHGpFP3Re_&%Bz75|T zp}D^9gIRVi%nBOpR@wi&eY^JA;cfWC{%hinrLR{GX4iU;LkYH_Dw5a1PZ@)yVHS^s zX)hS&POKe)2oLdXxCjk!NcDIE%MU*F=K(R16Ja<~?BBSw| zC};H5zbyGj{b&JE+W5aFrQJ^bxeCiJ9)9sP3x1K0@qp_GC{JViyQ>oM8*7Uh(p|Uy zRWbp`&MPa+Z`v;TU3LJ!^%A)zPxm7`mIqADxKB{F$7Xb-yQ@PDj>7_Y@~cLYdkYy4 z=fg9h)SMR&?$0^SUI^C|iSe`p^4Jmrg@ersigCZIPGc5fpX-fM^6Zi^R|2$c^X(3t zVq$Gv@)#Zq%b!DV&#S)ljj~72ANKMOO`aLd{MHcnd(9+@m+>P_dOUj}`zR`M73NN z?Pa^@n5ObAn-G1iW779TS?I3<3QEW^n1MWe!XUQ!ElsMUs$g6Jz}OvN|7bK>Sourd zqRc8$59||HxlLxr9gGT`515G;sy@f+4STt|ltBMAmXChAD5$9O?;bbMyMk9q6^NNR zl;*oG@MS+m^{o&j@;-(3aM6)#+l?8ui2S+y&5MHLgL*Ig8h03>beCLpM_Enkg+#r$ zHLU+dKgtQ-#8Zb2)ay0lip?{TubZgTGC(EGm#Ek~6d%nwN33GkD71!0G?#AJ zd4$h%YE9?)J5^`A=H(?lI>t^Y{$|r$(F{5V z!>rl=52SpW9f?-1JD{l(2(e2r80CxQHh{$NB*sy}o+^1*n8bG^_w4e^6U=9P0D{f4 z%LdXF2X5;0eWa;TE`lEJp%Ug z{>7mYOM6S~oaRV+At^z1Kh%bmTKGsHhJ!O-z?Sb|=$q1VI0EwMY|jiTSS}F_5+R&y z#!ZUVyO`Mr?le_yBh!a=kN!NqVzH5|`JtrPDKE`ssU)y?6d(&SYy@SM8RQ)b1+6vj z(Ib>WZ-cr~VpP6!;jf_7OSP7~4VP#MV4S53vwoj_#zz1Mk16701GBG=Dxb?Ynz8vA66G7cbwJB2+<79KpLG_uOzJsMt-Lk{iU@R#D-g zvv@#Y9N%y=hK4AW5o6c_f&}Y@`;y*RpFZ!6>yrb*H>>Kf6u+P$;aNg8{x!KJ?Qkru zeBZiWVy8SByFqVxp-^G$M8C_`yTazIuI%RuCJxu;p3x*Z! zpqanrtKHSioo%27MUHAr%mcpAQ`S__QXvD_AGH#-X*s$%drOq~gU?D4@RuIXMXQ*j zTs6qsHefRFXn1bCAdP#4JL18#YA3TEJv#oTDvH7|a*ot7Dd>4G{&_17jpOClTM)^S zgWWYH3=ZR*v_f1}dr;oJk=XCLzBPLQF=;UIY4Cw3+HJeKT1*K{PVvfTnOexWs879+ zww-b`8~%vk&g zC@Y8Id@9qn1;pk+xwLITjb>w8q?hE(PK3_7uO-~TPg;AXy6DBdL~Td!%4oJHO@1A+37Xpb#4c!@}v;GzNdeEZDw~{4e zmjT|{dT`x)Qv3FPvt?74&Px(-ark);Af-A4ym}WPYLa*IuT3-**^OAFOB&0qRnd7x z#R@egrka~q{i^qTyk}gp?|v|k4?eA~?AAtv%EU-!Qt1;wY9u#dx!-<~`)hdeB@f zB5@6Pb9PxtGn30TYJ1y5lk!du9jqzb_wK6|uX&d$apZmr<1-YNgIzy?r-n|yp6IeU z*O__`=UINgEkTD=`k3A68MKfnkZi+|njaVqozUD~w#3-|dvH%T1+9ZPb;#R_?|W#U zWNs_njp%{JI;#qk;sQ`c(rEKIhKOU6<%8sn-XdIXdUbQepq1>Xn#$x$t&*n+W?z0z#!gJ;MxDqui42qiF5vSYu%J7G04}qHP(vX<2VoXPXn;9?Gb7F|1`|2|rDWK{ z=EqV{sIwXy*5b^XI(PEqZgay-(Ih!HcZ}@3Gbn@+(awuzmfVagC|23GmwykNKIb^V$WILkk$i>J_)fQXIr#nr(qVKEZ#iTpSdTS~t z?syZb)*AwqVP}!^sRIRvz+RfZhHLg?TG@N?;1=o-=Ax`ehR~;s=uQ$#9@0+!T8FR9 zz1NRE6>}|>UPhawU}iO=J8eH!o^(rO07E&fi|jC9_I&b(tLr2zI-D08cAVSjt%cfE z!m;ryMVcNLZbh7`CAW!Vo@WT-*!XZd`D-2;9fxXOW{t-&JnC7R3wAU4C0GJH8ISE) zxI1$2)lOBO)5${L;b69M@=MjE7Bka?z_4taoBSwE=N=sAetz-fV83@$=J>_IHhh0& zaRMgQa&Um;jvp-yxQw9noi zBb#fe_^mc)={WN?B$pK(E!L8OE?KD@3>?#p?)$aFbLQPp#=db)r{S)&nA4oW&^^yXWd+U(lh$f#itTy6)s3mtsCS>mYEOM`4=xI>z0yuhXa%&^0iX(m zGR(R?+c>;V=-8N@@r#|4VZNmeAcUI!ykAvhW;RtpvhD6(IgTdS{6;%R!lcHWE> z;n&+eKFWXx0o=3dZx!^Ktg1{6`eY;gSr}v4f2$GXI7t;PE%L1qMwCBf%Q)(##9AOk zz4aC)1CYN>*Wz3sZN-Z2h-EDuY~w!IpkvqWsr6NzCpRRl02KPhnp>%C>v6HdU3{f| z!|a%m7j&)<*DRcVei(ue;K0PX;hR+#Yq#g&XGyiS=sO!?wP^df-?i~vrna&?Pd{}w zaD5BAP*+WTy=~zP)x?sbO;-faC(Vc%$YG8n692)uZ;13x$I#<^g<;C60+sAUXI(bR z@b^`({IA3n4@GdA=YDZ|m}XbQgVFUXLoYVxHt%CQeWm0QDJFrYtC`b0rmyn(sRJiCrfuYL}~*9~ld~@K8i+=sV1c=Kk(Uiqp7wk(bCXFr$Te z_Igf$17pjFo3mXy;*;N7#$1&Jh+s2aA}V60+|A7TMzxq6*JK-gMUsEs=64L%+(ny zQn$dPod7%up7r8&F2~8m8tfnXXqGrH((4CntLI+GBgF$bo87ewSLlQq`qZd!Dw3*y z@*#7en8OXg;C;TV+te+Q*3BMVke|T67Uj!#j+N+qOH1>YT0t39U323(Kw{FrBf5>W zeIqLSlruU=EHnCAwjhS{wA$EHTX3&yokY0go(@b|f5Gx23iXy9Wjnq@0{4(&X(|UMz`OR z4=x|}154t2Ft$t3rifO;r73wBWzJQ!nZ*$NUc*do#n6mrbBjWnyP_AamV%axS!}L6 z4jmDW73SV!k7ekiudbXBVM^V~rI0`NbSt{bSc>O7pS!yp340z}@V}$($BZurhr1W5 z6PdiY&d%$o0B&mkj_CZ6+Q=h8*~X$PdLgIzXrY!Zfme;CqmCYoeSRY2Gb+8$yLgE} zZJ8UJ`_rQR8q4@-Zh5T)S?=Xsa}-Tg$utHmz=n~q_MB4xdGt3y4T11h@sGHwyG25U z-t+M|Hadvi29_sde3hm39^#sBFOjf?Z!w7Z1}(`x5etEC&#_JY?CDj8{A(E{fF}t+ zAA-rw(2QScazi!2a?$pe{oa(B=iq-JS!B@OU8gs3yr69qyA9N1KM+yCJ*$aOO>AJz zu)5U!n#5A`1G>v2)iEA_VEcowTX&y+dD)2c?@i)3TD^8pz-ni&z{AMf;ZP!fc~F{Q zMjmnaD)N45(g`jpSUKlYwc9XdIA&OOBd+m_G3>rxf^xZzB57D8BXn3*>*qOM5IaZ? z#|N~7A^-vCpy=L}-u*cdl&t^}9onMO$N}zReW*{$5aN)Dk@el7gwh3z(4N!l_yx3@OmD@4v3zZfVTbiwQ)8=B)zwEr4SCq_ef%bGS=d736oqv%P;qCE5MV6l z@sAGyEfa^tweY9ofPiAkrS>Eh!ayzx>Bvw%#^fiW+$eQlIRqn>5cgCC)%86N6m+5Q z8V%wTbp#00Jl~Mlx6XvX1AdgK$D;Cuj8li!*Lf z^&RW{6`Iqg?&C8!u&9m7f1vM~2lKWnIq0M9;QJ@=;?vs};qv{I@n+l0&1FXYW>~+z z)juD`3J;niQp0k2!#cn-+T+9j{`m~aL{ERHORBdZ(90z*Tf9EaGKGdosk1WQ>VFXQ zJz_QmLyr}ihA!+NP>m={&wxVg2ND}(vmw^>F^3Kq5B<=F)5#X44c9yoWt0zPRgEG9<+wf3!liU6mWj6m3TLe7tHYkIqw$N$_ zOM!AN8%hX-7e{|1-YmG>ELv}u?q9OAeI!}6;eY2tF7~c74Q>vvGTXPCsfKYOKkxvS zuv1TuGxytD*4_}~PT(vVb})95;OR4}y+RXUY^uu5=g0+X#@|rDsd84TSP9eMBRyjK zlaf(@pCPTbOsNc(Am@KtR(LwsdLN^pZW8QVm9TY|1?$3v>af=I3k|G1*Aq^w_X%@Z zyD(k{DRiHPY8T(evnKl9$MLt}4{=`(8nYY_K;E-H>27rsUHg*WttO)l;FPiW-jk$L zT<}M!U{FU|ZSygzcusrU^iPq)`qV#sq#P$hbIyYsRxNQe@7{9gv^&Edcf+Tp1gJjtZ2z-A6B50?)8JRT#&ch$rl>Ic64yYb@ zft{1h)xdA@Dd5)1#&Er&3;$Xt`hfAkTggVDJ0L=hp*_TwNb3|%BE-w0J5krC#Noy6 zpnM_x(1O+hn7m!yJn-2~oUs>MTcbM~9q!YsVpkywpRM1s2w5kK1{8i@{;YhOw+=_P z?8US{FgmVlJavTB?$%cIi z=^>*t>())K?uO+fVqc_dk7UU{xjiRPSVS^?eu8V-tl{mw-h}%>#;9-07q0zMT;=HM zBi?Pa9k=}<8ry@;e0DPwK>86Ze012yZlxvT_B(w%mltm3@**k^O(y{rimtN%SS~MH z454#JUfgq7Q$8qatB%GQ9RT}@u%akBe?MPtPuO&E{~qZg8C`rRbwix-`a=1Q{P1DL|X9wqN#^@MVYn##k=IL`dsn( z$)fFe*F+1h{)nn`slWD9d4xeDPXc%r){hL$IJ(I&0o?h-R%XVfg+K{WE(#8o8#wzS z>R^ncM*cWg@oTpJ0lZf8S?TH^p~7f2;JxFggHqWf%tqm0QSVXTaIWWUvZlO~#i5t- zy(K@7DVCarm?gJqE{$M*YZA*J3&0U#hs@w;^6e7;=YN2)nE4Mhp!6!v;{l95rlNjG zu}GWo%MS6jr@T$vbgH+<&Q&+zt&U^A#!djXfAI_q&yj^nDz4j7IL;4vV#xIn|6%jm zIdrb&v+O6PUa(cN_U85h;ufOFK*XjXb8Yp{|{2%EBovZ9sS z$ey`Ta(dR>>Q<#+U~yu3oP|Nvo2XLu1SMAUg=*{{5s-%deaDzwQ%{@qyPA(>s-}{% zs%Le2y$JbFs>8Xx^3QpabxJf_+%HDCCjo@B#C)_D9d=!~p>q9$N7}LZR;$4#UI)Q49L!b#6c1P? zwonagqY&D=R+AcRyGhhV5ahTeeu8Ybq*g3ozjPGLGH*~hKUJj)Lr$S4!{ecyaR{fwEuXiS z5?8moudb5olWS|cHAH+cQV5oht*l-U@Uq8qjq~N*4N-MxB2%X~ypIY`^xJ|!%7HTG zUv0164~_ouHfP_nqS8f@n}8qtxAm#0I&WEF?yhc{^HE>lpQ%}YNl8bs0@^X@=n`>P zo#r(j8E}?b8Uf9ztg$%TLemX4RXf!;@T z#{f^@E zHe7$FhQ>h8-u+fk#gz~4pwaX3y%t9o@?DgFasF6Bs-Sg5A}hoUj#C7`)fXt#jlyJm+;d~knGE49bLpOo1R_LA5{P zRlM8C4&eL@_Z9dugtRgrksUo9h=2C0DL6!8CNly9Mmo{zXB~4j45)K!VXy0QEj-iIkch z*4W;O@}dU)O!k<)9ky|O*g1{Y4wXD>u@}4MGA?33kjH#dc{n0}?D(31wIsr#t}{mn z*o`W<7D5sjP}O6VTQ$Z?j!smEYh)SMCYx~I5O^ClnN4Y7-0fO3VD@>KbU*R6k6X%z|qqFrdvEIExQ<*1m zzfr+Byn}YGZJA!E^`%`WCrK+NYqwxh?^DS&^{3TN{*$Zzp+DUkf*%1zHTde&9z9F8 zn8%u>2$;DKUP&Et1jY%n)vY!fE<`_RuUWSbDv@jqOY1w3zj=OK-SfSu`U4X^=slAx z$l+kU#&kBQadRdfC-RFWb~tn{zfV;q5YnD=z=P@)Yw$BbUHm$*R&ve-nGQ;fCGg3YgYkm?aWKx` zo|IPl$ug!0C!>VP@s@U+O}qA;#C%$sf$~4t*(-5FyKCZfG9g3=g-$2&ke`{Ng?62W z)25i{KXY_CT<00@-SLRoT!o{SiIpJ5=7tXtH4P#Z#T4gR1>^!e?2?L7hR1Oz)y|f1 z1#=OCcWHE$!+|#~Ugj+O#i;YI_%XwqYl@wrbKXY$wM>s1!!fSN){} zwBNR-<$1u!z`5L9FYGzfOm~5`=>9#b15Ry!Y=QYD+9&qRS-|FROoLUrwEv*sz?3x& zvgPFfV=velF%;LwML{sT&Hv7^N*OiHns{-Pr~Izv(Us)gYn%*mA0JN4({O9+ zqV2P1oyBEvhtH1gr5>gGBbL(^t;>FW;j>9L$tc##)>z5ks#&z{KDN|nct|FHrm_*c zjz87UgiSiu*MuL*&G++0Qo>h3_Zlr1kA=-lq%`fg`FGMa^}S?zD^5^$IQa7Kemf^6 z)yI!o7XO`c)X=durAgkm9Nuo0ED|oQt&{(gG9e~-&Fj{BR=u|WN^)9u>&Ck$h&m?! zh}WvhUtgS3y}L#aQP9VDL->fxhK+faL|w8K4KO;+ZzZz)FJSO;KvP73RC@X>9ZO0h zEk7N^%Ie+vHW=icQ^aTvt2MD86wX+ zYE8D7B(LSvC2IAJ>Ao<2Uuj{?0{@4Is6WUdBsiDI4?CLFj2t~?M5Y7bW8#c7izMJW zOQ*g@&F>s1e9)a&vCuUqLQm@MsjiM`t=Ng2Rnto+s8bdpc?=X7$%6 z9%gOLJq-$tZ@cp^MpKDcXis?dV&-u0Xg#lHoPpe}sfl88w}c?2UU$(fSzSGLrCC_E ztpsa(A=iauWhItpl-h$}G~)=*Oh3!hh)bP*7B%@(t47rrYTWdbK*6dZ-}onP_E?5B z9J0an`m?t~6pPk1n=JR1S3zU*7~X)3&)q5(yEUK~MhZjZ{BS9eJXPu{5zjF2jG|Vw ziq=RhH1LS<4YZQ+&I%c%m`58DE3)R#v>><6xqY&ga`;@Z?X+HGPZKXmtS8tkc@!%v z)@{gZ>72W~($H2^;D7hLSza2UXFnBa`(8L!T_aI}rN}9Zbe-mrHRnoY6DU;r&G78l zwSo`wE)laL(V_`Mjuct4XLWhJtZZkiV(h5pr?i>bDr)S)`?5m#w8Pcp66##*LClYz z@Sbh>oTVkg@_B7TV|{9`eW`P)XoBy*xReBA+xOG2F$0^Zn%_)mDncCsV0c{|3q+YC zcYa=OSR_tIkwY%t(mCLKa|j;TP=8iv`C@6p9w>}$yMp4Oe!wW{GCGwsffGF@+O4|qWe zhEbOS2w(FxC2ns@`~IAeSgYZuDJ}kmpwTv8`|=)ICQmhz^swT`1NrFw9h?=@Cw z-qsEi{3QG22|dei%sa`t0uEP=yDmJt0)M=>xEXHT-b2&$PIHc%jQ)oyari87{@WEM zM06-?#FXD!mt)0L=|b7;G){U7dD6?+g_B~zn;AO^l_=5PeWcAjdAj-C*aLz-=oZ*T z*l0L0>-Mi_tX9Uf%?P18#*4ZaD~fA)Q}5P!ztiQqmvZW^=YoL1)?}f)y+MLGUCfeG zU%qg=ce42I&(haGm_MtwD3tt8KrXmzutO2?TXdzky*^13`qb^~NcKZsgxUkjoyP(N z{t2Oe)&9-@SWhH>2xb#2*9Eb3Ym(8#pYo(JBwrA>gJSONXM39Z!rJ6OdZ16<99g70 zNGMjXa->+?U%UU#hrE%SwY*mdFaJ2Xad&TCruAN0`1*5`$oj|mwB~jel)g*|T_<4k ztAbR?ig5JLv?ZTv1>RqPs6AMd(3-J0Gk z3^H9mc_;oF%U>RA#VwiNEw(|3UO~h>=OSr}+RJwk zB#(&gs8^48P-M2rKH0lqwnu}7-V-`(_c=%jlZwvECtl#yX^zxhn3}mmbF=aCU{TP% z+Xq*u&z3HGjYwJ42|u~g!lxo`dM`lqYF=F)qkHt#+f#M{j@gWGWLP?zYo$8T^v`Kbz9KZ`>|L$moWN(- zL00qb8W7SHWoLKO67r?Pu+2DGs3J7uvRRVCWWXS5IC{jgLt;kE>0Z6Cc1V{VZeihb zR$c)$^hS4Wm%*!c6ghDV}1Ju2VwcQGw^85J&?gqAMkUt zI5ZP4H(hP4@t$&l!KJsqJX~$CcPh=C3#4yr8%gQz^zwE469p9m{dfNGL-;pQG@P>E zfla=JpIdK;KRTFQNEtySOeZL&$>1#l2N0qhr|-*!4(A00Yt_tST@HPW4t+iSea=f; zG88J{#d}qglamp7x{uDnEaV1c<_=JU*jceIoMF3e380m-!wNBr2 z_Y3W11qjce=FqY(Q0ZBs028^WTLU?=cX3Is-?!gl*0bfOq#Vg(4F1JNPc!xw3dAuC zH5E}C4A8q0(MgNRXHl8IG(x!a>!P0x0p!glD%{Y<#|IWpT~m43!x_sIuoadLR}sOK zdT~a~C-`{`4-c1>LM)TPkNAGFKvqv9*@^KZ=MK!dk*_*bG7=lSfnLvwDT}%2&9d#+ z4bb;u3Ue*2C4o)RqI=peR5td;6kftuc9d($7(9&>hq<$ImV(h^iVurZ4A2_WYKl9s ze8FSg|3IdR{VZZS9{Bye&0)g0v9X+{BzD=WzG|cCA$;&RxnXlqGN2`YPb7-*NoHP{ zU+8h{1&1TIfe%Z}Mq()frwT_{@%|vAK(FbmVAAw1*&NyV)NNjxZwt9(HX3U%Irg00 zR+%<(K)hKWH+`y?)on#x1iG_CM5PU4XK;oknnj+P?ddZIFovR~l!;n}--91)Bxl<} zm;$zGwkhhyHp9I!2-3C!S@lEDCWOp3l~E`tPtq?uD=A~%@H*mf1~T(^dlmWofb`>! zHp!+)!4=#KT}lXSIXFJUBdMELKjlw1w)FA$tSiSL`&}5En@tDu&i=22X~vA}#8~m} zx3rA-JbQJ4onE1%C0FAM1dYZMxPUk6fPDn5xa2WZTVk?@XlP?MpEqUvC4ymF7luX= zIDua{5sX3FdU<}_#4eQiHppfut7NeN83I=oAP)AA$0uw8BhyE(y9joldG;Cp(8@}28DImc_~`E+fh>u z&FMQ+Pas3yi8`ApuP_PK(WV>6N;5MP*rI0P3FQ|bw?0-bKx4&?@YUC3Qy@*UCPrLUh0=?v1Z z#{g4LY^7%aap;NjF3T{cA56jJLx^9p&d;CH;Q!k@z@}ca==pdaV;73K3?sk;?Qz;A3g2wjvYLhHY@ACiy?3O;>k*x+G>sA%Nx@FVl1WTS$70%dfscon;P>T zkcT=4nzX(av{!Qk&~hOS+XH=rqb2h8CT4%PDlB|Q+toRBcnWor@3>G?_WXI(b`kL;S zSqQ_XC_tB?wD1DfHY-TQMM^f>c;&2kdk0;&O{aZZ!M(?qM#rmC6M^huGCa;=_{XPcN$xA0!@qzu}Il><8vLQ(`S9D~x zZL0wLS=<|4J+c6V<2;WPB9>!;wT)U3rhIaBuZaz;;P+vFD(-veFk3<+V}j6*-}363zKHUf82_^ud1er6Hd5ST z^XD3Da;}CqVrlBD=g=nf)UDS}1D(S=aIaty5rq3A$o@zEfA46UYb<%E%rKLCor)33 zrMVw?mRJi;g#ar$N7C^PSI))Ao)`!+o&5SsOYUVmarJKHw3zf8!ZJVD@G#x)U$7xDL7`MKjF)Rr%g(n$29x+~~LDW=gF9wM9V%-|f<1C~23? zgjFy%siP)YVGW^;+@A3#cc3s1A%`P~o_ZcFtzN}$ zc#`^_@bxgH1AXnB0`Yeq1JLMM*DKop(54o>D|t81+c8BzQ*QChu=(^ett%XVf@5UQ z7JNU>Z<$Z?KF2<}*EQpy8l!de>h>d&Fj=ws^A%-PiN0OYw7yq%YF}^YO8@?sEq)to zBT*xEs=?J!qiCJ*BrAi)ou2tT$dcn7pVp}L&`Y1_q`c&EA0O}LRRY*0YWAU%ZI>{I zRBY&xX5NK|uaXv{UM4<$sQ5Ly(9TEtLdcW@;f#2UlC%DzMv%S8-7dq-pvdD)m3u(W zSNKw+YAIr9Tc7$q=_f2i2X&gx0q}G+h>c3K<_;P+fL_UKZ*3^VKy7GN?Oa`E*OMKh(JRwnvSXzy|!FSyk@ zd5OE)1YcNuyZkXX!q?k|Z!}*_N~2vi-{H@sPKi2?cwb&IJv3@)*C0Ii4Ds$FtnwGf ztJTLoU;h#Hbuzqn-Hc)yu`a&$St|9%VfTRWA`k8T>cHZ)BKzk14#Q78oGGFPPo%>G z6l~HU7n9z4-S`@!28eNfmg}L`*}D#m9OKRNF!uQbg?R?0eZTj5Fl4ip1ue17wrhRd z)ClYYwp&O6ldr9tQ9}2b)3jV%Mx~l(5Vp!qj(U{Pt!4r)Vv{(sR8f(pXUi(|K~hxnR0a6X z?}wdOE&)JM;%(%2&S$?65wW8#FdvO^8r^(7p8;xX_EIYQ^9;ZPlPN^rsFrsWWEk&U zIU&YV`ZVWBghWUAks&BFa@^t<`9r z5lz0nB_%G@NnMS#2aa_cM!Ps;MvcGMarV#EUXMJ6CEP^qM^Q0Ruim8cKhVi;)h4ro zv8U=>r{X&uf`glDvICF+v-O!lcsvMwG2b$g(%R86D>}4u?D%wKa@Q+lPkm&4q48Jq zM=#iydT7?QBI7R$SM07Qeu#W-7i4NrYdPY1^3wJx;~5pBW(`cWe(I{5q+?idm1+;x0xOOs zt!-qiHm!ROuUDh?bjM>K(Rgas<>s#)t4T*~nLV*z+>|ADrTL)NA6%ARkaUng)Elil zhUu7?WL_EXDP31mE4#IIj(M>4sN0w2!W0%7Bw!ml^uJjno2SRkQb;=_>r8-C1;h3Y zbx;zj?{$defPLaMma7S`dN%Z|o?PxQ`SnYEkx6RuoF2+oQeB&OgZF-sud4&c>1tt>>VtDV3s=+Qg%!9g^VgJ_at4(AyjsAA* z7N#OSFtOn6ww^`I2=>w+Vfw-;N(Xs!~5PMARE=~Z6o-4>bAarBCpSq01;Qs>= zj_tmm{76AvA{_1IPyh)deus?P&PMy$)X?$7M_eH~_iN`lzX9n<)=NFt-x6E+MN)## zu<>o;^#*+L%7Lr*%|v1f6^W&~AQD!9hU0^Xrn(KsmgbCM0}z*ReXY zxY}UYqNu!K&{A7j*kU%hoTLmn&{G$hBgHbSc%C7For^soFPcYec+f*I{>Wf5!W>9Y zh>-F7n}6vl{J_8Fp}K}FtNeW&)Wt?PAV|_Y#1}BptvD5-7J(f|te~!NtaH^U0%!`0 zSpk@^?+U5^fpT6V;|c%2ClSp&>v@dq<;y=L+gHhN?_rtmXArSbCjiPUR8OR3qK?E2 zv?2`)MW6#+Px-r%4hT_0xk%h*NGW!`%6S1SwRsRxgw52xlM--qfoKB z1;U?;%+Ab92kf-=l9cOUnb-KZ&yX=e`SJ0a2SHvtv%~$g|3JY(em_g3CIOFiwb7sw zRw~`B_c9HY5dv05h)qcgr%esRd7lmX zO3K4dGNFKbiPMgHLYb|Ta{?iN{=~5Cd_)vkX`b<8H{R6kE7sT#wi)->w*A#3;3>qc z!?w-EzU5>{=mzr=7CF~y&wvNi!=Y+tKq#S5(UYz$0{6kk6zJ`1ZXue`w~14Pm=nF- zuHY`e{ap2{kjGl&vc!BM_EdHtHZCJPo;unXzIIWxa);{Fs;%SZoazYE$a0Myg<_j78l?{xe(<c!lj$Ay)tH3-@~01Z`s%|MxZC#`em4H${C!4uo}@T25e` zzovV%i9p&05Uo3WkoCj_^#Fla9noE`(>83%I>3BF9Gfl)CpoS`8S&|*^bGiI(@9mn z2Xn7d;KE0&{+g93^$BK&lO@=EX|=JLb;;H#~(QMTvkQCd~?;X3J4nWqS%erExESfbfY zJ}m8{z?B87s?$g-@f%}MeGZRZhT8oz15+`4i6bamkmsuFGcOer76uq6F2ZVqWy3Bo z{?$5(zaEyXa=8e9;Xc^$6Rs{<#P`mr=f~bVeFeK7sS_NKrQrJ#g>dB4xPbbv=QHLt zghVipEyT{L^AE@*Jeog8xWukoY4oWsFq4O>on)GEY0D+M!D#FNE`TuINs=-)O$Zt) zXa zq6xOo6F49HaehBQk%xYcEF0Tly|knxn+;2=oxJOfU3#MSDpLnK3p3|&~)Hq6Wm;iol8@$x6X!|Jp^5(jq~c4~Ke`$}G|?;2P6 zIL)q`j`^&P?OKz^vToMMhQPx`^o^GcVljd~_pf95&SxAG&4Bqzew*p|n3nuJj|`9X z4g??WaUghioe~U##>u_t3o*NX>eT18)4t-snjC7L)+z#+1Pktr{>+z9E-AE^|U*Izd{{juFKf^@Vs@$f{#p?Orwzb~iO)z1c@V7-R(fI~A zF1T;?5o8`^O1b`3wodwkO%E99 zhIj#X+g}4pLCvX4K?1{%dc>jV2&f;2AJ_PjEw;pLB1XZFv`iPr?yqZC2qfX2qXaTC zXgFfxT-wxRU*F)r9eb&i)uY3sb*y;Vgron?YH{XfIUIvYuHpdAphyBJuRYSozcDRn z+4fF%t|s?sw{fbj@WW+>;Z`d66(4{1BQQVSf~^LrO87bvzlZ2$0kdJ8n@KEVv5w*{ z9_ppZ6qkn5%m-_|yE+FR@>vr=&WY)5x-+^OWDDFAU%du6AbErxS1jZII6CXNCjYMw z4?!sf1wnc!AS&I>Oc0P%x&=fS-8}&TX$1kvp-7i>H;fV{Il4yYMvTG6zR&%8{@?c6 z>t5WSbI$u*R|n)K4KWuiTfmY&C6ClGjL0A~fS z_w1kZD9d0)clx=m2-hSmbv5O)IDd@H!fJU@+KIIH3d-x}psLeOSCS% z-<6(?%?EmSEQFjiQkW8zMxez5X0&3}hd(U^*Y$V@e*1{YpRRWBfG=f#u zWp*cQHyS$+zEYu;6iyL-2PmcsN+8V&HwP46?KdjKA*+Q%NmEu9T1*t$REz~F3t|8v zeC-n;(!DY_g+64)#u-CP zZsUtSUmv}*q3OG3_s7gCNw9z-?s{j}Hsqs{xJF`J!0GKC!IR8HQvdn++4P8@Q?Z1r2;j|nRNom*%kURUnTZY;A|Nn8%a z@+aU;3izpeX3uZ0 z#0gcTm)8E^cTmOnA~fBqlq5Jy&#x&G3uoJJ5Z_z@KRo+oP9TDLqmm%$uq0fM3Zk}K zWzU2@3K8&gVSnTm9J1G|s!xCsxpPE~DTY0!E1jM{V~KZBp6UIOdD8gubCT7kuaplZ z2f7Y@k_Qj{kf5zlU>6y5B(hJEBeF`%$oRMdIug^>Z6OCwsiKeYzB&0}T7TitpQ#VU zH1E9Ss8Z;A(&{p_$f497^tk5&K`%d8EhtPb(WCD6Gv=pW-n*+-C4gP*HTQd>P*2x4 zcB4JBpsf|T^A-(e+NfRyN}c$|Sn(kV`9?>hEM;rMhkYeU@c}?q%F|y;@CDA>nkF^= z~BSD6ND8F5&dH-&nEHH_Gb@TLvC z3dl&(3vp=}}q zfzJKvahhSNC2drx?wn_ymY&bpkZx?i$I9KQ)aFtyoOX0+!r(E{;(>0?gL>w;-61g@ zz08=+G{NA>^|Or_4O8CQR#RY75m-Sl%M*?wl4_3x>8O>O(24{b@YXl2`!%0#1lVx< zQpR1zg(hg{a!j-Wu;i_I*(+@xPNd@citj1F8%*yYcth(mFMv4}Cka`d08dG7t~H-K zwzV)qi1z3+$waUTYeVD;l6Y6F8r@t=X^p|m;`>EYpGRF{Iwq? zSKda~yVmN9i+DIB)MXnaQQJFkQ`hAG-$MXf+;{c%ztd2p*+ zAl*|XE$waj&hqoY72t$Sakl>qq2xve2?UW~ur3iYNL529Mpao1pYjijjPvHn?&Mmx zIs}h*JWHV()Vra^pGC4ya8LZXlOs?l1}FFk1DUh~Cg=L4af?jo1+=CAy7pBv-MD2} zL0U>4eb3R9a=r}%{hCFfha3@qNGEZrcku!oD93?T3OvbCee*7##p4?KtNfN6xE8%BQFM>?r?$PW8ZerqJ+)FaBD6y%( zQI1kMkFxSvjAGSfjSZ)$`?fsbsj~nOntBIm;k8yC{&I?^{k*|XC3EHYBe;DA{{zXM zZsi0&+9I7h%Xyo+ejv^_Xw3f8Vp}ijw%p-BZl- zx-C1v9g%8L@`)it_tPjXm$ZOeKkGjeq__ABR=v?>Y2z>YlzfRiWGWthohw;i1zH*+ z1&nOMBqE-wn1=oJ_q9nxzgLsn>3@3NW35U${IhvJU+HY0x%5$q^WuE4wCjt1!x+ap zeLaUjSt$XTvfoW68Y+to0ZNwd_5qv@%;oM0uN{-%0LO5m38(8VS}FuG`YZV#}eYEw@`ysK-DdT=oZ;f4?;j4&GHO-64JFg0&F~{SNWUOv~%`UoeZ}O`B z>7)md(fdBkS`X`}9rQ}mg#AyD)6z{^5;6_ zPM-Cej@AO~gV7xnhkuCzSytSNhq9TQM@R|KLR9^m+JVspN6RqWRwwnKxMBWT#9+*f z4*h%eBBXBC`Z0732FBCt*JEk<8v0zL^@f^*!zrgL6gew$l0@V4+Asm&M{d{pcwgGC zZ)IE_k*Jvp_I%(N9m|;8(13%6FZtjqjbVq73|=;-Ug>aje-vsTr8Bc+X1t`al_%F4 zxzv?yd#9FmJrC}xpi}&HEja~Mo$qb`H?2ND@L_6($w+-7vubKeiClldC=$fgw zu%+Ou<;@8we4=FFcrkBir8Suc>|yRlUP$&wUZg{|a-(LYc$wf4q(}||&&%}P%9*u{ zhTSpqRxIjg>AIwYPsX=eS2*_@NWA)%JSj`D1*M}`0p_UC3nx5Z|3MFC_SpcWUOReF zb{&p4f-_`(qI?mT5MHQgIA|+vq1K1D@ax&MOR z3Jp^wY5;OSV(^s`^w@A^g?#m1_Y`Ge51c~ejTZ)ys+4$kUOAn3=fIL4{|V#%6UuAP z0>KJ3^Hj(wT@fxrG=sP-@wIT;*V}*{0}R?CMFc;($(0q-#MRy25eaa>tKet2L{hTO zh0Fc_K>l4y-an(q<}WbIkPht5cAF9md@@g5-^>qBUquqn68{6euvCvr>^VI<>pD0( z+sywAmgf==n!%$9L#kT~XzZTlD^662BCFFCc!LC+j%p+!X23NapCe^~z9D>V)2N6S zjRq$UUU@Ef1j|*Hc~#OcL*KHL{bJYI)QHyLy<>axhIL!|%xwe7TldM`$;79Q8}>gI zl33@vS;p{ybt*{0q{OBPy#kyBzxuExmsbdUamiDcYsc{)Njfg>C(-9C;XMaD#ZUam+sC{b zYlD@SMwMF7dJ{u=TwaG{sV}k^XcNsXGrBj%1tbb;5_4XnzQXu8g&CrqNaewBnmj)26iOB zA(%0{ezkhiJoAQ5oQXpzGg&?4U~OJK-$8OQ@9#7z?i}o)`iFQjQCJ~+6m#+)hygFJ zX{j4_JQ^7Ij8{bg@y$H;ZfDH9m-j6+(^VF*UrWLKx$E??ichbh^#;+PInxlitD#Gh zD)gTp|5a!SU>RN zsj8OD7jZL0)D+gp>D|tWiuzbs3QE8rsd$8`G*oz=daxB1xzd}t65eQ0zRs2e%3K?DxO(tmhIlN{8k_QhC z8~r*dJ{haXlCyArx;*6aYeYX%WqsnACb?jL<7#~yxn>ZfX>4M$eOkY@)vCc!ozGT1 z>@c0LiO9%i8VJEY0$8n()*~v_vs3}&dkH;B;E2KdLf5s^$A*m zSxN%2#TChL4m%dgl4mVgtv_}#;FnWx2$#83%5}qtPyx-CYjT)tWl<~akXXnMb zSzt+|Q=D*MpDmd_&y!r|S2TB@RNQ?;u>ulHXa#xhq0wU1IQO5_%Jx)pb=9#k)n~!3 zxDCyL|B(Hf$oA5}E4E7AXKSK%^*JJZL{`lxGLmIZ_fxb~W-gHth4 zLCCqFL%9-JPl^xbD}^cQ&EX6tQb%_d=SV)25qUO-ral!o4duPmoV#PfA;& zMLs00xu&mM*J(Zfb?sU%C5S>d?j(u!PIA8sU1D7^lD933%{5TY+&DmJe!DVQ`o!~% z`5P$_dscpvf*6!pmE+@K)4fvlC7-$BlLiuvhjE9U#xEJ$AZxtvY!|sFeteM*=us_v z6;<2(pGYccAp~i8hZ=HXsc4iZyWLKW_v+9cIF)7Dl`uyV@1AQxwP#4jt0<=$;1wPc zOv`jc61=XONPHibG@e|Rpao)pFwsg<32Zfo#GSehP7D#_;ZBag`1W*NoS}*CmKxEe zGz%iJ-9*Ba9yGHQ2Mo*QDC>20sQ^;o^B zKLpvX${S_rKdvxVDbe()qj|EYnxBGFZBGMvJf&2`t=sc(${{&y;NxwsID-LvGIoXo z2zcFF8Cbd1YD|3oABYD$e6966V++We!~Gl52_ED=Un$oYu(c1=$$b3iCIlr;q$>e( zFtJ9@84U2$g&jojS_t*ICtgbpnjrwI63EG%qZ%x-C|lC4^1M*BIn#SlrR$aLZOyyL zx|o{*RcIEV7oH1%kdhZT;%si+ulbjt)bdD4RuOn=-unWe8NWhU_ge8p$dZgCGu65d z*|WS@EwWWq$s3dx>3cneT9z?DAW^d8mUeyHd42J$6l~+5qG9fQz79DI#tUMQM8=l2 zqajg6Z-QKC=SIhBUi)1pSw&m$k6;KRCb2J?3a{%PrnLywpv-9rQhz5#&PqeY-c0}0 z)6yT-WiOqG=TGZPk(~?S4jJV>L;D`EV}64q78rAaUvmLksvtx3swT?js-}R$rwc3E z&!4p(POP%b#q_jWK1Vg+l6~q9vmRY6?IF!&OyN21AASs*EMwqpB<4aHAAm$dOx^0$ zT3LLRbAE^3o9lfQi-Nxb$z_XNiVzF*0CnQEiHwD-Uxva$_(LXQ$OZ*r!25sX3pyDb zz43e{Zmr|i4@O@`CdEY+j|J=|_fhzHC^>nmMImeDf(ZV>H{js3lHGBOnjeg*g*kMJ zYwH5rFmEixpK@HeCwL;1Tx2u|4-$%D_2b7Khg*TO#^u27!0zD|ytBbLm1nWp$bmnw zMM^IzVAeU94^;wTQojEHj+aHNBW^&P62lvnMwe#}StCO-?`8#XZAo2)CH;&v{noin zDa&~kkfVS@2;jHze!JH4=j$jqU+1%RRo-TACc#wvZpm+E5RV?Fa z2)pYl?vU>l!)x%t?XD>4$KihYq9x}#gWfF7zu(FWsU3P z)Ind}v!sF&JU{oY6>l)~tnQ)KhunrN5b^4%=h?~Y;SKdp=1j^_R*uN{R6zJ9`kFX_D|-sJ^+xD0fLtg`)tTyK`j z9L2}z;J_{t%ebOc@Cr2BSW?45@cm@1E5mlLxoMxT+w@5$C$K$U|Lq`$N02LMk0ZAP z`QX6jFKHa!0NGDjvt$Z-)QDL|9NpT(<$$%n6dE**dv!3G_t<)uL%RPtIQA*Z-&}Ui z=*G!vRs(=fUy0VIKV8XMuj*kRK4NS7&wZagvz6~ZLDY6tCY*VDmjxg)qGZ3EX3wG-d^$-9|tJyKc_-t%3p9kD}LhswootS z^@zOW+Zrvk-{}18iP-(I!zB@v3(<0olShw>eY#e`oV|zZacxtYVe&KYz&5>;r;T-C zGdpZcrM%0{T3I!LhRMK1GCjdc>|EjsLG4oz8xNMQZ!vf061XE~pU^Y{A@gEGK6qt)&fl{&2KZQQhw zeo8raDCARQ&*R2Q`)wOg`F>u;ymS53PJ=hapu03yEEC!vO)K)Pz;EKAy2(8x@`;Ck z;5uWcnWnVGf?JK)mkh&D-hT>D$4xs&sGq;rQ%~TMS#34&|EfQ@1ZJd>ZPs_IGiTn> zFH~t`?f$*0r?HUrZXGS~an6yDiE;6d96Cw+(fW#CUOoF`AkZlRl7Qa}nI82y!uc{Z zpv3k>Fja`)$3L%bHRDIt>LO_s-o*gvoEWNd=Q|I=q)aWV&E8J&AG16N-?yqj7`$GNg`1*DQGrZ4+keSK=sR0CqfH z|EP?jchvU&Uu5@*AmEKDBu71o}rYw-GQL8UOD3JdG6#I zH!RorUVPt9QE=z|WA!v88oBRH98TZA%ay)$$x4}&yC;|$uVlGXo?UQZeY23uHYgOi z%*ugV$s+68>6f}t_%+YVV?jeTk6w=9QE-E-7y5O^w|zQ%x^tOR7P7cp7tvedC4zsL z)=x>+qjEXgQ0cHcWBqBq{hmryBzNS)SL7VFo|Yho4$cn8VxB3wY{H`ja`!bD+tScw zVst^M^U)cY6%Pa<-%Xg?Cu-?kDi?bO=DpdN%FpOpOnvw@mz1lA2Hef!+Dcgtr^EkJdcGO>ZsIHg`W^bwt{EGusUnqx z*k{kwt~F(3OMZM}BXoutf)1sLmq)5IBxkj?^8Wf={HSnfZqYQPJ*uyDG^}VM!uN4e zQQw4H=7x5rnyGDOGs@n1mS9K_c?@A7@uv!eVhF2i6>5vXfq=i4SxPh-lSY=aSi%FTAKiE2p-E5f7G&@3pdsQV{v1L6GcJ)J1vG54?0smZM^EohmNP|b9 z)Vl(*nvk6G@W|2Q5U1|4t#rHEU#qI>DZ5P-CX!PN_n*5ORIe`rwMR#eJDzkvMPq`15+au#Ljj8J$lWhxWF$NcRXo_rN)3GDhp7O5VEUqnsn25Vk}eEH$8wE4kz33_meV;`9j_)SsUANkBFtlcd64Mq=sOP zk*b-YQ>&lfZB|l@>YgNZso+|_n^(!0K%xs;YLg+VHYu#Ca!ziZSq-$EtgOnrMmB}+ z^4WNH<4hJpIcb0rWM52qa(W-eNV-O3yZQyNEjT^VkrCyjIS4CJG~^~xvkmWc;&3mc zZVsQg-@rD~G&Rk$R?fWxB=)O_eN~nRAm+Wy&iD7PaF%#}kr-DHY2gZBt~lOO_3_QG z{30wkmG~6Ygk>(s1$*;namim@f5T<2QkrKdS;+QP$3?UUl~kKYjTk{Z85NIJ6B4Q@ z&)amc@uZnV>qVN%s5QM(H_8z6jr-1t9$ku;n#LKp{JoN+z2ARm#|3Xr-Wiyq8VyWP z)z&2+xyjAC{yIwMgIyf>c@RRM(|?fVT4p555%z{j?)nDl#{$m8KY%*67NY8+sJhzn)a0mF z{(8o(S($*%Z;mCDI&aRaiV&in6U+Hl3q)PK;d}RB?2Fa5)EnxH`15X`b)Uf#DQ|Au zb@z#r$|ym|N*b*CRxG*qYR4D0Z!ClD_{7rtF8%`(<&s3t@Z-Azvr!mg6G4(RXjub~ zhd8*-)2<%Hw$e&Bt!jU67r<f?G6rulG`1iM{6q+R52Ig)}a=N;Rb4*fkP z?8>E-@bAapxa%({Q{UxV)QTAm0#Sddhwa7c!n!HyUgJ@O7iNPaGJy`k0gQq!%GoA& zHzK+b`n&QDt*=zR=TS;87AXk4nwxIBtvvxD|&LbX$-(OYOr)%qb4@O3i*z^50=PeaZ1M-S{Br~dws2s~C ztE4z<7mxe3Uj;h_g<{iigI5{9=1Ir`q{bOek0xaPk`=I9)xIm|GIPWE$s(;y zAvfU9u)2a^eQ`l}>R))m>Q&@7jNz(Jy1nNrm}}9@#2Bz5|1&i+Gv4F67Bd?7Belo* zFV5Y3u^-AyvU$e2IF1bxk%Fa&C{eID)13{rk%-+~O^I=;FTRp0E2#ZK4qB zsR89Z3y>ttTvWK?AJOm6g4n$i?=2q6-f{-ck{oeg84m&?DmJ+p$hua-6MUv17#-Kp z#JlO4fYLRxO)@n^AyzMGCC z7p{vEt3a}vv|w=yOCKq9z@v(Pi#1u_&CuV7GxXfaaIULsYWkAf*eGgYQQgI*(NZ*b zm*ZHicp3K>E44!T>goqcXqo!Ph6D4(-D~nL4VdyJkleOESZqD+${k%wD1}k@wX*)E zQj{vQ3+kWioYl)G$tr`47_CW%a*ph>3Y_oU-13W)CD*wc zbU9*qe|eU1jiM!V4rQo(Kh8ch$*^-Q&iDOa2vdcC(NzuPqY!^Di4|ja1hDcG*I=xY z!>i`^jHl0jxYl)%|Jab$87XvFvj4uCYT(cPO3BEE@)V!F?m8Tf5Pt?K?zcSl2h)W7 zGq@vj5J=!&A>Y)js4xXfyH2Ufvj3sprI+J`I!W`>n*9DLcuV%tSh22@-tW549A!sR z(As9FIW-CSQ?c6s6z|=}$P+j9e=)83EC<6-f$ha6-y>JZBuR`kC)2zYX;*iZrKnKo zsCMtmghoT#bn3g-gg}k!lj~`JvB7EIr*HG#Vs*IBz?$wev|G}q*#I=tS8`FG{Vl0O z?(IB!&Dzv4&QZy2o8JDwj64Chk*;{{sgiQeAA^To#-d$}&_w@9 zbNG|+wvZX&&II*C($4*-b9CY!YJ^3k?6#_0^HmRj6!B^2AKF}~JD1Lh%kp!w3)eB$$3Q$YI6U_vmBeJEB@4zxrH@>LUvLLT)`DeqEQM$Y@PtQT`?D zuZFwVSoAZ8he?VO(|8C*1UHPwVlq4b12GAAxcmp=z`G3hoA5xtZl_*`)VT*1sCd&3 zlS7r3ve$%|Y18$~Oti(99{ubMH7wAcgK(UIVAjjgU7tXtzbK1d`%dXNkH&os1~p!L z-Z)|2t0+6etFImQ$7Qd%Zn#eXq3oC_bHJ@r%+tZ06&ysp$r9s7GlhOZ%{KN|pGnpV zGdF?La*;`q6DTZoM5-ny2JG-K22`)tS+|Cz0^n6LHSV;=#%V>7_x{*sADC)8TZQA4LM_yVH0s$x&@a`7Lh2Oe+lU7)9p9M&LaDlC zl;^_JX4JuT!qYu2rz+LQnZ}siNJFdhRfmnp=MXWxHkQ9X zjx_rt1{L?-Cvt@!es%3nPNOU66Q@_Y*n%da3&t}Yq7FN$9aTPz(fJ$~uV@-sA6 z0QMBysX0~25&OjlyZ69eX*8IstA7h`hpDl|BNSP&FS)k@+TRtsMKLA6-@JuI|^HWgqF{ z>9wOGwv{HY^#sD8=KnDzB@-jz^pKX^lxCWBNTM*t>|1QHKjLm%=2T1m!~Ln8`joMg zr96Tpk*E5qjL47q+_lD@Na1Kf)r!5|S3CFjjw7<9KW{JX+dy-ELiz{nT)Nk=E?=wk z_V^Pu*6)G7%tW z-u=p(qPh9cNT6SdUyJpE1QU4S?e~sANN|(%dX~+HEIrK@%T%OIZ_j(T z$$M2%jZIcbj@pa9E!94|l~r3A4f{QqC(At~#z~=e&e_;(RU=H9;jw19->-G^XGO2W za5oar=Bba+%@k!hdWf-&pn3~3oL`3>{p|6ufGZ}j>!rYL}n(b<}moadk2OY+2dC z7LD8UNkOS5gHDyfPH7cw?;MIfWzr0?Y;%95@Ez9KJ)C@3>znw>E-#pl))-HTNmj$& z3v~wa;StK$>Ki(yrHqcOV!JaG_!e|N%J@oS7Jk=zuzy+066$pyU=jTGJ4WV_)GiKA zL*m@|&8{8Ue!b=+>WLLbJ1Q+X=aa){uGcGJvgADFwi*PPAm|itea=xQ>~_WPx^Ek` zX{PvwpQch}-MGQ6UpFTQF71+!Q3 zQGONQ96En1D}-R;jHG^ha`Q#+zog%V8PBz7Q_boehH#mwOUtGYlMGt+E8nNmwVEx6 z&&6gg#iYpfsXURKn3w@plNY6G7Qs2-n%;V~)g$r+T2rG#Q*=Si-FtiXAI`r?vblW0 zQe=GObuf5LJ9w9oy4*lz$y)9!c%UEQ(ACwO?j2uXil$JPv&B#GjsRq zeM7(#2d;V0%xnfF1+|Va9MvI%l^0Z_vQ`6V<2!t9{Q_K6I2nn-vHi&yk)Elp{`0+F zNUdy84T>TryN2&iex6Dc zZRi&_qWa!O7>^h4XHBl>DMMeKywyu-O3BjmtsYzCXwrN$9yeLEx+Safn@OKlMc7@P z!J*hh+(qQ&Qhd%7fzi=-+)rceSN_Q46ZkzTqk#l}G(}}(tF#Q0v7F5(<9Uiuq#m^X zs*0}#;H5$FImc#Z3hb7&rT#U;Pn=yj{H#N)dMn7t>i7A1IT)Cr$POzqfU`z}UVHB7 z(c@XvgY`A2Yi|xUw`yvw$DBtV99CE}JhJ9E&KnAyGIa`n(nO==itBydv6|lgxC*p3 z++F@H0g&6Y(}DI9(&Yv=+vRJg1W9+t$81E$0_QX`QcLR>rQ4CdxVw)7&EhAsGCaE9 z+m6>AImY+bC#Gox5s1!f%ZVA5aj*|c603C4t0K&t?yY<)nv{eOIPIIyaxX|6X-}Ib zd6yJlDPbDEdG(uWOK3+EXSoULrU%{@zPOUB;?sCnoErB0lWGr;qcbv7TY=Mj^n|80 zqat|!L^{jpW9E=v)Afeu_o}-*aDsn+i$#xZ#cy;|O6|bzD&NI3BXMHm?Y!GdEEBaN zoDOhWWiH3mkSG7%C%>Aq)agj;(J?n)uFvLcYcE$CHyh#))>}GlQ6IM-r8-0Z2dY!u zpIb30KG4tz;`4l%rwv zvpqphM1{gGTyKOIVekOmc;}*&V(3Gt8BgjQw6*!FJV;wwv$AXNb=S75GM_10k?U1u zcs_TW)q$*%=g51~D6HmQkGb!PNS7w;Z5wuP2@0VNqAgi`1x2&&JLP4Z^aKPQ^JOuo z-d2?En)zbQI4}^KDAkPm$GlwK-!(JoU(Y4lv~tZw`98h}-ZE(FY%(h!+Nt|5%P{3j zWzVF$)Wx5vT}^{xWZC|DzP&3h;;_D=EOmHjDUyx#!0|3a@4pBc^~|tZ$++Ua-#~tC z>03bkQTxWxtSWHvV~M`l`ECogNh0-X8|9n!Dy(3QrLkY-yJ;yF3*_^*=J*HoX+6#6 zrPRF9HYpiy1~TF*5m@+)C?p*M_e>;pY*}W(YK}VL5ld9~a-dLR@N<1JdEi~Dq3Ngq zZ9y{oH5k4|H;-48+uuMMOdko_`Tzi&Bc~BAjb2^cw@bNDWXFvT;kDgH`Pni@s~!2f z1`OZL>^tPMHHHrJRZAS8yr)wFP=d%cy}t3m-F{XBsghP_gM4=0pZi6>Yd92{3`|pJQ zJASr)rA6m&Z$F-V1T<>THl`$3?Zn(%|gXZ1<> zxnMmZD|BU$O~NeeuE4A~6>e)j;Xe?m8B=)=AKT-j{9w{qq^?|ge3#L6%XGn9P!GXd z69)XF#<|2#zm(f}t+Y2Wm?yXP`zQ6NdR%sK-|)eUK*!V)WLpbd0U&Z{ldDZ-Jw_P) zC>=pOZlK=IteaQIP0cDDyw6>njL$vg@33^~@C7sssSz&jSy#`txIzO+77GRtBA+rN zFXI{~_vsFds%t;Q;jZsC+2zUGL`FX&fG`4k4Z-~fa!y$M+n&Dn?`&|hJ#E$y;K(qg z?APTBowi>tw#-i*eF)-j=sN8kKWQ^@L@ss!i0ktuM7k=(UsOJf-ZP8r>+5}0H>xeg z)Kv`mL#hEpFl7PNzC3|3A?2lCau0+=0@4sCoFAWO-c%+p9D9aAoP&M$^l?qKtUe#l&UPqe;)yn|aaMy-JGqv(SdW*zN zzu%Mv;1|ES_VOq)=8%nQv)t$im@;BkOrd~lp*a8AzdqtWoaQ zdQd5XZ{okBPb^+|#$AS5whx8FzX$aK-thGVd9Qw#3(gw?Gb4N?Wb$ssaWfridI4F{ zaDu8dedy0>YufuEF{Qq0il@2#PrhqP8azqjwN>Xzgi<7=RaDO9vwh)nEf3kkM;=e@ zMrqcQJOVuvvdOkkiZGhpG6pahDeo%S!zKrR|%^OxTyl$Qr zPnTJ&ZoUiw`;fDUJNm7B5|y5nric9qN1>SdBfH;MJszfiH7W|+WS&dArtFNOeHZg> z>pE0tzaXsLD%0+~ogGrgs;T=Bg%2PJ!u z1uhSmsw*{D`y|G8+t$U8vgGl$dDJ5ESyI5YWhuYFK9mpX{^U`)SJC0a=^W>OZN1<6 zKPH)7<*z5b3ytNq`s|@|17sttul+BC6YFG>ebAo5mEoLWRNyJT;2)av=)6hn;>k>K z#4|x-Sp(jnsfjGz-tn|roiUwXzbC>qQnPp-jt4C>$9m^aM=8HBr8kxb*vh?{e2)g@ zld`TRGh-6%eLv(Rnz#7XZDsIL=nW>ny zG~mtz_pyY@TX)>|`90Z186l-@bJ@9(Ih6K?+GZ2aDc7We%dUz!WACx;rOdsM43S$I zo2ID@n(n;E5j0%>Y=(1kbDRllWc(m21`lyq@9meFzEP@w~ z1OB#O-7L#(@gy$bte>liD;wVz9Q5G(`y@5qa@!;gO$Lou=jX@D_ur))2`u4UeJ2c- z8kPPl z%Iz_h`);s{zmz`Gd)Mc)(-v<^&eE>4#o=(tnB}i_qrY~FQV$RF4J>=KMwW)g0~J&Q zw=+>AUOCLuXRJYnwo6vz@0ub;IYOY*m{I5%S zeL|tK$5!J?f+~f3f)+GZNvF_6EG+JAUP(-S^jVFDopS)RJo{{bWA9(7oSeEgWB#&) zp-!?o;1?8X=4 zz`uFwh`&@_%B~>x!_*Ri`zE#AUU;0S97!Z|UWqRF8H*W5;Gk{txo$C4;U+qgJG|CM z03j-$M9)ob_#yM7n2LH0eR|dTGZvs*=G+KE7id!m*;p*?T-sWn(GoOdKPfJ1bC7-7 z|D}2z=*{&tbq+G2{}uA{DM-(sGng!E>dm$H#nqCH)G^fR6)rpE8g@m86$|dn$=YkHVX9vE4%l2D3YVR zW3DUtlDm-7(TVo-Y3NdCwF#5JDQ7KIeQWdJyg_Y?IcH)<--j6vd7rWpHI-4xq@syh zi@n7fUrT0SD27@HYnO52_2vzY(EUn1Y!BGP2&z0%X~Hde&wK$8dHJW-rW^r3AwBO@ z-wb=|yLJ!6#hHCT5)nEJ_Fti!<{G^wxbknXQcJV@DjsCtrqGvLv7gHUhDf0oB3g_9)`>M?;pMXZqz+E1T(_^;4hgl(Y zu%YK_U99{SR9#!4qm-3ZEJ(=+#`-`HD)J5%3a$Whq>{g4&`HLG#$}7M{pO|bnetEb zw)=12RTe}OicjYQP3G$Id^`GcZjQa2nS|5)--j2F~{bY(u=y{`d6gYoxy+Y`j*m?n}IBcy`YZMLlh8 z%YOh87pMmCywE$?26QK{6_Fc5wi1Bf>J1HWqXa)Yt*q)%cDXgeS>M|~?D#`ds(QjD zzP@4SI9dwfADma3KjPf6G5ugqKXCifYFt|x{KIjlb{0C}&58LZ|b>3GAplBtaS8tK?F}lXyA)Pu9x+t_%|03dl|QIDSBgc; zW|elye_ny5*{(f0rm9M3OZkQU_Ru>?=6k2hpNV8>B|}^&MjJ64Z?U)5p1mS6J7I=T z#~}9B>N9@_DPuQF%jO(2&cjF?K#KuaTE1)I0(W043bHQyn;IfI>7D7UU@=~+A+V^t z$`iXqMB`B?u ze(pY7VXF3yNGY&(Q~KVWgkcNAj1P5gO>IHb3GCNUHSy{a`LYJ3Ow=cD<4x}J=)Zq# z5T{?LHeQRiJleuArFEGm&L@rcAmDT)CWkSi0bXKlnc8m{u>`8Zr>_!3sDre%nej0~ z4~Eqedz2+it9)@ip!xg}a?Z4?UD7YATbUA1jd9hPu)9jLMG;jo zHJaGe{8eoRB4es67zlCbw%}7LuL^qsk-Bh7uCdX_X0A$SJDlfFOK7uxUq!Ng(X46D z$E4ZNlUL}FX=MovsSvXSxkWU?8bsKwx<(pgbVNF}QWir!9Y}PT<2^QHx6u(@dhWt* zy@^yUTSXIWH8y%HLFqXnFnnvt#Ps=BcT@)(NgkiMTHfEI5l;_v&_jvjs|ZX)-w3Lk z{^oA;R;VOP<1*}jJ9gz0SR8oJl!Jv#1lja^${&yViW8$98-{v_SU`o*o~(iZ|zVN;RSpri;( zPAoV=@i7LDE4#{RXT*mLp-2pnsOGJ%Hi0#Op;t#+x~-^+Rnh1*tMcPpM-LKklXsF>nj0`zOPO~3 zk;L2MYODQ|oUy7f@92T1_5>q?ij+GR|m)HkJU6p=FGyqvs zEqzt+LaH9lNyOIRAyh8*YR3q6n7DXo6uhLQ=tn|`rZ(DrIm6pRma?1 z>d*5@dL`3C@$tjTytowFyaQJfjD8@80xlbr((%l$;Zu^iQgUIbIGIH26A~?$_3wG?Z3p zI3|cL(7A_E0{g3HCu$9V10(Pf;~u&zk>fvNF;^%@Y6UhQNbRSHXm$#0;)}$;m-HtH zPm3`h*i^>~iRN5jMyUB>xy0aXuL0JQhE+^5#rvB0JxqGMHnHiQDlIk;|JhA6ZhDLPv$@4IYGu;_d z*}wRVnr;`4zt=r?F{fUU?s=X-b>ZRJ2{1*ss&?jAV2KQ57=CmprGheDkZ#b;q)tCZ zOMY$;^%f|H8lgoAevvem7oD%GUy$#Jan!8iv!gt$bMT&(tSoK$cVTwi79{;J@lWw1 z8TE0ErC8117vGZ&s|{S8D?Pw?zW9Uu{{6s}Vg1I>7OH6a=vVv1KEm@-zv{Co;;;Fb z?9No3cemeVgZD5zRf6%P5y6msN7V%zY#lbIJWOn!C+)*!KN>e*gGyv&VeA z->=I#&+}M7ZqmI&@$QI`6g3Y(<8==T0>pw>T@Rf)vR>X+O)e42oN-Y(ffU1x#+B)5 z>o@6D9z`I+C6S^etP%lsivEwT;u#H>0XQaA@n^@@AU)y@gY;2&jT;=c~0M z|K|Ri9%JlV7)+cV4f=h;Zg9Qk2M6bxhhYYpaqUkC(Hzm-k=^2&qHbDSa%j2H;9RU_9{O!pV$}TEe`7+E}2MD z;zL5_1A^-g5VV-xx;-{OIsZlT=D&xv;^(Ry%qmvw>_Th4o6<3%wZ1*cQax3Ria$9D zZs32NbwMsy!hg*|Gk^bM%u~r7_E`iSYpBVAxXmH*L5$Z&Xm|cTIbu2g0AKIidgg{c z69D5%v#i#<;2L=%Lc}I&W|XU0S*W(|M@nu_Iy}!#EsnO?j20G3a1-*5q=w|OZasM|QUDcYjWQxFTSTyk( z2klqn$Nr5TLZKu4|FD=UJ>RpypZUx~dZA_-!bOxTpf`g4Q8@*jVn|HiLI&Xa{sUbC zHaM?Nds$plsm2EuptZc5O&vY%p`eWuxIPd`t>cq`YQh{R7Sb-NO#AR3XT$#kO$Rtx zSDkJ0JctyK9k5%4%~Jj`0CdO7#rervmO9}Y$^Ba$B=RbI5cFR}2SiX0@V~zK928Ga zfJg+Iu%7CBfX=S!gI=bzDx}QcqTQZ>SrLJ;f%{rJ2`t(SJ0X_upj!5z4*;2`WSSZ9 z@p-9fdGC3Em+MgPP)@sErv_{g)Q609z^w%hl?j&_KZ{LH^t?^9oaeoFCK~^`Zs9db z&xB6rI#sXD^{@RsacT{oK5>avl&$J>M3mgVj9Tt%7~**GBsK^-pw>Q9ztv2}`LiJw zziC@d0;O{|MN1R{RzsKhx_N ze9>gY;#bL1mPm@ zwclNct3~J(Q;tqJU@=dSnY~QRDf2}K{gBb;Slv3zghgr@@JohI?z)a7HBUMzXVuM4 z`}hzDAJdn_EE8b&e*PbJSQSV;Sgu&YmRFX8In1VHeyWnH`1rmfe@;52{ik{*BgNTd82(nL=({| zSIVvdJX8}^(TI!a1DM0wmIsYKg^Hdq+uz2&#~*Y*74>@bsunxdb>wX6mo>Z^-N&cV zzZw-8#z$-Q@;LiEA&oUxo(X)qu6cl4+uv+&Szzeh*`YOnHP&8Q-!8f zQ*?&fMcj@G>0f)9|0EbwI>iI#mkgYJ92RJy!7M}y5(;Ymsh-`|%w0KVsO(o8<`#GMDf^$b%SYQ8l! z>vwbvb+Nm56s>B0xVwi)M&*t^OkK4AY9XY*)=4afE^ZDhg;=NxH3!%>le+Fkc7=yUWX70i z7vFEcLtn54#8WK(h4c+zuD$uC1@Yr+z~6D}&)J8eU1NUHp(dqmZ+|c07FV>{rA)V# ziROb-gAjWp+;di9`v9<_(36wKwG4A57}9x(PD#k-e(B~mLu2Oc&zm3?e{-F9%YT8A zEFJeE^Y?$COxtRC$a`jd!Oae#z)cGT^TcnFS7U+3s}alWZLOy%`bQlbzwL14{k1oB zJ(a7sT92JFhUd+sbshF~*9b_iS3Z0_vJdmV+pbqtokD@RaVCXj0ZqT>ubt9O454;1*(<%&Feoo6)*|Z&>V#qM#U=a|A90yonlo}4Vj6hD zJkq=|_V8x!>l*`8CV|Z=pI}YX&8>whThFV4BlsM(dMC0KvE;QW6E%;YGt~;SYr?3y zut=4ly*LJ2y%a#Cl9;_ql9TJ%iCq?xd}Biye9MKH6f`B)>2IHj2%~X1Fdv3dUmm6C z>V^*or686cP$Pb)SUOTN>xK5KHyCUmwD6}ly_9r8esAZ`Si*pJ>0zBiSzWYT zaKvS=Q@Gr#5mRYq_1hEUQf1q82ZRo0lzzL{KLGzMDkvRQm}AhlHf9(_*O(H}W%AbAW*yWy(@(#bGss!L<|fG*EBJoAPj982oZmzaJ+Yl{%q8 zc@e`#0_>((x%TBqVww^(BumS!LAsSk6VsYA?yWU9U6tb`f~3Ca$8OznXktk6{>4sy z-GBmuahcK{(AgQbm+8}x*nqSM@swyC`FoKQo8JnlkDIE%zvO~Fuv1SqZ83?F(z8g+Cjyy&F?eM znzPC~2dDk~5@sXUDkgoRGIOw0tM)12Mdec`i|cY03DYH)W`flr5-uY1MfgShP1G?S zibmH1sMnVpF$=*saV*BN3sv}QzeI$FLY&N_k98OqgLiE=YqO@mTTBBMxtM6I^khTb zk7%dXS)0lx7{i114QRRWKxLE=3A42kJ1*n|PNy-D%f;ryRH`Ko4OZ{xS6>Z)veInd zU^|<~*#0=V-{)IS11DOu5Fy&9L~!PBI-qViQ_*rolx#7dG!bZ^)7eE4JoHKHaOZY( z8dzZrBhHuZRxR0F_guO3E=exU?5gowY4xYaAr#0`eJTbn?AYOUstU7Buqb>)C^5I| z)&!nK{Dr>HA${9dO_aS;h1NAotOu@dL|ko%o!wel3J^FezHh;26%oyDCwL1s-$LYt z+l#Vg+W9#5L#r_5WNo{jl)5Y;>>tyg=8!EZwJ;txx2oB!?dou)O*QFW)fqWK3(Fll zfX~TJ4)~cLXc2T80r)qaCPe}J>0&!uI2CjH?`M)WqRS9=zt6c<(>)~!IkC6$8D==X z>046)q?i^y`xIV)!da4WNt_&7p`(@;!}A_Aeb|M1;k%)|ga;`AqvJgI#0f-+%ZRf1qcUw*&PSlb>46;bgn>**PF$#6y6u0=`@YoF8^)*m)0&sEsMC zp!10HT(@e;|q8u=^@Ic35)S=OF_Z&a=FmryNRvQ2O?yXvPvpz$x{>7S{Og$bTj_~m^0 zH)pI4o9E9U0w4btN_xF;YKos1K$xH5lXh|Md9Be0Lb!(uf5TVLeb`D1fa*?{ydtt( z>eXRA#0TY*Cd#CnA>Cu;@1D9z?Y+yb3jGV1uMjr%Rok^@-qV&)4$WfI?4Y;Eo3}aN z76a0{jFVR0(hP^@wHn{`BN_WYp0-4vw#*WTGyL5GPDm+m(W9ziL;Yo@jS;Moo;yfy zu@KJoJ?o8H=gt|f^q81SMSo(>&H(UOCha{`1Z_K3EKms<&mt1&Z!C0WnSv|t=*Ivz z@?_^d%gK#}kC0TV4T_CLfw^!~T6`Kj9MFLWpvihYvc;VbegK8;lz2#l8d*m$Y<_I* z+kXC4zFW_)Q<4yNO~aBjQ~Rlbw!#RC-zLg6?hw#X#AcYYUDuHy&TfZTyjk~e&d~+JL0oj z?vJdhmtCbzKJ&$dF=_EN#mKZrnpHori+2>f7ww}%>n*D4=ccsECYhRZh7uID;3tX( zp)U$%qW`L|ygXvL1eh7mmspInwJ90{o!ZfoM{hu^u4FhiHD^KxObAsdoCxp^9qD4c z4Mar76kfY8_e(?LU+_e|l|n8pX82Q!PdrJ>Z1nt{toh%A!>Zb`0Xw_1*YAdVz9v6lBWM}cN&w*9(a=whMt5O(krHR9uTUyph$B? zoiTdV*Yx{sSKVBd2Ka*6R>Q8kv2A4TU7*v?^)Gz82^qE@#4Zi{?K!nArw&n6!+$B7 zsOBA2*IMw%H9L6ZMQ=5II|(?I{Re)7W{DRIXI^YzMuK2w6#m5J{Qdo{-xuuWh8F{H z+Uzk5_r?SDg9FS^;UuOPer}i{K{G3~qhMqA8_;A(*XM;CYl>e&CD-Gt6wz+Otfv_} zR+lF7X|3dG{IctxW(S z1-e&1I!6?^vngc+ua*(d{s&qa)5)r?9B+c|={;PmG-rG4#5amDy=YPMW8J_6e&{4J zXAiC2artvqEPpxZ_XVT~d(c(~4QG11(<5bxGk@ah&ftM`9rdy7wrNq{DYdVgOtD+C z?4>kcJT+qsj(5}1hcBtpte^~z9uAh~fR4_dDm{J8CkJ=}N$xV7Fkh2Hla+C|PbKDb zc_%AE<56dUB)VHLGq=x=O+G)Ob}e0`Z@shAjA%;Smhn*$JpcA{*4vIVTP>AezF)1r zP;(~vL3v`xcaR0{@s{vBxNIxMmK`Dq(uJ3 zLJ%&gDWYH+m}of-$X|Lz^oIAPa}jJ zWuhYKL$EUKJ7G<`u-mwmUdU+RTPwtkc1DuK$qNjAA_X8mi=S=tX`+8exO>il*;*G7fnqM8U?&eG)cZDLA^#zuC!yl4P+&P{&hm>Ee-M`m1%TAr`Nb>yh0-lbwg z#%egaE*gTE7J@!|T~QZ`1wd0K%!LWMXJPIHh5&pRQH$*n4r&+W_NB>CihJN9V>E7h z-pBCp^<=kFOH3=l+txlIX@6|QZL-|qT+!b46ey}`o(S^RjJc5H#8ite{_5L&_ z8VS8DWHBDL{CVDN{nM%U(Pk97xBpVxHJY}R0doiR z5)&T|>_m+kee#4{@+5nmT@xiF)Hub;M;u)smPNBiaXj;00ayu)(WVI`&1|tM=ss1Y z>QB!{54hyW^#p5b+@f++dC2UYuAE^@!AFmww*sbR6O@CbS4zD<&q2?Lc1G|B4GpG3l%X6eZ(+v3g&sd4YK&vM}9*ouZtG4Ro4k5A2rX`7lgIo z(^-@ZY#MCM>l^?q_JUrQe6+$J1uu<%wXHGVDz-F#+z(T#;bP3{{dk+Ew~PvxCu;fa(Kvv17q+>HDY7NEOaU?`Xz+7-Kq_nQwB?LWV9M?OMfx9>(bN&b1 zZT1uI!&}zDZYER4pc)$p^&92G^fkZNbpw5ZFd5=`l%~HM<%h=Fs=Py)ym{Ao`(Prg zX+BiBWJlr%$rWa5J1o5xU5Hlx7JT)=5Sy>8f{Edk95vPES|5Qi`yD6WXkkTFGz9uLat9j#Dpfg3q^eIVrzFcgY^Z?@o$*K+!CE`UsK5EdgvlX^3)3(|5eDv zP#Qo|Qx`YI%P+z7#wEowbghGkq;(5LLye6g?_VtsN~s&YBD&OQiuhy7cn&xb&M(+Y zZWy7ly7{5S=YB%ot=par5@NmB1x*KLZb23yt|dT6TD z($G`q>BpJ4FX^uyO3B*4Ti*UuU97Gl`TXF!XTTkNuIIzr>``dM1Pf(u4J?!Lc zyk@FZ7^kHH-r9bztF<5Cu?F-K2+TUY?2(5&$n)S94Z_s^CTnJXKXNepS#T59yd zs@07HiC8V{?2JL=cYdxRv1BQwd*6_5cQjNbDA=AvcG0D}rVq?-5v(-L`rhz$7(|OH zy)dUO>ThGV6EvGm<)*ztKy%P=V?8bD1c;JRu1mG~Q=_SSw7uT{6RlDO_6y8yZm9|- zjO>{C1Z_dy#HAPu1sn?nrB7FD2CF14@#U`y?0#NYwVy(jew}h!;O7@wK=}s%B{T65 z$U!S-Knm6aJS8wm>~g-#-_oo-Qm@V7!Vg6y*_ zlJMC(Zc#T)$9LN*d@P4CDWPZvA7bf=)C^;g*X3iE8cpm9(ZdP|cwS`{Vvbc5KD}_U z@Vn?HBSzKeWg(KgHucTHl7W??JYPu1b|f3^@0g08h&M{0h5Wpc6124aZBggWJwE`f z61s!4ds{N+Vd-&8(7548P3?~qv$NkHc#V_TewU}J^YiC&hrjJ?V$WIhW2fDr)_ekF z-F2#(stF~ue<^i&WuBqW9$&vQuG$3u<}Jh-kcZzVxn%ZoHk8P)np@vJ7;;$93Ro%MfUoBG_A(j4l`nxAg#t&W)LZAER z4lYYPAoi1*&X77=KuZ2$$Cj>SyY&q2uMzPu?{^f;U zVO;;IvHt&Jx%MH6Irf~GtBba~Zq8*AUHT!#ZSkOm@*gO5yZ#DZ!ZG}l{+~WRHw~O_ zaVp&wxYh3I$kLOt3W&p_W)50fJMP|f!EMrGh;Or=6x)^W1lMwth{+R2#>>hdr)ACc za_;_mh)WV3HyA3SGeY~iBmiMa+S!yYOQq`TN_|ZiPi62Lw%y^fVXl6?xGYv@6KKP` zJfzzGS&2rU$eVX+wDy`Z$jrtSA})*%H}le zD9A)D`q?(I^?;ChF~3s#o6vjvz(Z>8`vNcJVtij!3D4An`HEQ?E_!w&wTB$v^|tVB z;rWH>n7i0ZFd=ki>^aRj3#B-m$ZCFKz$wM9kM_~2BxRIPk1 zbCpAaaj*IV`f7J%XdXY9&E;#&{b=n5yA%r!?4m8#4IBl%*+ZYrl1KsY$E0W(2oh!5D?swCM9v zC&&krjsJm+#(UP(bpl+@3?Y=}srL-^yyYf)RUKiEhM#xclyfhp_EJF__!Dq^_1i$S z;2o|YBvIw~Ipn>+WR|7ak`Z4A3sY^(zQl#}6iaKX=rTA0p`f#OD|sS4?NJ;-N9n}o zKTyT{D}=237HiE9(ZlFZ!BAAHd3KkhNeba8JS@DqULYsRE2s8*-L&Vo715f6BxUTm zHSBpJMW-<7N24;wR9-ifv$h2ArH`ymQgt`FbXmXEP4L{()(bg&zwM{&eHy;yW8TBq zK&Wi7SWBdyf)Fn(C%5@sJZhn$j-S+@`M^10=CIFGlc`&}e0A$gQ-Yp-$M0N;dk*;Y zm|Krfku@S5K((sLXk0VMYTy@7bw)LS>%|Wa21AI7`KqeHD;jndypCVX&qU!-Tc&wq zYO|i+W!poJvcQ0kwe#H#6|2F<+jh3Eo(7MOOsYk1W5S-NdeE~F9)4$l(*d3G1J6qh zTZ*pxhyk|c+5l$Z4^4LrQ=DVkN(gR#Dc(aA zIjkEK2UjD@y=sx9I1`;I7u%B07SPd)7v)R|Z`bA|heJGj#s=|;zv|X~Zpp%m4^7nW zi(AfC@bj)L#bxMsY#Zy&xIlJG9x{WqLpsD$fB=#P63zIs+0BlD%ilsPq}oOb95i}x zsJz#irka>Ar_i=9M@lIH$tePljMb%NxzTVF4RyRp)Xez$ROt83D9c2IhqoLje4q|{ zMux#hGqb#m?wUVKbvB!xr|SCz^NhA=T~Ab*DO;v)dlNlxjFdSx$lq>0Kv*yVRsH@zwk<_>k= zQH@S*ooMP*BQjwTD3Ch}o&%8pWWAR#g+(*EA;%jyS1n=3cV9+!t}`l6`IKj@J2a@Z z+3X+3Yl8wjkIyT#Z%!XBk2Awb3qjXS9A{xRBl=*Zn@@|Ve?Z4aCYb>Rw$}sX zox=M_mnxNF{%u8reo>T>Ue1G)hj_^Wh{jO3ujgn!`uh5qU6AL%J-d5@U+j)T?B^ZO zDB|L|+XWAc&vkM-4`sr>JuuPgn7>;;F+^H--z+?}qGm4n;R?@%>mDtZr7l(oTj0CD z4}5W;?h+lF>s56{M&%yxT0qaOaavr@V0k^W&bm^;&m*Dm+V9U4BSP;<&-Cd7m>x@p zc>*#3PdC;4ro&1?S%PD=gb;T^s7Jz2KR;D^Z`Cz&7|bX&ge6&J{tc=uXe@<%Nh0Lp zYf;!{s$UZ3ZC`~AMmHiFUTN1gV}He+ zh!Xw-jdC#RE$;)tLypp)fd)0wJ=X&BqI(6UvzKi-!CKc7zu*JB{ zF;MuCnCgt6JNL$LSdw)Rc#I`%q8%!LSS}0CVJ;tO7O^~3MQIY(=vou=ZIh(=Lh^wq z-HUpjX!4W->5d5uD&51=nSwX}pNOs0N0;7cP+}O?A~xAEjDjKtonwe*hCLJ!nBSK# zUB?DF&68=Vw?y&^|1cv_2@OO&`V*$Vu(OhPF13UCwUMr*{1i=BlF*UzD9*Z{ze7C3 z5^e%oUT_f-SyZIl)FTYRb(S`U+1SSB4oB=nb94)#ejb^~pfEFG&e?WY z2iPZt*GzF&K*2)_D3AmxKu0NV0?qGN#^7ZUxmerD4NRJZ|4n0$oV~P`j#}_H)Dz8p zUk+wQ3%QHrFZkkg3!(#{<}hg%sw%-3v3&K*GFj>ECwU{`_wXye7Sf?z=xdDUp}J#MQ$kvY+dtVJj{uX%I2Ah(`zR7VE&i%h$)27sS5@Uo=7pbp9-3m zh@R~d7mgz8-A_k`ETt8vx6=%m%Pe#cBie;^jGUQ%jSqS+V+i%=g~F$S4qHBR8{X18 ztySK~kN?n^sr$ff8{0rVcLLL=XCI5X`;+Svjdf{U>Ns(<0krL<10+RhH2?+vWpLCl z=C8=%0tJjYBJT>R(qS<#hm5-ACSQo;yL8S;4sFs^4*^FV{PeTL6K=e?wksE_I-j~a z?adA{>H{FHc-{~DUa5FsSLoMt;sLPQ1aFva@Yj7AP^bz$f^X^UL_4Prkaex7skah( z?Yo^_^Ee;N;uSidtR23h<<+G{){ic`WOh~hiI)U?^c0T0c4I&ZfN6`M>wQTtop9Z+ zCW+A=acLJ5*Fm7Q!vcB3C}bemAmxmCk*BEZ-PQtypljR$dZO-$??8`)3N?DeE@Zs9 z?GmL5PrdjiUQn(}ZQvJq|M*%P1afYDXIL%t0G{)0_dQYz^M2`Brsp#+js7`P={&c( zBLcSA$HSw^-ZPsTog8uF?9#ml9V^*qBuE3PWfoy=ByFGbqigoaTyvVhD}|Cw{p&U+ zY7s9a6N`O*A*KaQ7Zw0s6{d z=~xM8#Fer|*ZPR}jgOxpD5eEH6uGW zC&P$2CIo-TAeJ+>wNr z!Z8wy{+8kz#|aiu7u-jYfl?A5Ix_~QWn!x`Q`p1R+qIdIoMCJv*uBcu?}CE1|11IJ zpmCP*MW6HRJVu_S*2sfo#f5+Ry0+II6qxj0nk?BFmh^FIL7g50K~;9;mK+u~?vg&A zYJE?XF|IRBvgMBt4DH?=6#n@6!e{yV+)WPDD%>G4N86YA{ii2UTM@cX(~`X3Ux+w5 zz%No$+Wyea@xC0ge1feu^7BRL{&<42Ky>jf5Rb!Fm7oTu`8PW+FI2f^*49QkTlzS( z9<34lGOKJu)|+a={AQ63mf2F{Cid&or8Nkx;JFJkFuTQ$^p{^cQsR=UdYSMB`#K7P z(dlI!iCZNB2}(UR;@jx=1s00@Z+evq8u(c9VQ4bRB!XsA0{vBaHI{ybJv7n%yqHYi z-y4R8J4^3lirK~vW!CeEQ*LcMK)hJuA5F`t%Z()N6{Cy1Bt`xls02$`OH^z8jtyVL+NiQXFqj!GF z4%fxMlXbpcLnuEkiQbz2>z4z>^E75T`Qulm7&|dv2}*`TwY>P7r}#Yc+1)REhV!B1 zQ3n%0x8ivl-#T}TJG%G3t5OSISheMhw-D-bAFB*B*D>HXDP~UNKL%!12^OQ(FFrPZ z&0bn|P=CFW=A``OxKDeZt=P9aizi+!@Ju)?WzYC|!AiERhUfJN$@C$MFcWcQR7*C_ z_dU-8zUH$+FBG4FmfGi%kGB4q0adA?0q;+=0r1`7*wjdfTA=-ro z7j}JJGqf&Kn2yUVTvoz6Mg@8*24%)=o|V_U0A%8HrqMUKm~qEHNOz6bKKy-D; z;k8FDex7oA!$>cv!#vZw~2BmQ5cZC?EzU&$u zgbIQR0#&z!v0w7M$k}t^3xM!Ko{1=qgJ0vr=_J%eN3xx4N@Onl8k9jy`4&_~;labI z2eZ>IOWr-zssp+9r#G5UtgAwI>Q3vwN3LOZuK(2;($I+{txcqUUW@C28z4HKFP|qv z7IY&EryR`14*H?7Sb=Z(bYs#g2YO@2x46)-{^P|dK2e(6Gwq_BYPV%n% zOl{|3o@WyK)|vWr(M6cSfI+%7XEwIs^HE*D>>PqDynm!VtI`>q=96y`Nr!w*J(1P9mpSnbGxB>B_*$u!Z|Ja4-6& z?U&REVvo=zwfH#N3i43zI>6yIxc|hUco=apLkqi19hn zp+)iwGo%Z|O0jIaSk~bucXmdL^Eb~B^RilFhFMCKHDpL>>fMcz@>^a#PyFnaNdjJv znpC3EHRb$-&m$lE1$)%%N^;);2YSSo91RkRy>yj=O{Rq{2y@twCurR9?Nr<%s><`@ zMy?72{b{2v(r54x9dS)26__}p=JYu6qJ=@;rGt{cRF61V-|RAYM;VIY^S$$zT6CM_ zdN^J-wbhZzfc9QxUV0vP}V&61#VoS(>^UA#KEt5hd z;><^V4)T)iwH{YJ&3>%MHG$uq;%RK+9Jq6ieY8>)O&@gShBFIj!>S{liQ zZ17duLMBH)ub!HE6^=V;T6dWy8`o?6v^u)V@ik;833|DN{z{v_*co=4a&HSTbm06% zU|QIE&DpWRf}NMaehF}{98>Z~uI38r^Ug)ohAAQ4YU;PfuB~$DV_hHWrE}0^DEQIG zpEN5nYcHV6Nv|O8A=0j{wTtAy84ItD;=ELn+0n?wpv6ED4(ab5Lcem)hkNKu!@-D3s= zxtYj9!uWK*YzIE-`2A z{w%w&MC~8#A8g=8Wg}$YlA;(n#}TVZp8eA5Tf@ydIp$-nYV{cDr33NKIWZ8&@tGM_ zldWA6|1y_i&~$!^_kvvN4J`Rno7#d809sL@7z<@+QU$x23B#7?Ht&7jUa|UDwA=bZ zo^~2UanKELbp*Ihrw5Lpg+Zy`M1{_+>t3W;--?h7Sb%bhcEuVQP?JvP1PfJe0(YQC zZ0P(W!UQRr2YbE{+)b&w{?;D;7w;sqCD2@#Ju+b%NuSpR4tG7kirIB5T&|iU5q{05 zHxkk5{zcBYQJkLyNJclHUN@Pk7SZ?#^d5dm$9rj>3R$qEx}}~GX`sk;%Nq+_0%Q%< zl@{T6aX$!O$2t>ka+}@g4(hT{L4!u$a!}tg1-OndAG?S_@ zmGGyGqX?_5@5!fOexK_5Q3K@Happ_c*#fT-)Mxw=5s{ifqX+FmK`D1cy=OBNL12hr zGZU&im;^-S0XfrrRK+6vk~T;`)m*sgIH!RY2v!F`DiOU3Swf_IcgW|3Ls6(t115Gz zfbqL}=0%mc*KF11$Kk2Nx})RS8M?Gs3Ch8sq+s^m?DW)&`dMk2FnE2UctnZuGZx-; z__HssGMs8?;=+xP747^9bAekABuon4$T#)|jAle;Kks)z18Vc4 zS))zQC1l(v_vsyvs(g3!&qzQNZUDUoyQ>A5OLX(8IkvG>gqUTT{#L~J=G9QUAOdaku{ zFN@5OT=RQs83iy?rtG|1=dg%OxbMBNf~P;~u{I_Lh-OQhvRnsmbn`fFpTd6sw|m<2 zx9MpCe`O7NgHUsfR_S9q>J3i#^!$bIC2BNPxwqg80a?`76fxHe?&?DB6WVNyFCQNq zzJ>WdaZeDL4AJQ5*FFg&VxTK_3piRKN7vKe9Mh1VWiG&-n(>+Ym)Zn&p@ubsum+0r=<)e^$Elc|rNm`B2e{{x-O;;qRU zvnSYJbXFttD9PRLgdIDYZQ1iCo_%3|d64ScigK{J*xHd8UEeBvJzQrHp>X29gm$=JRkC2&lOMfAK4l| zw~K@0B{j2-cYA|gyHuF> z;^39BodYZ<&4N4^S3Fr!Vz~EcjK)mH-6#04Bxfc2%K26;Dav1E-WF%(IoWv~;p_DN z;ULQGjJ6KjLoXGnjI!bZ{GhIfx^l4~HmTp+FPK)`O&gFOc>1p8yJHrGM|#AhlRM~d zwuls)tRle0wX<*b{cse5rd?L*mM5Ot9eRxR5#>I@+{h`VC___RHPyRwId16p(1%4c z=5#0c2jJ1{SY1x((hI5)KZv6=UvF?1tn zOKBjAGyTN^t(yMhKai{6>-qEZ-EErmLT$USCDF6tN@?9{@=^Lcr*&n@E_;^V}} z`yRJoCfZL!%&&Pm1s9l(9PU|-?aMs()-oG3U61OoQZD@XQwe&pX7jIx?3MVZuPdA@ zKQB;h+|(BXZ0zK2-E3Tv8jCCUHW)9q{Ls)dWrc*k&R@{Jvp7?R@=UGDn)qA1<+V_( z8Q41#o0MNF6;Nub!gB*6HI!_cpKf8kyJt-Qf9o4SLy(Pn5ijeVMaT#BZ}#=Bz@#Y_ zt)=06ohX@+B0@-k0926rwi~WZuG+VJ`q^vBwzL!g{Edw`INdQHlYQnetz&6X@U)5W zHwCM|hx@67Y5<8CK!8l2Mx6Qv^n2^EiC8>C*;oklKd*iZ z#6RGYOJ8AoC8W+0S*L!~tLeIHR0T)$O!{1?NK|sX2!@!(Ut^c`(SS3OFWe<~N|#Cv zN|%gUS#0kj+&Ulq{7`)_n<(9JyVm}qxpiv8m{i86+`m3^4`O}l-LLQ0X1wL&n{t={ zA%oWqtTgu5)rrc)ml-aAGG#e6uUsfflz_SylTOU$KbX-Jis8_Zi007V7e9AjCe1)x z$4)q)S7}Ix<95V>%ATzKENvRlCPk?q5>}$K7@2?2K8+-km2;YZf3ZyH;j z%Z*U2yYeh-&y_#^ntusWE5*iw^$d8xJ)Z2oS!R5S1)j+SMW%j@ z-v>f2)#}1Z6WY0SSQ1a-72Twy%iQz@L0Mz%Yz+y3(Js9UX0Xu)fyHmaW(gXkwq>x` z4r)I}e3SbRlpT0hEAIER`u^t|?vJFkB&AxKJsEf#wZC(R^WHi6i`jw_Jw5lF9~2Kt zdYWJ>9}Jg_?K=R`l&bJ{N5#CvuevVEA8351yNK*_Te*ADVODMRW4?Q_d&&KKTR3)pFQ_O4ZuP0oH4sqwgyTKjyn+1_Bk` z#Jz5wuM-1w$IIK{++7IIMuEYZsI9G1=_l1^C#&t)CIpSea4#&xwNv%5+i&zj;=2~* z`AnWk|3*t?BzY;l63T>qxjZ($V>o59R*fTtx7aEv_Yyi6D@G6HLj$dIq&;y{4}I*{ z)I4S@oa`sU4lxM|UX;6bk6UuL8Gpg3r*hf4znY6DJt{7H-LG2pE4lIYl+C<8%W+=uU z)7p73V{LY7DE(<-a%6a?y8poGl=@zMH^5w__A9sVsn)31hQs6LX%ZGXs;j^N=L_v` zE2IVudBUxcasPp$qg+t$MIA4V3f!k_g>EXHWTqhgy;%$n<n zZsAjoml4lkym-C+4GQLUm1TXQ1$UH&SW4Vyydz~T>0o~Hu_?`zx`h+{gE-4! z0gRvC6iyVa#m!+vu!~xJ+t`FN74@|4e~()aXkix`5uMpg!G~EQ8Ij*K?l+bic8~8lq%Nxg;27kRp2MdG9BgAM3I6I!-%H zFfQ|V{hbu=MZctp2&z-?$C>lk-x z;i+QzYPjFjokg#BaSERfK*1NHaZ}9n$dz)Si|G}fl?MELfb=IrTZBpH9H70Z=Ua)`cDLU`3uzi)A@_Lk`6Fh=xfE-FdQ9G=?9!glKjT1$fK)~j z>7wnTp}v-3bP-?EdmyA3DYZSoZ@NA18Fh2NwF+&tr(J!v6rcM{FcfOrn!AQK9SolK zmfbKD#qVsr{IY@Iz%DeSZc?D}ax%(0Tpsg3{MvQy7`9;v#IY?IxscRJMZ8(kQnc#h zs>Rl1780lSF!bgD;|@X||P8+)(*?zSzK3XyK|%_o_6Jj}DM zd22b36z5loD*4ftT1lDjK_nwC$p)L@FVmbRWM#G0=wFo+U%;fvr2AL89OHY1AJ|JH z&TZz;;L83-(Y41j{eS=YP$E%LD5g&?%RRYYm--^aN=5DoNy}yK*C9pjx7>%yE!QP% z7@PY@%ze3EhPm5ZhuP=1-#`0rk3F{cUgver^LAdA3w}%h#3aP&+j>9;)%8@w`a3@99l1FKt<$w}HYvqU@RwsSa;L zruY~7aCm>_;v*W7T3|9%7ktxA(QrftetRQBCCK*^!th*iUZo$zZCTfY&6UqM)m-T* z4&>{FhY?;WZZWIS4kBMOUos0M4A@HB%4gAr*t@sz+!$?lcvtbF<4Ku7y;!LcuaTj3 zwxnLsiKgs}@twyDFa(_WmD@mYhE^kKDhv|NB&xu~7YyK^&L7dW#Fx_;7 zZbEXES)oRMmeG+2m@*v?c_D`oGts8&{#a}3FP^O&mz0Tl=OLbT|6`>ti#l3)Cq`c2 z42{R}d9W5_*)n5`(!J9+h9P|EY}A1v#H)NgeU*r`;}0z~VF*ru^lhd1$z2Y-V|N&r zFTO;Bxe3IBC)&&8Y0-4xtK3p<=RUsg8A*@2?i3+^r&^f*Yu>qWdeYR3%Cof2F;UrM zDmml>Tc+j=s%0k66}LHhhb|g-zqZUd>W1HInTC`#5sL|8zP)PQ?8;Gd+|5@f6azd= z5E&_d2Qqmx18tWw47v7tv4%x{8J14dPAQWHGJpOAf6ZP?4s8?3P)zDW+STpxP4pP3 z5&ji8B5|<;np26!4cx9@wheT?_+ZGID&%sxjbuH`>NH{>^ z54BrkU*`knT-0mNTe*S*|AQoXA3?O$4^PapoLP0A7ljek!TGacT8suHRJp~_vSKP1 zQX9N|R69qRUWy~8+nr9>ZJZd$V0kE60`{CVSI?I}Zk$i6_vgA=acGPA%mikB*hGvk z1)cxIe*J_y=K6)H<+U5{gDsHH(Hr>+c!7Q8I!9Pu@2!(UfCg}be&W0NPQn+0eUNyX z1rnY3yp|MZ^o0q4E(dGQ8Cz+T2KUaM*+1XMuwPi+aY5x+y9L`~=sUw*K4|numTN6_ z57|D&&R(cN%>R?}jU|ZZ>4;iyqwrMweSKe{wCKru)6UOdalP^p$$0mXh&bjSFA?aiLesi`1jlPC>pwGtiqQw%z_qfRk)_oVy${Zlx z4oujqIAV6LXVZYkI&+EaHPsx=4hsR+NBI(zXz!L zV{G7!%rHn^$U7D~FEar)W3qjT>goh#jwCTpQ!i7Kmx{elxBr%Grfm%@Ui;gP2>Ehjx{JVKJbalYIm|6oI1gkTYJmVQX;7 z(?ApjVK2S3s`Em@1;nbYW~P7dFPqP%`T-LG@P<&?+ctz!^K2*YI5JP832)~;1HQWz zTECi8*3OyVNwHi?`TShZ1@tcULUZ6kMT0}*uT0ApRK8fw>=)o<%tAAc8 z92*Ej9;URBSW`o_74b^*d_a~R0vtR58zfbEyL6$r!+Z+^R!HitXc~+(;l<7>uBGxE z)}ziD7X7s|veWF5H_t~M&|@`xI;9p*Myd%?c3BCJSw8qh=0I|dOW|lgi;q|&9SvHt{asburpDWoM9<*U^S&&4dc4bmlP9TM|?HMGF;`--Dw{9e|{ zf#84-I_~YoyK{@5#*b3RFyiGIzt6TSj~ZP~iu(k0j^cAsv8VDmXYTIOz$(O{pq3Be z)+ro2deBA)D_hlOUV)FPJC;9_ZuWSKw9Um4@D`M+PYtB8>iWMbOFn7>+6HPW!ySu! z4GJLwv~P7n3yk~mF50E|rSycfhji7{vE8ZY3)4c2 z=j2e~Mlt68;h7QmxJ7;S)Hyf9KensD*5j4iU^i=9MCLD zpQ!Oo7ir&=pmE4^Q$3TMHn|d`R%^{>@1N=n-nimUe6W?}{OaO|p!z`_sm5a+o&W?a z*@bG+kp&=)Fs_yvAr9Dhz6GcuF!5P8ENrz}iI zmnJhY0qDL`W9g&WE(vo${&5fK+oZlC{uW|an@Z&BJrF#BC3yxh!c0FPlP=QjLq5?U z0pTvWNkAH>j)85vu<6pNC$~Z?DI=_1n3}Mc6qOSapayoc2y*1;; zfLrj#p(nm1+%Y+)xsF!jyl8FD^qg<#Mw{b?-0L@Zz>6lC6Y}rh%UAi#=xaiMG^@&Z z&AE=)zw8TqlbvzXc*D3b%QD+1vwiLcf{wjFc??45QKjCnilr2YwhcQ9-&5?q3x(?c z9+OlW+b(Z&^{H;zQT-k&Gm-0E8(V5&P`;E}d*oAVT}L$DbWOdm)6>nemh_&-k$7yT z@@Sj=Cw(_KC53?8uoF2)hrW3c#zj~Ad^I2we=?ob&CLAuO;z3|Qd$VfYtY+4B_sE2-QnfJJ-UP`O~ z&Sq=MPeP68 zhoHqTT@7a=M9_+8Vh5O+>^ZJg5amQGUJScV3u{-Ibm^!tPVn`O%l5!dELJ@b2AK@K zhmZM}+gca5d`z>x*;}_IA)e@*vQuw;Uw=fDCqRTv=MMN1$v#SfTc5XGM?P18EQX7l zCy7?v=?>zJuzZ1h@MZMf^LVH9tv@qqL116#8?0YTPCdH#V}+&qgD=y5X3gehpzS?F zZ8@BHF@Y)E=r&jkY@>T=9338&L`?s~BM4wYbO7|HncgCw3%E(FVlwvJ zbQ8(>)Xr=zc%hijv!ghc-K8yRD0}+3S)^K9FFC2{ZTAmyBZw)oQEjsJ`x6J}_CAw@&9jaIE`7C!iZ+Im>EYm*7 z_3bQkZdg!IvK7}*j4hLUWZSi;dQH|sCoV&F%h~x&V$4gI#6tSr3kO1s{OEK73i5sr z{}Vh)nrvcDRZoFn?>+j-4OV>eSOSw;QWu*$A3sJ;`MuERnj78US&SjRI+ z3+^AX_ov8ERRIEEN$9%T66duL&B;3ZFt76UOsk-6#td=J$`@R%>G-lBViP8v9qr%c01|r)%4F+Y4vQM>~zB zW3cPy%+?`Ix5cg2YY$st9YO$Kc+>-6O$?%VZ$zeyux_MG6vJ)y=5ECch3ZhWfY~HO zV)|;w{1rQQ9U1yVVGc=W$_Wt#j%#zDAizJS{Z6@06a3B^mlTJ)Qk!paYTarct<3{D zhkV5@D5_KP{bkNYhMi`0Y@Pv5YMg3xvhP}P96eTZsX|}!?E!*!4T^Pfqhr@`{~Nm8z!@Rqs)(W)Wd9TzcwM3*MM$DXH4jJ;`$encfC zgxnvG^lfJb@$%PS(yN;HcZxMmDYU!uNz4(YlB_QVcLb?bbTFfDyb9&zlS&74_uwGf zo|sd3m~Zv}xDB_auu%TE_Pu(Lm0X{mslu38ok>;tWSF*ZOXVfMG^03->AG9d4937< zxzu*vKJqJ{=FlPHPK)MSt7}0=6LozdRo*4s~MEYj+~dC#Q*<#%NTjb#YVKq zu^ThfL@C=LTn#9B-xKl>uba{(Pgg{?>o7$jZ`3wmBo82=+v}ba_1RT}kVE0XF0*cj z7Y9`%78f>C=jIs5UG~gH_uNBcH=Cv0sZ;cjhg zyXQ}Y_|pP8(;#Poe}eo0iLKs=xaeBs<^jc(+qxCyg-BzhR0UM83Z0x4cHaAkdv=~A zVpLbag1uD2LzlMaQcpMA_jB|1urMKOrH8=cGx%t_r=MjuiI4irmem3cL>nkRm%~w*c;gnC(-t{!N zcE+(+;NeiP#_$eT?1xJ*y8i=QWZa~=9EMZi$b~r;nzi0o6;prCTZ}C$Sv^EeepKjR zI9+vqw4L&}T>OK1qHY7bxsT|zQ>S|x2yP8TDjc`4Ho``xy6cp2HZF;?4WA^Ob8*@( zHy(Fq|(6zb;b0e*z`^v|oL_BgB_5AtMC*)O#Ly~FW#+Ct*ILE9r z2m1`4I*ZPN@8?9wiEqD$^X$=a`2E6@r+R<~9MAF#Jpd_x5iA4`8?IO39BQRM*5etnuoq22i1!iI$i%{!f;=%gCuLcs$Wsb@`k!OL$%vb;a09s)>0SBf$YYeRuxKh0y$8;F8LY>)1 zoW#FcBA}0%daaZR>T8h1=ME;(5fsBF|Px7(~+4C_;{Rw9Nc?!I`6+V{fc-0Xk&xGM?!!?nEVNA{PsL=?*71n9KX4qk~pQ(oWM8?n7QXA+%3 zIm9kq8BA>0Il%XEEx;n{c$yVHz~X)B-X8+i14-++k3U4(RN^f_r^e<&hy5g%WnqrZ zV3-}x<&HizF|*q&j5?s+IG-MXyC@DE8j$y zL9F4d+>D3@c3f#l{0&-?tH{#u*}s_FmTYGpn%(C!J;L{YCZtPP}x+q;?={mmg`;^|dI3uH)sGK|X)ld3wXpRI! zlGn7pGhRR>{n2mMzH4kDv5nFFYV$5y+ugdLZ{Wv>i1>pgE}|~!Ye!cO)^Nr8y$k5p z%gG}qQ>W#x+{bZ2_;YV7L2a##^l2-_8Bd$_*oqBq~bKFMwq;xbHrvar@5&y^f3u-^QI+Njqog$ z{XYP5&}Z#{93Oz|P!XBp??^)%J1?EgOvNL}f+WA02EqT&_)RCX;~X&P1q5|O$cY+z zEHt|zsI=oN02)7xJs=_pWk>2lsjY36GozXM%vc=P>Y3arXv@o|hP~_TWdrK$$+`fi zd6Iz4UB#Tf@$|5odOHnQV)KW9^Bf%WX@no(r_-10zro{3jw#<+fHA_!_G~FgE@tzBD)l=V8W69!@2l9TZMlvzk#Yn(nZn zW1ds0G8t(N8k@jqzt7tb5|MwGljDk7_#!&p!#UNdZ$xJ6yM6GI)GCU>iVCPtk-Zda zn|~?zr)1AQ=&V)bZA=ncN+X7=u>x4$EUqCz!P$oL5}f+1ZlAy(l#avOBYRoBRbK8+ zzra6a7RZ8)Ddx%nMp;zh4TUvHLxa4nUly_Tb*9YHsprwD(9rl=V%TG%tyfobs%k61i*k3AYDH+`m^N4Jxw8L!+!zbceq&1NJ>2t5ksX{V z8%<&`sY;k#drEiV(u)_)PZQzm`QC(TL*;$tMxZa&J533!8~rp1KgtCgP_WmeIYm*= zC*ET@4bh5hJx*laMZ`JekCQ6`7vr3tHpU;4)aQAWO&{U4f`HLqFWR5WmnN2^VSMuD z^meq}H@8+!_SgRdKzhV7fK`>LEVio9)~+R`12{oz_lj??_J_A?@x>c1qxnUiU_182 z_*4bF$J$v~M}07;+q0s4^LpuSJ2*Cb78PmC~?fxUB`9H$?P5 z0JQx-z+XK+9K|V&>D#(@r)R1g;$cH2Aon-M!z&`gFR=b3tc|kJNJ;O~7oVlIL}|=( zIkNw&&;FRH{4027;~&%PKaV>n=CO$5ecJ@c;{PCPdU6w*J$O}ct1?b`rqcnJc){su zkJuIb@=FAq|Dw^08s#;IHNDf3il=6!7wdz6`z6$&yQV^u{)&+VO2~Y5<0g{>M9h>4 zShYTh0HI0WM$#4eqmFw;fI9q3u*s3GKboW(0_%?+JcL;%=Tk@`HyPSO^E{DrJQTi2 zB0gVyV=!_z;wbvz$hCcY`n8LT=nkYHV*n^H5+c30C1QgU5n>42w4_(oivLBSM(8$9 z4cCvJSpT8uKZc5>bg$jih;|lpA&bz&-pW#Oqye5;nkMBGaFPTJ_$mVbdvGxS8aoB* zc7V|@W-U?zV%5rd_=YQ@D@?1Hc45w<#sx`zYVby=J0TWnj%XmtEoI(21a6pUztA`e z-YCr|pLN-h#ts?+xXvJG;iypUAZ~?Y<~(@LfW}KzB;i{{IHu@QlremQmNA96xDrXd zz1J2LI*{j9P0Q>^4uIf+T;o+CO3HC9n#Ne7(kk7NyV0X)X5C!2!phYjr4cgnuGZ3W znvrq*zf{AcHa4y+Ngj`#{Ds#pVeSeYExlqww`Af^lHfMXp4aRyLfq86jwn-KyBuUF z4JD31S3@&gGtK(%3RGe)ul#VlWBLi=w58S!tA)844V%o^DlJuyfKzcXKoFBtWRhs* zAwg$xI^t_s5cRQ2(<7FLCqGBUcj@@W=ix48xruQlU-Sk0P&AU^+)>kd9oN}-lezB&UDimw%Yy`_ z)1w!etEU6zxM`?-gNWarjZr|9brk+L>UKq``8}k0rT9gCttxq^V*bA1-jYqGff+aW zFtXWleiHF43zqMn?wAjaZ9U}-^fQhvRU0ae{!u>g;wP*^DlOg8TUAnJI0!YdTaWJK znb^MtC4`II@S$JkfLx}V+y|(EsYjGI6acqDe;PBYH?DwEgL9sK?GasYqpn>s4HVn_ z;2WUBomo`R3T`$Gh&c?f!g@}M6u;uLrcYDVgdyr6U>+gJvpL07YfW*Ei$)+aPi)mO zaRs_2oNyFc%C+EBM^jKSH$_eI`?`Mpq_`?!Y{@DrT{*qDzw6gSm_Hvs zS4!Onwa$2j1A$Q?CoLo*vQI$_k&H!VtbjCf6%Oz$>~G7xk0Q-8iUW`V{Y*G z8Y#FKwD=j@Yi?B z=+2+DUHUuXieX(Ey|Bw;;`9?`Byvwqxg+3{@!gDP&;D8XSkbQbp2^ATEAm9erw0WV zK0S0V1yhQ0lcbEc@-fUCD{H7;(|+Q?p3SHdrbUH-7ZG6GreQj&{Mimk&nf$T3ul}} zs~Ua|zRVlu#eoZFx^;aAklJ_VuGh}e`dnaa$P*JKOSM*kf%~jAf&;L*e8crnm=zGJ z)}yU|?`32}LZSLR;Gc+iA6C}bNC!{>L5p&MT#8a(YZF++{i2M{0@F22a5E1so6PQ{ zi~E<)g=*|zTo$t3Errmst;>`OsX3Amc@7x>{R*m#V;?`(k6Nmw!_nG>s}C zxv=FsmdCkvBlnvCSCLiU2hQXdk>}dDE{H~Ug(PR5d?2}hgO~n$-+HQ8TjP~cp->_V zIEgJZa`9`}!c8iVosyezvSMp(mXHrKC4sEot4uAG>TqR<;#mPCS*8rmJB>J(c1Txu zecHJvHi-b1S<2~s4_f;k8loN0w!&-9 zE=(VrxSI%5ldU+rFs8ojBZMfH3(DzTC)T;z?i+^oxuF`;OMG%zPk5GAyo+#c>`{X)e7!u#npgP7 zP;g!D?0*2wlQr+Q#p1r$uNiTFLBYYePTSNCzv|P;$y)Lb4b<*(_=57388&`RwbS0l zk-=;7{Ag=q(4QG7>tPqxAW?<2D;5bfP#Wv06iq2w4G5yejRo@vt~a}A zC3?bWWHI98U!nQbz^w=dQ=`0nE)*#HAE0i0y`{3CYWD0v$2_$~1A3Y=!kDr3C58?^ zIuwb7#xxu5Ic4n+!VpRMw8(CS_*X2w1hW9-SDC771p}`hzcX!}Sf=%WK%TmIv4x)j zlaD9`A5sE|c47$uI(A?F+!vFIk#Ca;oD6#9t1iqUcw%rOI~-i&qAk`C2w(S>yt)^X{(SQ1Ymta87)(PXggz^5m=bjSu2Hi zQ!2lmQj}mAFc_ba5YDB_&3^yV6QC-kk1KA?dvK+DLv0_QncuiWcu$P|*^u33#3$9O z>~k#MSCziwR&TXNvpL})-F<>6Ya0FX&1tmsoU5IN(v-jXQC>Y}$NPuE59a!?l6yg1 z2;U97fDmj>Ou)1V=yf+>CjKfjkHfLrQ>Xq9k08w-Ol2@IpVEi$C^oUv-~)mUfj!12 z!N|}}X@gK_S9Cs1Mpw&3NON2z>p0~{JLb;PZtJ|;vxo(SiYP`L9~9Db%1AfJKqGkE%QjhIyk9sT+|3=vNys@*z5 zj_yi!XIOqPp7=c~W!WGx6_Ari@AtOcK)deKsTx-M4@@ z)h>$MTm|!0h5Qfe-x2U~8O;A&a$}{`P2V&DFj; zKK8lr+mFBtV&+0Tn=@LkxOM-KC>sPVp;O)iRr*y8J?2UcLX43ifqwT-sjwPYgs#!Z z>E-p$Cq`(+2%(7FK`R;cDK)Hq0fjSSXC)=-AtglH#|^&rS{-6bqs32^rgLz$X>J~K zRa2;#^)SKol^09fQORx>K+1Ql>F!opt|>PkeR=&1VYq>@GPzW83d98!A5mR+@=Ej~0A6&LLB zChXa(4{?zLV*>`PN#Dpqj!CB9!_~WW#h4ipqS_6jLI+Dne9IT>&l}$4r$HX@B|Qn) zh(966j~MES*r^GTsbc>42K9N1cJ1Zj1J|JG)1DB8y?75~>Q2~(Sz>kJsmM$GrL&as z^fs}K({tU^P6s_bM+9v=m3n%QhBT(wZ^@PfR9I&JI~1aP`ak;Japmll*2JmDHG^=z z8GD;XQO*n$tk37qBNm4@^Wo4_R$>vyH|U$Yh9jh9pnVZLA?Wmk=wR2tL)V+t^ zLJ$u{{Y6Q8F7_>*%MN8EU~puWoKe7^+Z`q|pgyZ>uDzv0#h|L0{2%n-uIB$yzU#~JzOiTmHbu2GW16wpP{{LUI*P{1?5!Wu<|t?*%F!oZVT0BJel3x2R#R(-sHW}G zYsgsA@Yd}|Zfp_Vxuze-CgV@Y^}{l#bSpJ^1R+!R*7Pun$pmVD#4)|17p=5D=oWf zVQrQF0i;MW5-xF_PxD#N#TUjU-V?}r9xZXBN@MVw0Z+h-1f$^(^`;jU z6FEp)W!bUw2abQCb!fu;&bDuCGrNR8=eegqt8<~6Q=7D_pB_>2O{6uA(xECx{{h}r zIhQomRW|uITEBDL4nH4U@D-S~wvT65!aU*DCFd)~?=kI`8o?3qi}|k|i9gsyr@$o! zpzy$r^?c)b7wsfKTI&D|UBWaiwC>~_gIwhk$A7u^{|AsmqjF{@w~i0&ZQrC?LxZQv zQIpWZmXo8J>s@LrhM@4fc(M3b@w*!HzTmGJq0dYy{{hl3O+I#)d%c(Szqs4CJ)E9P z7(S0W=6>$Np4vG-o>2fr43MR8>un-kDH(08QjM+i0DQGYK0n?}YF#Cq`IiFT-@jEb zH*kTR-x1H9J)meg6b}>lr2G5XCnV@vZEW0Jrt|oQz2>zSqwNcJ5*nk;fqWysOuAH| z5jc7e1A=wsC#+!nynaJ_j^&M{ASs=+{CAzo-|cq@<3MCy%aU~OY`*9eDz`cC2;|Hf{Kv5b(Bu}yuG>zP3>Fa;Vbnl2az`t^P`U585(CGTUvYspgHD|y&F zrmEn|YL0K!zD5bs(Z$oZ-}a-bDy&OVza?4p;~Or~H?mPnS1V0Dp&g8WZLQWBGA)fG z+oCN|0hZXdo$qDiB^zU9M#`cbAhlW9z8N#GgdJ!d+SmX}J<-XOtNroN5omT# zYbrZh$K==LU$|TJt@i&FMXac)O$rd32(Z#s4U6m=$NJiY*B|)WvjvmO%^j9vl9CV4Wf$=jrtB@ZH{b)U<{ec8U9WkKWXqIt64K0vbfF+;e`mif_qm1sneI}O@B_xW$zFfatRnD{-szkCt70>$ zw-W#_*uN(>idW2p&&S`r$mEch0vR%1+O>)B5ZZ$k$Tb`3EA@5OLvbmsuEwtKg$sL(Xk-0!K8q_v5Uh2fNiZ>ha^ zv{=O}?c&j8jRUcz19y`y4EAVp=lhK4|L^0v`sP*j*BkynQon=MPT|ye)v@l zM*$FVAZ$K$2X`1u`|RCHJ7WfQvzF3ti|}9(2@N`hkps|C@O;@}zsP2Eh3X#+Rwjh6 z?L8ubw57;)wL$G%fN-n8aa2elgX4|?U2(1x_CbMZ?d;)V?P01#H5b-&ve?yI1@WUf zbJ@n96t2dZgt>|>^ZWXmCLBO4d}c7KbMIZdpDa#3tuwnHw)7dIrl1geh9X}v>{*8ZOb|Q;bBD}FGEMi{HAcKp0fx9 zKAv)%f9I?qB|x?!#MX9V)w)%sr?h51xpSWsu8zDqcefcSp(Vm;TXij5-|k+p781<15bDAQAGpKuGR3AyYLP%cqy_FYlkS?*r_r#2GZlcuNMqBi#ha+B&%GcG4;~L#nqwHkHr4*PT3doIq~8d8J=+|QmnVmpr$p2o51TPXcTYw`&&2y913uX~h zfK)}q{F0-`HA-~X1t&1qPO>}TU64Z?yE^mOBys_D-aB2^;AVeH+=kF(37>r+oMCO+ zS{|?}V<}WIHTTf**YJCp&FTZ$XI7(?aBv8is&rzWRQgvJ<{MUq`n0g+@dW+r16XD4 zy?E5+5x!@%bkZE{4o_RCeMhFoxui(&+YHz0DyP%O{{dLE+@OH#P33dW!@)35;o*A` zAuYc<99fPw_T{dZS_N>*A%sX=A=8Lwe$97x%&Rlv462*lL)fnyAz;&K>7_E9v2h-= z@bQv9=+<`2HTu4gK=m{KThsUyBHQmG7$)r#oP)jkUI20uNxSX4onMT04Id0`h)AEJ6z?=9xj9>40VDM^<8L^q+i#rzB-n?o-0%INyhU> zeA2``)V<=I^QRBl8xKvK6n$7s~Tw>*|;}?s+46RtdUPBi)86mcSP!A?g z>c1IC=Ue9LZZa&D(HgaGT6yP#gjUB{U}p$j%%@UZPS<8W-qHX?yg$+GZID5n7U)zY z#5C9bRLMVV0tIKM6)r-e?4-xWC;c9|Pdyx}syqnE$;|%=#1V^V+rTE9dY!M4BDGwaNj@6tJX4}hfMSxhNIAL zYKD{xgx~}DI+!T%?BrW}fw~P_|JIjIII6p-AlR`pX1e%W76^^NgH$a(dB&>Tr*(6)OrbcgQA?GQ=mo} z_=eVo{HCYvIRtiP9`fQIXY0t(A2r%UG9tYx>k~l$&sy45b~7UqYYD8UA088LBS|9=8Bgz&0Z)ws0=PZc z5qrP43+%4X@o&IJ>&9Ase&OC?#hK%uYmMa?S?%%fV>z_rHAsr5bQzyj25mz3nkg1zn^{4;R6Wn zz(M^3;9#mn*G9n)R1=D%KH!aTw>vmd*U5F%2|2xKxL0t18hm5`5|q8E$ZY_Ru5vb6 zFggE1v#y6-|;J+bIC8y*ie4wQsQNw_!)+i?=3C*F$~AhnBIKTQ#{oo(ie3 zj;BGEXtpUU|E3lObDv2)fpBn^4!;!tW)AP2mJ-8|qW{lf?nhFm0vESFK;W>o;^L`n z2%pG?mO65p>8U$mx`*Uoa~GqiZ`bf8!Q|plylRA!CCgi@-G4L`%8KI!60mfbFg(| zTJO&x*mB##i5FuVkvl9kS?rgCb0@msA0EDD+$`Xyoh&3Ob_C8!zhCkd zn+JHC$#3>iSOUQpeK;=6hkifmL|Yz#-x8gAPx6D(T9M@?6yT5SU1X(;jT5`;qGRI6 zNTHYrqUNc;*0|Q}RVtTQ*mr}w>soQSert$j+o7MZZvD`RwK_$qVaQoi@ubB{#Z$RV zqa9RUD#X0wRF&sk_4&BX^b5Y|^t=KKH!bw>P}m!05Z9G_oht$2XQeew4Lxe}XC;R= zWB~5~Y%Mk=%%vc_;s}0;t|}VuK|$r|1c-^u8AybxZ*yq9ZW(qHu|)ORxMr^2V+Btv z`3fAxYfxZJkZ?D#q1?_=zcWV6<<{$$GZ#c7l3TCjYd699YO)e!V=83b=$7@NH%{%W zbv8_1YF)pXuKcl(zqCuAL)xpVvfgk%Xul{L4Z zFc8KUp!uW;6Cm69`q1ONjZKpl1B#xNO8LOyyg>jQYB9p>u+tPUKV6nNn(&3lQTwAX zrFuW~92b(V1VoznE9!X{Lz^T%mD#&$4CDs7$?%)sh$`^C(R-=ClB)ht<|;p$*{5mz z%ucX+;n;6p`AxZ3`nSpHfRwDavR{sw`D*1pCPb|gm1kwf98eI8g=X?;8M58|-RqK* zhH5QaaF<%G+fxf+k+%hb=P5qg+@u9J4xUjL(_S_0w)OifH6fwwpR~@+pIKPcQg9!M z7TKc1&6<}fhw*GDjFLI0k%*Z05pQLk9e>Png`iYay{VULUNk5%@fuZu8K{ zWVgZNcbcoRDo%Q6F4P~hD>aw_j9>p@w(`rcOcS5iE?Klzg~&9|nef$;b1bBJJZNlb zKz*uIl9jWrC`%~13Q;mw>9$-70TGnj%%uQsd&UtBO_7IlZT9C)<_n^L{KE&q(gAeC zKo8$VdtUw9pX-2P)E7%9hZRoT99P!N>@VHEHZT@x8pE8#Q?wK*Y!BXGJ^UJq10T5Ubnz5XXrKRZXOp>-78jfSXV!@_Lm@sRw_5tr#6ea`5I~U zBYnZOg;vrBZ@y(!&wmA-e!U|E`yFmza|kH-viD%tMkqxlmSszt=j>dA7EfnTq$N}m z1Oi7RYY2~p;Mdd|q__csOOB6;*$rx3a0W5&r>VJU-ms`ZBC+ ze(RK-XsW)cyEav}T#@CtrfR^G>QKY?eR0exJKf4FcR6+?{m#PK)P_&7xKn{jhK46i zsJz+HnisM7^PrL>rS$8!ucJUC=x7eML^a%LH^5zJ<9$BXhxj@r%=?c}1%tR|}B0k_)&jK#?OT7GV>3 zli{fY-QkrHD6){TJ#(IttWM^sR0$J#oMcrJ1|`HJF>ZuUh1#C^!j8xMqat&SOI+h& z_Wg&9_C7Plp-XHIW*HMw=U(NedYoH{xoygnzcr@$TP*jzm5c2~+isq=0FxSzwQx6Z z&@#$6t_IX~`-13E{uNrqEp7ZXh3%mhbwmrGe(Sf61Y?Q_rf!^Gq3fFk35HyuIvt#g z(xr_3(Bg4SHe81unBbuH38o!4uo3*~oY)(6Vu@cP#C`z{r+VjIkk@Q+@8%N7j5o64 zit%og?k}bWV!}P7q-Xfjqq0hOe-Ceo-i!(o-cfv#Xp}lqIxq5c;S{rS+}T(;CwKAU zwc`5mLO-kHiMMF5Tv``1bcDWiGwd(2`yG!iC>$$+2!h@D1rjY2*I@ZzSaD@Tgz|La z@T}lamCE-}*qH*3D{NC6*g*y4{|&zMo5`gS*D&zW{{TWftX+N_N720t2^Y1)CTkp1 zPJE7jh@Jg_tK9`tEpLYhN-yBJ?+CV2tc~99LhPF$)t8LBsI2cM-rP@v2K}8dI!wy3 zo-&?1y3t12d{Zxe}QgHhxc9@8#}9-MxCFz0X>so>>1}vPr!nFbom|u9?i$9bz7$UD-d1?nY-HO2+$=gj1aDq>5p%AN)4rcal5t!`b}~X8?nL# z9X7Vb7JeBv3iK0I&a==QjZ%1$ASkIPLHuQEvo&RFeq#A6YT0?ohs;_^UfVcWtT0Yi zV`l>*5Try{vc3kw$z?L#767bx7w|1-)UEyR$rQd2%j3$~$*MZN<{Qv74y zD_2RiYsOit`?{&@`Nb`^oRdSoLDzm>pS_7~3ARVs=)O~i3QJhdT%Xno35(WpBZ*vF zGe230q=a=@Xt<3Y{hYFyrIof?dH$;` z+$%hjw|XB7en0KJtmAttWePb;-rEa{2Wr&T2hBk7ec}olhv8o4g2f@z10Pk z#d^g?im;rgn7l1n+hZ%YJw0XrP+x4uKnd^B5PaP8*~en(JGKp8;_h!TGlqD7pG<3X z+xp~DX9BOmSbZPiW9mbPZ)-t`wIMFFxCPxiHN%x;Y_o!a3pB_n+pTJ4m-OUu>bV5d zM}*!zC{TOMSJ=L@DXAmRcA3fy)H-Yqn_%3c6wkDvG7imCRuAK3nu-yXGId$9!+xm( zXq(FID>qE)PXwu=vXqfUIdxDgPQQ(gxF}!Yj!f{bnDX$O6*d^}n~|etDQTDQzA!y-j556fRaOXvWjge3vWvsJN$w!|KZGR)!m;ti#P3Q zkC-vT&-j30lR91BUz&Ie$tuB;O5!dZ%Z4|un*!ESHFhtMOM(`gF$;R_rR}(=cLK>e zA~Y@1cls=FB#X<_locMW)+*YVO7^?kPXON`Cr)%YPOS#B+P(SL6f03wvY4r9ZY5Ue z>>TP>kMxJ zbTHmk>nGh6)vLHkqNhP=*y}YFB39&A)2LX+b2syV&79zy*4elIF)VJdRujp9&_t12 zaAlK+wwZ_J6lYX@#X}G7sw(R_`cpRxvkyb&(l6^TJy4g~-f^h^pB_4P#nmz5g}HdV z6p7e;sBTlkdM^CIZ$r&SfbW2ITN~@`%9tH7J8_)vlmDaW+@qQP|2RG=mlQ>Wh6>3o z_spFxt|5eSt&ot*-0yQqa+_NyW-6DtFXeu}l)03}Fu9Il?l#w9_WgZ+|Jga5^Vykw zKJVB2{dhi}pk$4y+q^_ZQEkC!eZh~_Hgi*#KJYNg_q@2>3$Etsda*v>IhglpC@|C9 zIPCkf+4nGkJst~10B?|=qz<&MnIYuHR&*u)8id_;U|l&~dev096+8v&5`ejv*`6vN z{2t*_;Z3FUd}t-Oep0vg&XD)pL3hk3a!`epG1=GGgz8HWO+yRKra$?B=-sFGn-4Sp zE~fAA9q=R`VejI%C%DexD1R@%pAae~#TZ}5q4QEV)(=jawEp3x3?LXSSB+!vL9eXB z;|dDrclzv?Ym*0qK5mMe#dD6xhT*oSW9-+w9|64a@bXi%v{ymodgP?w0~jGm=(4jG zMfS8_an@9Yj7lW+1B~b(=2vj^`m|r>uiL;zhL}5hkRyF^QW7rjOy>D=yR(-;S%^1U zGd9RCvmgDO|KiD_z}3g1-}GpPTM5DveyKm4;A)J2PppL^Zk0BVqrR*n&*AqgHYKoz zEu+Za!M2ZL{(8JT+B*pp6s0gF1WE05p{7k9@r+FA31v1%?6BYm{xrt&WxNoD|7mQw zm_s1mzGqqS+{dQ`b?bxh@7k8S4Ey@&{qK=NU8IT0kU)cO-c}4RQ6e!89C^p@z{hMk z(|{&f;W_mO@gBJR+ra?}2isGQJp&56#QDuAjfM*|;Wn8ix~xO;5aK5bI?E68*E`-F zp7~M*#GO{I`D@{OLpUhqJV}7Hi@BVVIG#P&3vY?<#$G1H##Yjld3$|L)L+w2*|kCb z>OBWC*Eo)fCke!J&XlV?bt*!#U5-5M%(yK=K}(vZ0kx_pSJ&aT3pvQZmq5;!+OBlL zd3pw+?{8dvJ8kJ-IR8r1phZdD6Bac8qoFp*DzwVHecSdn7oFwLiDs`t(8+5_#Dyap z<(?KFmY1wI9XY3+MEphegfk#*LbS{42X^%mc&&QN)wD&PM4@-*pM|A#cr?C|wR^q= z;XPozSO9-E%-nO)I4Fy?<0l;KkvysTqZJ4nkZSMI}S#5=PgmUDn~rUni~qBS~RZh zd6|u)1uRqe1FFS|vAd>v+qbc5&;K7a_m{jbSJL3$)*rp$8z6IW#&*hf@_z8RH`Jr- zpJOqxmeZ!L>Q}D*Z0%YjAvQX8BMcEnRQK-_u5zZbFMGcqznU|9p`mqrb8o7&GC)qC z_}7PH&yDeP$A_*FE@c>}AP=Z0;@k9B1FtWe%kT%UbS)gBGzFXWffAX@DQ?V@vCWm(<(10rTCug+YeqNftj;AV?s#cH{YIxax>J2 z(E$|e?I&Fl!EaZ`48*YfTb5Vy_e};)q@VSd@j7*iO$T7>BR}HfhSo8nP1T+u$AF}&w(+zyNW$s28UXdvLr(SYLZHDy#6 zYPUPCf;o2=einq zyjF@mY*FYHgs57T`si*jr`$R+ER4V(m)uj*F)6OtaEOag_L>Q=s%p7ub@j5=yA<8M ztS0GUX&Zx$ZRe4l?SGL2_l2&}q#_A-9YlD=aQB)?e=}r**ZYW>j_Bv?GwhK-*7P`1 z-p>bL6k zVJ^{V+-J`0#DILoC%XC=HBq?6A-@dm%~N-n(7@W%_NxX*r7x1sw1)NXW2=Yj#c1f< zAP}}eelUAzrjxph>7W8HfUyiDN#IDipf&G8&4e4dee5U17P`^%Sx5yX5OfCs?(S|o z7R>SM3vssUhst@%h%syJFyUIDsdmsU4#Q(QoAn=$kmuzcv?`rQ6v;vKpYun@6JCq@ zlN0{Ac;e&~@?{a{K;(0|D0${T7>F1$YL9Qo5B`dGF&YujNq7!Y%`i~|Gp_dc$EcGo zSc^1R^fQAGM3AA2@Q+(kGS8VpcrhxgM9~^;f>g3*YjR}Vmw$FxZ{Ai=ZC-~YX=y zC4b%+cGENc#*3vcJ_E0_dBnE>&*c{agNiPl{yuE50O9QI^ml$QM8t@-RJscErRcPq0% zYHc({9}{$S@NS)H;R*jU#OSCy4%N4}9C!4!Z7jkW_q~m7Q&4}6Ni7zOf^|ASu8A@r zrT;~$5l;0N*;Ruel?4~5@g@}4czx8zZ)TsJ zufckBngKl~3tHz3jWQLSQ5f>&P!U!+=08?H?I>Rq2jqdMi^~n!Gvh6qsFbujZ>$2d zGU>RAz=i4@DaDAo&}WA~ULT<_ai&R1Q5>2s9n5H2h^@bhkb_)oZ2CwOn3y5A5=w%b zf{E~W92#XnVPx#(?>E=k^$g|09G^o&2+pL>Vgd?qM8*ISgh+;)7=cV7f{4gA-E(1$ z`i`t|AH0L^Ww&_rGp~g(q$%T+Y+B@M%q$5qG*v~j4X-w2(zJ|N|Ovd~67<}t^yeM7a0 z-hy0=n$wi&-~T{nbWMUQWc9DmC8}d@UD;jj7e%h<$KKD6!!8B$Vyiu-IbMQ>RE~ps z6;=_@xq8V(h4^s)IR~4tIWPUX4y>n|o6|Nm0-z23c?Kte?UztmYsdUwVlr33Aj)Fz zc+nqYXT_YDN;97o78c`YuhfI6yB(h0#i9f-P$WYcwXi2wdgR$U|DWsve{#YITbZEp zYms!KLEu}-x>@lnoO-t>2(Ow7E(cF_9Xbf&t2|qcN{p0xQ_H$8h|9_wNR3-yz|cFx z+3AbtqXdlrt*<)u&D~p;ub;pLTi&8r{dzx4+mMplh&;JJX4C{At&yBppjV0$zwjrf zJlr5z$>sXOryG{rnr%+Q<`!LMYC?Akt9649MRwFKXGUvJ^WI?<*#upjZU8YLiwF$E zNg#P+wgGV|ZA*b*l91hnfCCcBX4T&qf^f8R9skE7Aghz#;M#Qa5;VH0^Q6kL^hs%1 z&!?kj8n&S#4J!>1JZLA1yJCLm?2wvrh*6P+hc(KwVel_*cyAv!FK-Gc8vP_bX}r|! zdirFqQ|(dw4Vy2t?3!&xw3sXzqYE#?fS|8M$~N1EQWRWVb1< zNS=CdsGxsY*g_cW+et3}%$W1ihnbHV$?#%f$h<=H)tvfl(v$72N%3bV^{oLTYsV|8 zg~@JzOA2|2EV`R*`BfDi))6+g4hL>Z9iJVgI}+5@IL>X=83hx~R(SN>cp1{(Cp4%p zebUw3j}YZJK6#U-HFD#cspEdR>hl;C5@JWyml;FnXvsaqL|)4uGIIa+RS!}5n&)w8 zAp~>%$0aru(PlzK+?h?}RLAx__~3NyLX14*dJwRvO?OoLshGu24em(zYo1x(;Ojmc zCTXwMR#gr&>#n2!xX&fh*0<2)Un~RWfaq;Nr?x5aEvp%f`fQQej0t%QO z5H$V7fJ(Tlp}iUvNxq(@gPv~t;umGGiPT$E+h3Qi=9y zNw_bgk1DaI*AG(_xeSK@gydgcm_@3^5wtJ-(d2K^E8GFE5$#*8dM4g+bS_@_O`T(j zFlXl8&nK|*Q`NcUxs-xCWnZ{~yV)yy*RwtsDU4_>bAv81fpfvR+|!jz`qL)tEFw-` zreDB&tG~ird&x}b&wF;O${#fsXh>3nLlIFkYXJo6ddIMdScJ0@h5rU(`7}J%ca;BR zy_m%(&vp>Ak2k&5X#0+gKecusy{q1l1xDVw`6qLu%`CkDHRDW4hihSRQN~~d$ZtKF z?wa~2^i<;|J4%Jftl5^(JDkiO587WHFFKs|(doo=n6yG;lcC$4Xr0wC0G2M0SrrtM zx19;GrJ-SIMacvgxU8PJUMUtu;8>G--MkfDM6KxQvBE2+D7>mG>AyZ2a82zNT(S9m zEBwbFKDZ(%J7_ZMLI#s0i6a5VDI?t4NG8R5A;+Zczl_z{`trCoF>|0M23TI7Yr3V@ zk2@^!IUu)sTu7#05b~>$8rqS&vlZ0R!tP+eTl30kP~om^$1L$^3f>wtxMLS7DcVP7 zyNizZ>sg=xy2htZtqgRFRUL-7vRs*_T_n3DjAlrN>$9CM8Ic$+oA5-1IDMSqPL5>q z*WwPDy9b6gucx1#uu{Ai>N5%6@u4}%ipF{dc&{ZOdEC=Iu!A?RX&T?=(P7BnSW4$- zb1bmH(&QUi0P9}#|@SWx;JKKaJksmHYR*=m1 z^D)=cYQ8|P+{SrtgK+|^|_cl&p%K*BU@_R;ZL zV^#tbYMz*AlyU56)K<0Ru^A=|*ik1tVZYkQrTsnOkIB`#emFx4f@cIuVr^dWWF!i_$4S1|-~+6iR6kBW)hj(xhgz5VKAjzD1D z8_^@je$n#!8BR@yTqse!#eTKHg>>&n=)b%B|5n3hGz;2Dj9`+6UWpvtFFA0z1PB_Y zsU{za;ir-VS3(3HU60Z1t z-Z}jJopt*8fUp-O*b`|7_p90CR^P*Qs5#CJ${A8T>j4qu)#pFrmUG^Si;nffCuf}f zcdJDcSq_aAp&gxQ!I59_zagEII%knRknJ?p3(kZzEo-eef3yt8TOXcit{fkHLanRn zmQ{qi)QtMKnUAoovrVZLyz>Ab90ulyi?)&n8lSxk{`WMh$K$Ik?JuRH3&t6){H)IO zU4MBnu```1o7kzW>`Y1!t|GKHx$o)|HNqR=w&z2H}`S7ydt>~VFVYxkm-Gy2eoZ(sB~4DP%f_6QLmYV z)Fj8BH$%_kuULjWG(4)T`4kAXadX*se@UJ&nul7rNlA_3x7J3z-i{(%RlUTqDZbhe zp-04>MZeXfyc(F1>=%R+_K5|_{pTMFl0N`D{OxaGDGE}p2C2+aJ99j^|XjC zGif`c0}U#nv6DZjrnGVveSbCxr7&7G#$2o6({jz#zdMvRVC8*Ne~CpnTN#!d&NiRQ zO>@sxX_X1`n@7h{9u2QKa$4~Y6)$vg$(xqYq+`~^-Yrb)XV^M~Yq!Ki@Q?NM%;(vM zZr*CcX&H4m$uI}|bqUpSB!p|s+e-)t8`hrY?-{2*7{O}%`q{x9fNE|ZMQ@4Z9$JoW zi+HP^SdO|jkIJ}8OOO2?k$Z89+VdpaCVp!|Uj3Q8mN_8*Taf?9pwH7pU%0Z|(`F-% z&9+ER`@o$dH3b-!y&-p(;j<>G5n$ha0)+&j;tF3aR^D)+kZ z#fiZoR*4^=yiJBNC{@MDlyhQOvnM8>jtlsKhXGt$qo4TK2|-|oBFCK0Mk6`i#K<#u zm^wz@PI3G^4N?JfMjmM9n`kx?)mb|ky@EIm2n5%5b{)Ysjd=Wt{g8Fg2g^C*JGJ=o zF~gbAA2iCl!5J8-!RXDt?ZKW($CVoZkFPDF?_jxIT%~_sV2DFy z6|Rs96p$(%944eGzYEv()uS0GX*PDUxkxH6tAGWWMf}n6WE3-BA9(-p5ESaS?&#P( zv{w_RHd>P3(N(qWjYQ_?by42JCS|?mcGd#%VFMiH`#bH4quH`KTE>ZpNnAp=Bhh6r-evC&bgJ1|vE%`=*eH1Fqr zsj-e%Cg7-45H(h)fP@>hZs{JnlV$6evo1F~7!1gJfzZZXZ2rPZamrWxDPt(gJ*gyL zux%s!2>6BoK$wdullYKcVx%w~ZMSaO%srJa&qEAA9os5v$r% zsq=f8vx3eT+V1r*>RMu!`);U>ue)SrYfklP_KA>m>=)Icl-v8sD!I69@mq6w8_g}Y zM#59=7u^;H1f2ChHZ|I^zMA&E!WhUYFah)pc%<}bDg3wqb(kAng0s&1aHsYgil z8e|_mP9FapemG_-P= zIB|W*Ysg{9l*BSQ9%fryyG}Z}bDwv3fIM2Z@_9K6*Y;u3b3JgWFoJ7r&I#b+2_7|P z2H4!j|HSC2WJ8k$3xSnszdG6D9YDCcnjjD)Fr@(3@#Z<+g95%yIeTBk2{<|W4^-JC z5{itE@{5j9slId>*e~IV@qu6mLP?+ZNDX{SdysSVU+>IXA_p#pGz_966o>c50=yS@ znUHFnxj_fj#}#|4RDaXqw*V@`C7`=%`h;?w8d&uhyOp@WhdH^=yOFhqn-rhj zbCXszJf@8mCFX}A;{3_%TPmE%dyB~dnB6}S*1%ULVG`&kn!B8e-jEa* zalU}wWd3}{7bLQK6a(4bL8TI3QLc+z$XD&W^pnh-4|vuOR^(Dck6Y-h;JdIcJ1 zbOGe}%6@xC^r?2I(B@rYhC0>AZ-sD1S6)|@ByzYWd32vDrE}Uq=MNM=aS3jKVALY7 z(~O2fL184IqZ@ymP2qs63lVzj3w~(|5ASg|`e)2|Z<}AsOMB~ecRZ?Xruz;{Iw3}% z`1~v!f#0bj-#VBwJ8jV9b$B|^U}arUFOytdS?x6K)L5H`fpIR^=QB!tGx!?3_;{d_ zF{O`Pn<{wu*L)4z``hL}&C6`E&&XHla*GdCiQdK=jJ~z~AQR*&k~u!Y#qjmd8MNzT}ej7&-TYgL@nx|wDmXyd~Udkco*V~=poUA?LSXHOy+w&9T< z(l6XxENDi3p|2csAr46@y--#qwH#-yXi<32yucIJ93%{3nJAVq-Bjt?U}(R zXV>nwjTekH$nC#RdVSoz7(S_6f+_`1Oa~s)B7o8aB6CkiJe`5!-R&Kx5Zuz~aE{{g z+wo%fMei$gF*0xxejj>;ZN5r{js+k0=0zy_NG1RNR+Pm1>Xqf7Qsn5`1ixm@AgoX9 z$?A%fD-o`tfJHeuru_$Eek$~~fbG2qBYC&WH5wQf6TOX({WoOgMnkP9$iJR-zf>zqw(i^be`*z)@amxW-eA&2X@2FCFMK27JRVyFK0)a8fkI3Wjx%xJjBns5r{ zVYQvtEoG>Ub$N4Dm8fU)+{23LBhuS$L)wI$5^{4GCC%OP>tG!wDS+OP4kMEYa~uDG zie9&afB{hRR8L}SZF?S|CnGnUIzK5+>*`DeUD+#IL(>&9DtNmu3${5)m*))r_l?cyPfgu_0)AdiywBzyDuWl<(skiVY`d3y)MMOgqPaM;Yu408HE z5Z@PIX75(Jfz?*hAJQQSQHWIbD0c>N`{M zeX;a9=qJx4GdJaZ!g8*fzx~Em0{FS_5Qb5(C&Mp|$uIegCXTG}-G-{C^Y&a|V%NGEI z967?L_=^h$V8owJ%mvvC;Sn1?kWMj;cXAHRpBXS<F$fM1 zg5iJvzr$51VVkhTaau24=fb)@zA8eaZF~Kh^Zq&{baJK1J_F%d{Rgs@VOQnoD9wJ` z(Bw=^2sk4`k4(fhEfNJ(BOU&qk~0vzc$&*f7n)SlmI{qwN{ZC;F;Hud*HFkk)dAhn ze-jGl2zO1c=P2>f0$VQuWiWS7#mI9Tb587j-X{-(!~1|dI_d8|)1;=uJ=$hphqZPbQN-6gX$8csE$PcpeKCEC&=`I2WKIvRueAJG)DYt;??3DcQ4?vDlNb zy%E?ZyTL!DYI>6WQH~}f z2eazO0qmjww&6CFT?&jIX{ey z1?hq>k}49>;-g0CVc+aO=Ni}?H!N1qPKtWlQ`L*8_2J-x4I`Srh)n+TX;O*Wg*}if z!W!rwqz~KVyj6NeJ4aA^+kmekrqVfOF0m{$dfuoO=KNK>3jLjN|Fr0Nx@%kOCl_0h z49N9|t(^Uyuz4&T7@|CFZSYFcMvr7y1-bFwNXAl|5L{hRAYN`#k1r?u$29L*v!78d zEpH#ZBG7}~RkLPWO4n4EQNl)L9#;=TtM)2?A&pv&7F(KLIwBOm%a_jwem>u#%|~~l zOr^NHI9d&Uf8z;R@H-D{|2gk|FW~n4>P}g&e96+r+LI5JMY$P?S#?30JvS>hzPm$F z!B5H(DwiTe&qEIk29z6Q6au~QR&L5)763v%N$J#kUTv_78f!bY)J%;h&u=+C8S_Td z#*=>5@AQsHkM7*K{QX@rh)3$odltSE43(u;d*Y-bg>ATYM|+QYiith+oOKGicO|~ z<|1p{-?6be)89~z2tC2t*6*(dMxwY0@X!;V2xhMd!O_1g`vf1>mEhh8J*psy;Yj%J ziR-l*It*(gt93^Yh{c>fBa+djTH3>#p2r?ju)C?rz>e!i0VnP3OT*3acJU}}wfIj2 zps3x{4$Vu7p5r~rAay!iY|V8ek@r&z)LOsydwEIyTMQIMB&iULhkkub`<(H#;Nx<8 z-f1NWm>=^9yo)?|&D+O-QthUQ-E%lZ3~ul%xc;w7KkpuRziS^1ML6$c+>ZzNbggrj zp7Op5iR2J6JYV_c!Yh9GtxF#&{;23GeG%muF=#v)AF(nJ5`O=?W&(^8vS3X9Nmvpe zPM+m#vyuPc6#sSPLm6biw#8ogpB*7*9u*TSOYi%1IoiC&gMaeQIPZ(MquLD7653tY z(|*R*w|_Xz+$@Y;5W)mMPk0d{AV#P)>us6>L){|Po;)@&xdJMGx)>#Iuz2(`irHKN zcik01hVE~{7!cM~^nrMx%k5e(YEsk)^$e>+=|q&)=7nu$ny!RPy7MPZM!9T@ESG<8 z)<+8Yah>zG=Ur?wx%9Fu{oVBP@8^a$v>}Q;C&3DD2IYRsue{=et6k$)@=!IpnppMz zNwJi)QKLj=Mr>fpG{Av(bVt-e7)AZo8`6g$t2hKHecO2VF6j#<+!gSRbF8PjyAdde zP{B4;%K9pv5P3dpaJr`ou9^Unx`6sooCbMYW^&f~G=FO2L#G-zU(xUJEZ&K(ib?(7PxIxK7 zztZ4I4fg?@P3}`^&wcy53W4OqJr-;C_0Pp z-h^<9UoiaUBKpkM$EB}pxg!Vm57yN|js-3be$%Vh7V#%)#dgpmmrh0s+ zIBN>FJ3pwuQ_K`k7Yr`!QJ%D){mFSRMY_p3+4E%R${&druV2d6cw}(9SuNJLX7Qt} zf~*2lrA1$5A<$(Mb<3RcvD+`Fg~b~UlRo4@O(b(!MQ3-z9QCR(3$PSL^dxB>9ZNGJ zre69(<~J7VK7Ny1U)~%RJibhMQ$>ooR`$Fhy=olxqq04G0Qb{sMkFh|yW$$`xfWS} z?w`lP_D11}LU4yZb*Yr5G1?kLi6>eoXhI-VmkM_qeB4H@))lHuCqGk)2h*4G)m;0Z zc#He<&jR?YZo4+Tn>`-6z3r9n>_U^Gb`bt(>eGzpWiCC_vv_I8{xx zZT`s!Ls%LKqz=BuFdL5-ZgLw^P=cWeBKdc-wnp3y4Q_3F@|!ngc0-bRIAqaM7AaDC zKMwr!ykrj%PjKytb~UZGfnFyq1r2j`Ii04g^l_~ps9(S}_HwaZ6kCXoyR#Q|F%Xj6 z;J`_-|L}KR@I0j|hWsaj0O-3{o5kL5KGsKuxs{CT?s$nZA87+@nKFG;^Ui5f$D28T zG^=6Wymle-%CM#qO}m*2Tezt3IB#Ht#&BX!y*KfC+`v_8pho#EU6bl?QB{b;-Th(q zkC6XB=NA^3Uk5x}78=dzhE3f+ct9oJaEzU+-R>-SACz+~yiKSF#zhl`E@(eJQ!_a4 zQDueySwF;j{zcQs*Q}?TJ6+5|@i4NZ7F7&EmmyP5o9R5SCu2P59K(t!j0ZV5n%dcK z>-+^hsT_tWgpSlu;b&)C1Qn5cD;<4e#i<@J1xrnVQ=d`9%`>v_1iUm8Fj&)`A>Xhp$N|VUz5n>9&prN@w$E> zg_UnZM_4TRj)D5+36Ked^kt!}?i3C^EiMtaOTKn;U5`=a_i4zQkF^-@a=ZU&t!VT2 z(@*W9(#87+2=BShWA4q~0zaiJ;tHU4OPLp7v#m>9o7AtqZhv2I)O$lL*jexOomY=1 z0$W1zB2|SR)~;d2ZP>U42ia8i1-BP#FILA$ zh3DHxirv%3i5B;YNVdN5&PV&C$oi9@SmF2Xe)smN z+2Ibok;8ve55}Vp%{*NMI-?zVn8kvC-`KeC39KTzOGokzgw^hA77;RWyo(ts zf7}~O-g?ppMr?{V14A7)^}(g&&q;|TC#vy@ zmhf}#%QRl{YhM)mwLCv0q*u=Z;g>we+r6oG{;;J@x2nGWz@t6eY7+l<#o?At@t?P- zlKR7`A4{Gs7-N2XzvLS1ezWp>0MzXE$n$2W=5-<^TfQfF$#|-3ps9X8ftqEt_u~s| zb4JZA$XTAWN)N@-^xC&K`|Pt!On-V`eC;|v_fu*$d!VON^X?7e?#nL0t7H0*#3$wq zjG(finZ{nL4l!Wcz`v{=LLa0{){q-wS|zL9j}JF*%wK#->YU{oQ5W#842J1b9p_IS zAAK8>+Vcnt3!D44rkr!tKx)?c>kF^nj5gha$4eCUCEIz@PvN0qKx2bp6wb^9#u8=- z$*rF*V;6uf8Iaq>;EL`2x>OTx@2ZGaIvm*H+fLlV0#CvVR8R<){TlWZh=Eat#8qfU zwqTr#8sJ0Gt!NIa{W|HU8172wS0JF7WWhi!&%Au7plQ6~53IxK(RSau1MA5>{hi>{ z`7^{DXieehWRh@q{nLJ;fIftexd|iqkC0$Q73&f;_z#pW)2*SsJ>Mop7l0y3;4>b* znrga2KRZ}>Gt+}8U;@a8BTiZ_7N4QgsR4B?aiMR?bFSq-Xs`;;7$0A&wbj@N=6j3l zQhVLuyVbg;-li>suWQ4Z%LGfVq@vvIHIu2f&hPT@B}d(In$a9b`W zIzRri({%e++PppxA$rEq2|WL9mMJ&StNVCMjb5G-eZ#Qm;}aQ`AxE~}*k{*rD$#wQ^*CR>C5Mj{WLx3=~Jy)el#UEVD4@9Qa; zS^DsMD1zMz`-KjtRy!w~0zZs2Z9!|Qwnv8%S zt>c9Y)^Ww>CzxZHH8dc+*vL@QMCcQB6Y=%UwRP`0j|Ok5%i_OU*$L=?y@}B~~NDi!r+Dp_D>R%JDHp-F|n zFvZ)q+@d9C0P&n4GETuwAez&AniGLxq@7;10IW%2@*$>8=-E%eSiRP~xji_DrP!uR zJPkm9FNTqIPZix~ssfR1&DCmjZc*j{-phQH?Mp6zqVuwTl> zAf~?;o7BER#N@$;#J>#D*;psU&NW6FWc&a98ih5?8i11gGX{9%;(r;T?YC{vjtxp^ z+qJq0GnB#PXxXjJI!KF#kXN?tB)xJmr!(@Rol}pE7WmAYuVMgdb#Zg9?om54Ig!(% zCsZsF_M?imS8Z9iOCVKDaBOU|Z!LJpS7k`yuPbFue{Y5B^&#W5(|#A@H`+1OXbL|y z1z>!gvn?JS88eZgE8q6==YFIdE3>S6gh(GN*H_g1PGzP(Gt44y#dq}qaZLM97!}N) zs~uiV>PYvIV2>U*oX)VGhP6@6K8bF>yWJZMS*Y)0>opaQVq)H1fgUsNo9-f~BZWvK zAIisaewlk4g&PO%?l?p`J$b>V#B#@0^mXyro17VMndWQK*YpyXM}HN$NkrnjbQPz- zv7}opH|M~Vf8RT~COeeryr6cDxT_3$3GFv%r69I~_p{O>x4}-!od=-M%;RU?x9&*q z_$B4NfFJEzgYy=yMt-6uEVRdJuo4S8T~Vkkait`a?b$D` zf%qOVJQnSBEa>H2$Wd{(?v&nt=Yw?QK}2MP)PDO-WtwfrdkIz$m816=ri?s`DtJRg z@iGf&6N&2rn4Sa3kmPKHE!#Mm#+FPXE6-%~VHhIuP%BC)X8(DSr zgAtJyvf*QH6&`~)J<3D3>gLJA)nQ;S+Xm*UX8Wwebvt^;z{7nbk}F(G%4U`m5T9MC z|1>CPKeWiO+az}Fdl>$Eo`*BDXXSZ$l}kE}&i=i>!C)63(TLxs2&c0TLD+o;MO_0t6%A*4pan%ZG8 z1k&%+i8b+?rbH(b;Y6@g!4>M%i8fV|z?~C!r`5JNxWlfIl3iTkmMi#)a4OOBq$4|m z>k)r@u}0sRQUuS)BYM2#RkgUSMq$_{FJ@g*Osm8 z2aW7ARX@1tj8{M`-g1+~zPA|MMK5P%SFJW}=?kg%&9*AIGV;>GI7~ugB$tG)!~wwn zAVs=?)3Imne3F-10;4hIWim2;>9Oi__)oCVBdRE6uG>+d*74H1AkQ$(`g2EI9ko@Z za#d3XSG%cZ)zIEFT)P=M^g7dMT&aa`!)tHTd{X}vP){QZ$rdNX;Vv!-ibr(t(M3~c z)HTQz9W&k=+uTmzNqh`0d;!_@x3y<5HdMpRqXM)&g6K#En`J|ad9z+H0>5J?f^<=fB)7vu$*!F9SeXV(6$$YIrw_h?w}NHsjgxd>gH z>*hH)E(d^4n-S8*4SI(XDV5t{ZVg|p_qJCf;(K^^tH`RR>_9P^K1g}{tq;hyJ_92a2o-*#NZD)kavPzc+dsDxW);b(WJMtss@^?v_2=W9 zxBI5tj%%8?fe(}Sv(ZIAC@99?-rZW{6w73)yg|~Xtt+cq4 z^S9CIL>Ej9RGMLJjgp>GiY5Dq!~A4EuNu0#4f965j}@8wX?jaOTQ>%IvU`C zfBj~!g>AF|!6|3$lFq=g#lb-9Em9UNVfD+#|Udm@QUWK)B2U$#kWR++}!uoh=iQ?l#JtE zJ^m+7kbxqk)|p9E@NU2Ff@s*o`YN=8!)%`SiME^d-En+2aNw7tRJYkyH&feVO#X1s z$fMMJf%UvGQ7N76my{Rxm;l3+M8)EhLCOw3Ib4- zdp7P_ZA<$F!0ny#isK5+f_#u76szu7c&)bT-EVFWJ&^jZFf~Px8-$3+bL9`E zVf_gjX>F_U$C72iZDH+&d5=XFMAd)QyzJ@#>F(l;bx`Es7XZMyN`_l@eJb)r6s!w9 zLGonFJ3cEde{wM9Zi$jKl#4N|<9#ODHfII_`_mmsw{mEwkZpR{ULg(0IulLiwI zz)!n~11*OST&cTsZS0%(1RK0LPFdk)!X@U@W`PNN(RXH$P3H|F>;+FW;AO{wVwh8m+ zb$nAF!AD^xGFCHROP$oXjqNBlp@$xZNqR&CnEr8Glvdu`ot;A_9NC(Un!9Rn+#k{d zPR`KoHecd__p0*w|JO#yM6cr~@~eHHkeyHCYN zxka(1>h}s0N=6x^`R2yugla>UA2SITC?q0fGq!z{R z8GV#uJxts`bPzXMKXHbwGBMAd`%+I5HEsgAM(=~Y7aSNl=7|gH@t07x5F>`{ z{#6T(#0tJJZ#RyR?rKhigi+RvL^`S>xloKc&LLBP7uIdnnDq6_KKTB_K*I}YXC4`} z-*a$N`kBKy2!$$U+D+^4Vin=e8PAsdL^2FX8NZF>ARsO{`x3_^?z6|744Y9QtN3Nc z(q1U$y!$tjMu*v22$r#4uAi9uEh>6QZgoyQwq=yaIFTIKPv%>TNeM(sU23pWq9a*+FzL8dr?D(RgLJQej?}KPCM)98Y z%kEWn_A%&RBr!rn*xRTjTV|us&OVIYZvP6jphRxfoXPkzt&k6R7!u9|V>P0M(IWdd z?XxQL_wgu`X4{Uzrn=@s@4c1|81?GTiSi4$8raZGA%?sXt)e|u-myl6WWFM;B{F#GtZ_vyUP zXYd()k#Hq4<0CnH59=WPPE%J`=}LzfwS;t6=+MZz_|A?z_x<#k#^X0%)VT!_Xdjl& z)hRfK=Kg8VyoS^rm(EY3ZyW@$mswukHY{2*ZZLUw%cm&A+(tqUbxjFp`#NO5rYY*QF@Bk}McQjiEwcGG15(@ZD*ca?t`0A~lR|WD0Hvq*Gs5>zS!g#W!)1Izum^v( zm>DbYwto(#Gp9j_dxB!!FAB4tOWeC?7{`A_yxmRH#$agp5LxC?(K0*3xibIAMB-Vs zYL+4V@lO+Axd)B)D<4xcsJk*!N9W1d{HmU`z@|*Qr8*~;P=ygJcv+`~7i-ciL|+$T zd-r0)5H4$~%Qs}IvWk>fQ5vV|V1ZwyXlRZBS~Pl`2d<-`4mu6QEVWEvD58C^2$F+s zOyWww_DLhX<*0h&$h6kOK$;Mx;6# zW;wq|{Rrl;BO&#!Q~DUm+v8<)d$r>|j2Rx~pcm>}Kg%%>aGEo_&nc_8FY6-<$jz#H z>yhJClxarjlwWG@*7&-It-Z~98{W8O+c^{%Rx(?x#-48Sj*JCkt=isGy1<@m@+zG} zfAt#AKK7jer2)31pX~Xj4!TULU_r@lI_KR0PdoO4e?DnXeUAWF)`L@ycw9(;+M6ZwgIU^k;Vizr`Qhqv zcmt(Th9+7sp_+ew;*_|{5C(&r$SP17QbQ?Z7AymkF8jg}A4y^YL|L5!Un~JyYyG$u z)|t*LoW^p%xvVcYk&-+%k-^LT7KpL5Rp z{d&KiuR78DQ!6bVqTCx(Q)6EFnHzn>s+jHcnCYv?AQhgOod@CHLxkCnbMnfg8~J~> zyt(b&;ZOIyoIE^y@o`3*!PJ4Fp?I$1%yQ}DwR;(6rmXoFpoSzzq}52|s|ChfM)RI? zYye-4;#_DGRej*7@Dsc)1KY#tbYpsEXY=js_{heT6W&GZgQvM%Ci56udG}ygKcDGxb$0@UewkY*JU8H_|?Zc4>vyWX*XWI zo}Rqr<8CpbS8mmb@)2BTWxFMCo*u88`X?u3cK?BBV8{`U4X^$Q#IYW|e#oy16}P?1 zgRz?mTy>v=HdweGyxa}gYvZpR-*$rbsYp9=eequntg&&atjwr5nyhNh3wnypV87ECvgqF47o_5i@(^*e)6 z0w4-&Q$b`e+DhGNzx$||OIrATbF+aRdbmyALZjt_%vT9TW_A`WaW*aA zJ~1Sxo7R=W%WkCHtme7NLu-X;!DRcrXL~lJMrtYC<&J^eBKy*No(@+pUL_0`N)1NL zNyhRB!3`fWHmVRn&YM{EjtgL1&ivicTKk!NQf|kjbYErNTzpDjE9~h+S5M>^P3g0f zL-f3?*=M+n>A65cocLK^kz1x}Uot(p)reHiTP>t11J(IZmZr3({lvHXfQ6ZgmqpV+kS@n&OJt#zcn)@gA)tl{!hz73!hSt&M|{LVB_ zM7gO1^khN)M_2(SMZA9Gc;W=LL>B=QI^zEWY;lH-_-dYotc8WL*{NP8o@1b-Gzh>6 z>kGhtG?n)OmB8;_Tjkvk`9G2(KQO?J{H9vvR=_DG;5fM>YQ*NItfX&+s1uVt7G_Rs zRtwPX^x>THOKzj7(%tLW?644aSTLPvsjV5ij#NGd5$IS|6iqn2$Bt{lYx@nm8^=4$ zA+rC1w3o)yoK=A9hYz$SrKy2OuwM=CE=r}t!A zK7TH`T6jPD^B*fo2Vrlf=Th&{044B);c!&K$rd>%M(*F>hZQ3ZzWY6|L~jf!FUt7E z32@%ojdU~2FF~|G%dpz;_utExTpsDq8Lzr-4iBDGx~t8Fgm^giFi9-S@vsKTL-lK# zZnd;L5c&2s?azXYW8=P|lO2^!=oVkVE~ZMAb^cpX%9qcL0GL+DS-$s(@_CN!!)2x~ zEHPyTF)I9Vq3MSpS{_|ARS79pB&etudcl0tSHBc&4~yxSd!BAakjyp47bI(cj}Kv@ zG-ibLFEO&{u0tG%BiiaZ=og!)-Um>W;D32?@!J8x71~lH0-IBIW$Sa zM;$vb-i2(D4wWegE{0bzFv7m!4iWBjeOOyekS|h=k3NdR<=&YqkV|<;WZxWEQ(2FF zueoj~a%N4>4f+^@H}nPev9ZKx?)ZCM|J=lH^a83gfT|3Or(9DOB)|L*z`t)u&sGV( z6pdCUM=uJcX!dWW|6S~8qTJ}9XttVoVuyW#USbe2EfLr#_0xQU3-X^+)}dRPQRVid zP&F^-Dg?UBdDjSx5KO^OM0O-ILJ6=A0=QU@Nj)V}E0mzFLN!{_9b(y6rjN%s1X5Cf zDV2f8n=3T?DQe0jZ{5Pif@dBW-_W$TyB*mV?s}$FBAOSrc(R$MM^TA|74z{Cu_^<% zZW2GfzH|$~v}W{3Rt}1~#hMS|a|VQoZqrFl_0(M1jst#jJA-gKy62N_CkdsDUNjPT z#K3anvY}6|BaDdv3ZU)se_D$?6E|21=Fj%23@Ac#7#~|qdPGj0wR6b&(lAJcC}>KW z0shy{S!HHRi(I$H-EiPI$T2Kn5q;TS8<+Aat+y!R?fj_in#TQoN2UvKXf5|jjQYzb zF1PBi6)Uwwsc(XrnKQ|K5U--)6+32XZn*wp+rtHlU;N|v9&3;OmtcHQTtH5;vo=wo zujYLKoNx2Dm8-Ga%=H@48F~2m$BtLhyI-gG8E+WZxN>#4u|5cle(#6U_y_YL!&={~ zTw`(AQ`z05ft(LcEjr)Q&2C}YM8g|N#8#D<%3OQ|Ez-_b<8Iv|-k$TL!Sh~=g2fe{ zVWl!(4l0&ljy<5-+)qN~FseL!gO3VPPXi_Lv z-u?=0T;N{ITee(0kuPMI-N*<`qHC)@x4C+a)i>GA23xj3YAib?{eZ z*ufXRX}bQ~G!X=lnf=+{nUL=7yjddR^+%0ox!&g$RTuJe_>mS{sAepP3B z3(^=5xg498dAsf+bzMuf?=HNn=8P8fkX-YC^f{*ZW6+m7Gleg#bPJ;v*K1qWCQoa& zjX0YGc!=!uu|;*uY9W{NmPQNpfaSm~h5_)Ei~Z-lz1jGnz{jw!1bQU=YWpnFCT30Jtq!3*n1+lJr|LHb2V?`0UwamXwJ%~2YnHD z9&Rv!a>Ltm50wcpov!r-Ixq?sr&YJe8XuVM5~2>qXpahfBPgrz>t8-qYNV%%M1hAk zw}*p4k5wc_ep@t%NUADrt#5|e=bLZjp$qWA#b2JM(?U!AXYw(`Gq@j=NH?eSaV(|* z1*dOVa*H83askRh{0}=x=dlDZsv7>jgBKY}xk)a%M0ZXw_cAuvl8%=e(QCWCENmCZ z-|rF5?k)o!E~mxLigpO845;@-`cT5ohcl5E_F)<<6cgVYDh@CPB7<_LGWT;`5G!?a zO+3HFZSxE;KMD1nSaor;9%BWop0$uZVKYYv1Cxg1KU(J3_dU#CB2d0{y*7w_L zK$MWJA_HyVjPDr~*rkbt+og{I{BDaOS=pU$yyBVK`bs#2 z-Sxco1~v{8<~IpAncl2~Kz;cvZ7g8RJ1- z;yLiFhR}USz|`3kqfezD<3v>|wd($v-kGm=n^e++~trPW%Yu)D! z=8vo+Oxlla6ki9|*w$bJUWK`&qb|=pX1Kv#Hh5DhFSjhe|A%e>lDAaID-fqp`DAAH z)2-K1Ql|KvLw-I4|NNJps5k4hN$UmQve2mCam}v?ptyg!{iJfEqImhba@z`g8Px;c7GC;`v$ody(_p>ChV3mtbTfi3MU9| zXH>4!?$Q@eF6F|cd_$VP&VK+$1dol}5aVn=f0PUOQah+&$fGBQH~*p#)O|JT)6`#b z^pX&kcK^!5$2%UVB2+8q zsh>iIQ+f|jK3G0%DSdJuq;dD@UJGf9oQ|M=ws%v4S6`S){b{W#XFXJIKwRp{x;hYX z=fRtrhB%(80#k9x?mkj5OhtqhE*iX#USbaZl+?jPQEmC+O0txp$5HS@?#jNs-x7s) zv{!cGIT@Hu; zv3#cctzf7pX!+|Co98;b8rlh8%ckw)!*!wE6Dz&Xhj0)ryThaPOxehTc`gpD@n>|a{QAEb z?(}ttb8eJe1n=fV@9V~yN~@7Vw{He2lXa-Ps3PzcOu!IH>T<@~wBJ$-Z7J|Gm%2muh%mZ1 z-MoG(z|n#+Xm)QXtZzu)9sfi92404)b+Vo0L`wRrgXtm6dpMXO+o-^tiUt{77uo6? z!h`yA2}dYBg#{zfQ8D({C`R~&3weq&VQNXdVE%9m9Z9LJe235QBmu>*-Olg(ydUfA z3<>G{QF6>MGa+gBqzJCtDYn|E4Y~T4m(ceV?Tp^~?Bq`4MP}Z%l9zkT1MVQ7!RH?n ziU-7rWP1*>5l`Ndtk}|hhZ;Ub+4d_YNE81bpDG{a7c6Pjtr*(wC;#Bllgk)?@s4Qs zGU4^O=jpjNw$*OZ*{*dW`3C!al^m;oNoY3L&1*R)6BWM+{T7}3KW|;ks%Cr8 zWs>`;S?Q0@k#>x&Qk;KJ`mv|UDj}n-u@lY1NJM&HR7T`LVi~=-aV&w1(cQTY0)8-A z;2zdBpG*&J*ZLJ}5Hr{vj6cxRSDO=0mq;`8W$#{=`}`fi##rw@I`ZI%II+~94zD%V zBPK$wTkF!rB5YNTy2nuymk?X#h+g5Ok|ru!rp3>6~ZML28yo~XJ5<*5o^BzD>l z7~NmA%zBmjjphWA`De(htlY`R)+?L35xB3nQLSAR7j(P6tOBbxB+w`dVP#rlVg!RT zF#g2(5j{*yDUbMpl*{^?rF<;DX6kfK&>&lnQxCey{AuSeNTv|EB3Nau^7Sj~RM@UhfGTeG{oiN%az2GX?;cDRk~q%(q8- zWNFg7mVirXk>hqZ6BWcEWiHKWyA1DngY-Dn_?wJ%5#zrHeSX}x9k)H=Z9gVU{e+#0 z1hqGx2!2^j&lJropk~~wvIz1@ylgy=^)fKl72ynwtecsATu7~+o7A71x1HDfbKO(! z*_p0mqxR*ifLm{NZt;^f+$-JF+_1?)H*8$!2zuUgEZ)mb%gBeB#!3Sims!Clck5f7 zE9C56t}AZui_8tQr|R$)94rTKN1Gf!_Xsg%HT;Xd*F}~!stP_t*%!&O0bw0zI52M2 zi`{(3Z%W0*Vh$4V!zK6(w)P~+hW2w27PLql`|HR2Z0l{HyP*x^mvQ&Y%5S{B^iWfI*8UE?<}M^8dKK4K!`!3TG=&Q53Jk}RCe3F_ zEsGy`o)oXf0q-i`xu?j}ib6z?KSoK$$F@F|mol3llVmW~WQqv5P*8m9&0C%~4AB=f zacKbXo$_;v(eE1>*OUb){-VJ10ew;O)Z641!I;u4@2bmf?-W?fInJ~N@5^PVEQ$@5 z=RbT6I<0Hc^hk}2NXk$d zFjH^rB)D?(2vrjj>)3IQRm$c#;=-@Bun3uni9#g-*?%Mlnbcgr?KCi3rP|=_5I)Em z`%qYfddLydXx}tFy~U$te&5q@E^odg`cS?N>qIBNx@1Yq+N?)RVil9~SJ5-I9D5LF zMh$gxu%XKN6b@?+NQ#5sF62$ReFXg=7XnfoQN70CHC(te8WfE~#|sI3?ZgGFWB4fS zXJ+x>OHhXM!3TKUh$_co((S+DD7a=r^@jT{nk?*_dIk#D`WLl|1HI7}XlEgN2XBwn zq}UQFqnyZ6yLfYjcXTg_^*oep%QZr;Ev$37ncF3b>g}fwBCQSXO>ahU?B*Y6Z#XQ+ z^nBJ`J~~zpJ@pN{9K^S$-n2e&Oh9;P&V0VAc1~^C@9;kWnCd1Aq-zS?N22MwkVx&6 zDn0Y*?cWBGQI#p9p7YHGY4y$ifei)=+F=X7HRPz}L^>RX!qG`Y62klSm!;*z-W8SsR?}&K2DBI3o{I5@xiX^`Krn6Vi~b; zO*Efh^b~~4_L^3R@>0pIFd`aTy4rqo-e|v#)Id?9ur=r(*p-jWb>J-D%kia-b=Vc~ zUA?rO8?Xes63InhJNoUH$OpLizEUvmJNObsy)3x6a|Ro8XwN{KvAej}_MtiD6WsF>XJC3Wv*l9Tqr7QMQM zrho3ayBp;LH7*jBl56{gr4bu73n0axVpThkvF_;Wf@8ir_d1_iEk;&kw-j1)xXA@h z$w5STMg4b|v=bHT&TTgkxpWx>};L?G; z8>A2P5ZFY~2Gu9_%(sZhQlcPUDN!oGKSE0SiW~f*#=U>!tnQ#}I|TpG`b={2$2Q0d z*K70No&=VIKGO=wEjS?M`WfClF9bo3rAPaS5r?$LacRfK4b*I!(t;rGfU6s5sD6yX zK~I^chiBNg$rSvyUYpTE1eDngt<22W{4=^E6#fHOzRN}%&orjIZH?fwnvQxGZ2xdC zqptGb&Hn&B{BDEVzll!-uU6FQ^Q)e+C53uSn5;EV#>IhNPz#Z*9~`2W83@-(7CXnsK{7vT26Mv1d#koC)f~7fW7uYkDgG z#cSx^fR?%5z{}k-8yLOSf8L*5T~6!kXkd-q>sT@`{~qj!@7R{x8;iW^s-c3}t=f(h z2u@!_f2dmvfXB?JPpFor*%b*{s%23o1W3&_)9EU8H_w zPHm|7cgC@J6ZMLj@5ILZ)=o3xQMnz*Do&0kSK`!xeWz>*G#+yI5E^rIK1_Et_Shmj z;GbcQYvi3VsjPP-)uKF^cw>z8cbAn!(?^KvWi47l2QFQ(E(+4&x-hLcHMEEQ<~% z3KKV%5D8BPe?OM)qdro3mHH%g=sHX}P33he?{e@mq}H=SufOn1`MK*f`hn5)sM4{C z`lbEWKUGErSi@e?lh4wBs^Jhjz_oHEMn{I!Mu_Zks0EI#*9M89Ns{RyB;(?h;61dZytXPuv#+c@4fhZ@Sn3_y3h5KjaP2Mv(IbmLy@`-g@-lP0lO2F z_`aw)XR?(4$|d|>z`OK}AADLOvxVE&4?EC)M?EIL_v#4Sv9I{q+tA^0n~TV%Mdel}pTcl4OslnLz-&$jhl@Q6NbRTl zX)8>4Z@v!y(kh_xb)Vxzor`B}WhC{FMUbynfN=H18xA8!27#COC|+`WkKIKgwrBXk zdQXo%JL)4aA#=6UDC*vxUFF@npLgM*ZvtI?GcxcF7cB240o)yofi(x;kv-tDn}GWMv9Tu z3)eKns;LkSWuubdL1`wJQ?@uzM1`xJ(CGJ3kQ3hET90n^xP(Fqi}k;MF4l2%1>!Gx ze|=6$a;k&gKZ)uQtd;Kl4{-5sxCAC#Ehyj0nsPgx&g0ul0*?J`w%IiLlwQ#;H6Cu{ z6(Bs7O-e0A+6`B%)O~pB();vQBb51TphCw?(xTz-nObHiTr%+Cqz2a}{drrI+xRHv zr$2&CdSI7`X4Lv}L>GSe{>=6;w6xSs@z)%>%+_|n@XbTTFQz*9*S97M#gL~XmoMuX zbf;N(9EdB3D+N{7r>ni{JrVttALXI-qR`;=-dN{YC7=0ihhNw8&CNFHaF-IZ{7;Fc zyAwX8k#Eb*G!DsmukfEVK$NKG$s^Fd;K~4<;OZ&&?P1d|!X|j9sm4!w{uCg}Pn#FVUEQ{-p zI+)#~>Kb~J!>s7NdufXJUUaw>{-sIROnt@@vr*iPM@P~h+J!8mh|BZGy&dn;O&c+k zWZ5a?>7+@_Up5t2swNOKHHdxV%QL}2sdTp3!8}9tOF=imkbPVK0Et=_X z9IKjHw5*iRFYiD7h7qoBO4*Ln1r68OO3doBYc}b2`_`l<`e1dC?D1`)PR^p@)?%|6 zu8w1+$Z%X+B|LD{IO7L3LU*K~KrPII_Vf=MOFtm>QY1NM<>1!p;Ewr(zo$c2Cw`q*-Zl&@_ah;jx zJ%2RrQw)eVkkSI~3+xo@Y}?3NL=M;3=LP~J`uqwOy5s&-u2Gwr0iO_I?Jetoj&IGY zW+AOuUdA$MP`OyQ+m3OD&i+8((~_ARMNRhiTl0D4ci+tKpiqQ=FFy1+`0;TvFN!aU z<5uGO&`C-!SfC`U!8YR z!vcGOfG#v|O)SK@ijJ!5_~e~3yCJ!0zs349w+AQR6d{fI^+ zlXvfh$gyY7&t2z;^NO9nIAZx;S2?m^IgG*nR|k6|If%&q3%pF%`}gE9-JxCUqx94X zs4`L+wE+_1l;~ic!%7AehwT@^4a@0(JNVq5M4?1lxn|JhnyGgHk^5F8mel zt_d#Xyw86CS?3R-u&8C5aq@0VgdYt!7^z$j(%*wz1uq>eit;%`CX3Ta^7&Vu-dana}l2ykV$_Z8acGHZ?>`hoKC(^vFGjwd(B5($(F@cwu_mG;(Z#xqpc! z){&&VOdoXpu=QmrdNdsZ@gL}mth(Jf=s*I!+5aBE-?(%%;=Z4SyJ$j6Cfl+;2v;LI z1oU_A6+(?f8;{l@p_i$akk6L@=UC-XAeO+T+0W{J6J%RWud1;IDx(%X;2x3QfcL^Y zUQ-UDj#Qn#7HKiEFw8jJs{C1>725Jsz)*J=I!~smYlTM7XRiT78UfDgTET(@aJ+(| zO-dx4J1mg#iFy8*Zsg*rKX+bTcfT1h`DYwB8TMyMckR0cS0-F*wO z;vq3rHDlwqV$(50z|FyX?a5~QbL8r9Lr{p<9%h7IR)S4E0Oa<4lDfuxr@PxtY=2m( zqfrC<^80y5Hc8#8*(Fq>0-QPg4sogj-}dOGs4b>;mJ@Tt{kjh3&V;Dj7JcSk@~Sm% zW3nibdHUJi#hGC9mnp)AH(V)M#QThACN(80;QEHRzn_d~9q8Hec7^90_Dx(J&!p*)b{n%i-2cF-@}%)@kW!S#}8lLDLkxbdrYHH-0eQ zi+luX;xYY1VP(3kbMk5LxiAsNsd?cSgR(%#5{{UBJo`9T)pJZ9sSl0WX6T*?3y#%02zZ%=zV6GfMXE+kk^M#Ozf48LC z>*!M_(-bM2tSY#D%|BNJBrWgEbhj|T*u1S`+*M65izxlO$0t(vGya$I!(_=3M&^9fIe=UNEaONFJe4`+T2LJg?`EOB+&3iR0%B(VXHu|g{ z`oy&Iajj$CN+*Dsr%j7{(edvtv0Nt4b`w?{E;&Tig|M({E?@O!;t|?^gq%mw*mETQ zPA>=hV$76XuJ_BFvl?Ft*tZ%H%xa%Vfh<9bzX{p`DNk{XAE23K3C+kT;5z_q{{ zpA^}bTU%3~PQCEQDHIW+kRFEe0+;NG>D3TunkcGHGOgAx!Joa&^UpjcAvm||3Mc$# zMp%4N5|;+Odv3*n87MNMGNs6i`@VBL}n)~{&Or9g2p!Pj;Py{0J4Jbn;p5{ zN)yFVP+v{Zrs8)3MCfp+^d{Wvt^=zEwt3k?|%st-ZJF%A+?-@H@(jBMd=_gj2A!1=Oerp@O zMcq^S9JM%3(b$E8@m!b(KC_U}XlP#f-;sHBbmYQ&l~Y1`EF=KIN6l-b!fC)mFwuo3 zKvJeV#ciIQMurnotVxfwpO<%1YEp_q4oU0w@I{2g(=f@G*3C9;Pqwo1F}oTES8g0x zGkg8RY!>%i`46BU`STobp3o%H7J7sNKl4NBF}>*jryhDpVU290eTfH_l~Po?2qlM9 zuqqP?DYJ=YJfyUpzO708ZLOX`sYs)$9x1N0Wl-i2o;m)Lilq8VOM^~lWkwZbX!I$R zR=hdYq4*yF_v2WMk6s0rirxy&UxfJrdG;hz`EnyJMyLp<+ZV85ztdg($S{A3_IQUZ zoyZCJ26l$>3iZ)tGvL`gV;v(T5O8>UgmAtSL!0WV&-+*A2Fvs>sM`#vZ}vJ@URL0G?oXRfsW-t$UXxPGz$tP?puFi_X(34bJ%1 zE=SQ9$`AI!>$CYvgxkjd{jB;Qpl-J>(kz^ZTC5=)&P@dN!I^`FdhA(`%5A7Y-8ZS* zXh>D7#g#*gYh+O!%&VATeZ|H$npD*dHhl(2 zk71#N!n?<2ZhD~97lll^#a;=LN)aieSQeW=?Rr+f5#LKAY<3^DZ3B2hIRS5Q45+5g zO{}oMg9r0@Gws)sNO@%BQ05-I``MDpOCwZqS}1Nd8ZC5-?cITq*Nn-M(A68=9ZY~_ zzY;PrQc@63? zT!L{`^{JpoR*poUOoROaF^OuOlJB*ZAI%sA!$j}4{egE1Ui0?fL~(q&#uOZg#&?gCO!}TfuCKo?HP6~@qQX8y z@@B(lY;5fJ{-yNNI6BE?aN1D@?^eSa8Qe>Z+7*dKO~? z^6ks~9($m!GLS%A0RClOSf#fXH-|SnYT1y<7P^zQaii^QU0jug8=Al?n(iz0(1|7r_^9SZMtv(<;{IqmB}tRbi=q%_p#?GH`rj zs?8YuQ#?Y1B2j8sVdoBo6f+5T{3h1>rv0`c8K|{*j=RllMa<%x;weHffdL*3!O@39 zY^Ud~4$9~^( zxpa8TY*q2tLLZY^4sD=IL2RHDgt|DHW8i09?xk;!ep)?XM1OmpxMEUBNDU%HNQ9b2 z&$jW3KMpjXLca_gCu|9B4dN)yd%w_kuy#C1`dNETZ8S9PqG~8(Ct|XUMsH6$(3_|o z9F&)5Mr6i^MD>)OM*pNaFw)mn7e8yn^|XwsvQ@O)c2=G~JKHvwh8#z6f7N|AGRAdj zaH|UZeWwX1I=hfQAwUV}1g1oiIGHT5I^pNaR*-O}cl z!JL1u<^WJfKT_9X;%o7Gl<#_kqXC=Hd3H{Y$_iGsqEVwpSKv1ycri0A$yw{qZrmjbMHf#qyh2xNT}D-OahoW&#Tyz9+=U zcPh{Uw>{j6%8TSWka+X^)XKD6&+@Wm)6(tuj+V`&9uCu;P1_E zV67EfE4JpcBHMP0p9-f!}?j>;2C|5ZP%u-dQ)L;wQa}x7`s>` z9*K)+iAM3up*2yP19PLbT@eppJ~_&~UkEp@mG&DN$w)DLCR|D72Kuq*6k94B;yLv? z^W_FrKj1!1KHwiASG%12#7#mN}VRi%{aF1T-cA$OCX71J);<9@OUA;C3o zgC$)Q<@!P=j^G~LLGo1Y0t)raOPxPJedpl;D+&8kW6Vr>)|9Stv!p^i zH^2;NW4TVmc=g{#)7gYp^KLF0DYFnakgGgX%mFl>Ho-V}FFq&@Xba3uwqz;hdVuH=mbdG==g%Y>l^ zyrvf_hWmlv2{ASc>Kd(qpiq`4!6+asi~xxgU1(=0IDd@N>;$D$g~Cw{oI~7?a)mBQ zS$4}nuC=AZ@4jd?0G8gIgqdn$@OK^ zOlgD4jp7bwn-1OktMhfXE?0#BIM8NYBdd-v7lF#6MXu4Gm~%^bK<^(E2MJfB2ANij zc)E^wlw=bwnF(uEb_!oXM<2kxp`X}m=Dw-(xTK;tr`o1CR=7NOcKYs5*=v>CA>w+0 z%Qo|rdat2xn>F>xZfJM1q#U{;I7W*v%4vGbWK4V3=5pf>(|MRID#+GiwB!HQZ1w*D z#heGlos?vw-pA_lLjtH=J21Av@Z@x{J&^(yw5N6Gku`4B`q@5tosm}jCUbMT>qHV( zIcpOtSnOTjq{!c9TWEcJP%f1%jSYw}`WmSqq?A}Ym+z+-f3Act&49Yc*dp-Vr+@eJ zm5`$XU3adz>C^#N-dI?RnIT($<9cqjNW#dZKshmxUYp>BF>f8{tc};g4mfWv8aYj_ z3m@+X`#XSmz$-Ty24RmoIyypXSE(GH{wcFPdCMxMVP-VnVS)Cq53Jic4N*6W8(u4U zOP*dM+#e7xcDliBz3aY-c^POv?sO~VODXC_E<2`PW+D~!v?cE!0#%FLdPX#Hal<;bh8mu5aUe}8Q1cxqO3(nc%Y zkx4ksDnYo0V`LE}lCYx-fKh1IG1!I%ASFUa9mpSM3@4(!hKlGW*2^kevJrH*K1IC7 zL!Js|h2^pFv@`_HdTxi>*i9`MVt>6^J}0+}E+y^4?bp9;{qpiqB?ft55T|SCXJO9m z4;26ct%8Oj14qi8C`A4JFc7sF1B?#x7~lto(|xYthwFx7N?zhe`zQ7`HeSZ>X18i* zS0c+J>Rz%9BL2F0&~IK!+m|mNRuilFJd6cNF~n#(vj+6$vtR6NHZ3layF`O=Z}Xh* z6js7-omvE?HlGq-isAcENXlg=mDv;6e4DZ; zaf$C>stvo8Ti_mg8QL+e^u~XQc9)Np3HM%`fW6cD@QbOlZ)$-Kqw{7xvypr3)nl`?f*<7ZBNza-JHZnCsMu(QOhW*I~hp z_x;F4Er6)RrKNV@&rLyYkcy+4&3b)M_Gof_-GmWmVa@|QAQ`(11&kQ^`Y9`^87kdSEZe}G$+DxN!-L~Hql?&d?A%Fs$q^iPOw-p^*c zg}w08la`h{vTJe&*JMT=P63Y&QMijC$7N%7U5W?i$8_#w+63({TRpPvTvhp=e*R-7 z&vlfEQ?DjvvaZI8f#T!Zn3krW(pWK`x{aId}_CtZr-zQV(U7$WYXO9 zWuPI9i}7A`L(tfuyIDX%L!8K{{k+dq!Om=GSc3Y3T+OIiIVPX;&(`*Dx9vLS@^UH5 z`R$_dz_u-V>!*&6UM4elf6o80PrDcV?sp6;8%ZhA6i4_;U{p~-7ls{EuF1inf&$tv z=(j)j&WDb<980_G^rnr#oDAI0o}V_F{UOVab+14+OD*yaIXDw^I3BK#P4i_K(VYEw zRvc^pDymBes-a8?ejc?74Q9-B_`eyEyK6Z$*HNfZs4~hU_~}!8s}S;ex(7<8PaZRW z^ve^At*aoJcbJCnur|~!ZZ-Qfw+h#8Ey#@ z!Aqyv55w3Y98k^vWoPv;K`g9x*UK=MkPBJb+=g%32v%61o+>yuEV-Xb<#~pypS|>3 z0#A2tF9*ji(v*cE6on+A+*8(*C5@wH7Y48_ZrNcQ1(E`Synz6|vuL}%vzMGkJhb7* zfeUiI3pY#&z~Y`8jw5QED8cVMg13VaBnbHmu7lk!Sglu(BV4sz7NaMXkE60m+V{~U zFe};e+1v_jSIBY(#EaFAe)7gzL>s%mvwzmsHhHv-BhT&{)2ltmZ82-kse~5k3bU37 zV{6eGJt_~;3Lz}VXAk;vL*aVWb`&X8)xGktWqWQb^z7<6$bN_lAIrTi?p;juDM#X4 z96@V9?Hb;*08S?2y1o6 zuI496?qMR8%ZgbNT+H7jrN(arHhhtkJ9~meT@AlLE#HZ1w!q!^gg0pnxVV2hfmDQSOb%r$=yX#Rd%vjsvt(7yY zM#eGlX!m^CR)w*VX^$N@l3%NWV(;r)N+`dve=C$eGCG4yuY4rDn8N zQF{|&&xlP+(AJ2Z+BHLs)NUzJn^2p?h#<-LcYlB8oSSp*Imx}R*ZcK)J|9nt*Gwl| zG*ZcTeeQ%QV{ChZ=kzt~zA7`g=rJ3TpN6aKNH*2dE-jY%Cyf&! z|J_dc(%B9Cu``r+!yf@V1qhVSQ%S%!qhCwFcYV)Gc(&hc zcAAJ=WD+NU?*BZyXRSaC%o&0$j+jFwUx&M4whzhTP>mZ6h4pdTGj)h;H?_YT zlMPezpbn_u_R1|!UF&=HOPq%g(vt5eSd%hN&W~7;^kfDR??q`4&(CXr;*m}a%DWLG zx&-S?;2yNKR$&f6nt}FbpD}e?_AAoE@A$CmK6UHv zh7Q!{SMWjb5+Z2(l%T0Vq~$ODLwnuOD995ifDC0n{obD8N-g;Fti)uwBtI)% zVWv)xH^j^5N`Cdo>Xv$*Wl)WS=u-SraCRr|h+j_DzA9>)_PrLILdL9I6OTNolIE6NHShnhtsUdsr*FGqL~^P2 zyNGmnHCSx-RNvcrRA19lbFP`;vdNlJ0LjzKJ7#7*{m_~xFT`Sd5(;Q*`&%(d;H58x zOnb*SUHRikuZSb<9Oe&yJ-(_>9O_o06C6HJbH8#vAowv|j&8&js^^%q!V5P5G$0Ab z>kNW?Uxb6B+Ge*C$B6&Q{l7L+lM}5BuFF9b@-sSUDg}!F@{?F)Q=ZXUuLkhZ;=M9_ z>nf_$f3oSSC=^LhnWlu@u8|as?|NMz!f9kyZfbbLLMbEkYgJWM zy5*Z5*~Db?ZfE9E^;%2IbiwxgvzV~omKA=cRJ>}!kl0+UfGt(C=f3?)r?>UzMG6SrskvYv#THRXl0|~ z<1N+WGK>RXRM_mySwuS6K4@T70Ps9-{_Z+jP1i(;9^o;42|j@ieJrIDgH5|Gf1t-W zy=w3^uhpaU(K`cfL9^EAOQji`r3uwQ%H6g`J?E|eR8=n@gP>dnIxoV#eIWU;dL>E$ zsH?FHXyLAy)wuJE+PY%6Ed33kQ5iq^`kA!O=qp`YdEF@FW_ zn#%sfh}@CDUNA|dd7LR3RkOCgy=z=n{%62$$jD^%%Y*#a?*}#(bA!dpk51dmsW9<4 zId6n!UV3M(L5Z3YkAH^C%;_6i9s9gN_y?QNCVY)fSlq^ryKBH z2P{dm`6t8q4U;k9qi@Ipxxn==dmY;cmP;h?vJpiFOXbEe9;W*M2-VSS*xBS+U-gbP zx233%g0eexqrpYxkP!<^M8W_GPj-W}Fi>FGQaLn*Ly+%}lH|qU+V+eesQLS1(lGRnxZR zYimL(9CZW#;x3CzYrd8F$TI|YdxsLf!_Y_jPwRT11c|V={+%2}^uDbwn5ISaz;ede zEVa;oTupy%615htf&J&sY(zJvetBJ}Ga9d92=O??!zbSm<2Xiie|V0`vphvP@e0__ zS?`D0?>hb7sF^AlwPqxI3~(*~jhck2*P3Dqb1eNe>j}K^>UY69wWkOJuU+hS5-oK5?7RnghUWBaV&F}14{Vpq zzQm*UceF`ROCo)8Th$%8R@YuKj=d7hnrv>d`(Vyaw0dZ^()E)DwDp+eaWOFE5fEr$ z=NwXDX)*WcB+OopAKJ$rr1tryh~1&cMJs`&CP8qu#%+Je=&`KuQrP~p|0h>Hd`a~Rw?y5>7`naHQ}aeTUAecX z25m`Q7v2Rb!|GwST9VJH43Mt#Bny2c^LGk%YF{Yi+r!Fb=JK>un%OwjJ|oC+KwTOf zS6DQJP8fE6PD1JAcL(H1nr((`yC+CmtPlT_kL6`hZfkAK!CAzlDGV?!6Bi)@G*;$b(2#vCr`5F-pkBZP1-%INl#_FnmU;s;Q##a0V%g&7E8cgZW1k{j z;`9qRufwlKcT`2b?4?o4ZFo`+O;omgys>%N(%uJfx6pH69Dr&LW%WwV`29Zpud{>O z2~JPLtxjE!R5?I?@|Pd5rSC6yvEF9^6S6ibprQQsv~)vbNHDBhv>WnweMJjP!2tn> zexu;k=VY%rs;&m@`~SC_E=7gWwzcat?!~x=e*6r*q~!jy~6$-iKiaSS1YHnvUO^;l_AJ|YO#Xa^lL2r`QXbK}F=Kc6|B+EHkQ zUYV5+)7taY!AhI*cM@%A%B7sxPxaCtJN!%&2PzB^NtsWD8GcVe@kJ{RG?+`rNie2KG^AlGu2m(LeQuRUjXe$eQ%1#4S95*(hP*h0k1Q(uC z0!t(jfEE|m?D6>2zxa|F#!YQ^(O@QY_U32$LKun+D@5_!aiW9HfzX0spZ4een3FWl zK|>|7Eyn^3DS1RjywFFA)`&7jLjm*JP02a{GiDH;->R?!nDfu6+lG>UTp^$6e$>t| zi-^K)k-H)oG@3y?5}W~=h2hP1sOQo^zp9UMzHyKP10B z{Fx2K;hUiWGZQlH2y3`1-b({fzhRum03j=hN}eUy*-&$#oS!$r4bZ~+{_^F*_*|ww z4P)a!AksU+swM|vJxQdEP+D*2#Dk5es8scNRraXrCqI)j?{Q^h9j6AcYD@Ckl;~FY z+QqpPHyP%Z@LZkfn9r>4ESE~jS#eyCN)}@>GOFg~DWOg`ORDKsZsbq=J_X%{>QTSJ z9Cz(ZCj72|`h|qEP!lr?=VN3D(cq`#?7Zrm7rOyV)9Pb#za;8Q4>U)$SXo)AK$joM zN--mt!8@hG7A-(ge&ohW8V(r8!i1MIhHoo3n(Gz{naPV?LbuzKp5qj#a;Hm8c|A5a zBKK$j6kTrqFLqtUmxo~3yB}WItocbnX+e|-*+~wYf!;}y&OlMTn*LkRx>r$=lbiJ$ z?7v+1>}4IB<)!8=7+It*1+ciVz`7qpy^5elNz2uv<#_h#JgY+OKbivIq-zTrGTjhC z%GCp%N>tL-VVsXmVBK5ydyt*&51)T>x&45&jFsqdr@nj3a{g3X0i~;ud*Wj3-`e0? zx3Sky3oy8tVn#Qcd05Phji_7M1lZdja#N-rW{xCqabYryr2&J0v8uZgP!^MoQWtyr zRjsbM)@)RMI4eykbDqgUG#9y$UM}=WArGBr`aiu5c5}CL4JnSFF-gv zZl~|RqJD*5Dz~0{al)G$v%Zr<_~E*J{%LN&%P-VRCc(xsX(++`-}jbWU9ke^>pG&f z496Flv0v6dV}-DPPR5uLzn4cLrZt#w&5yA-f%PVs0NNn=$=v1-BV7xkQN6pGW-eHC zs)M}^>sh0ZoQf5Z`!U$~Y$Ey2h$;H%xx$)qzfFIMk{JJUHvomi{+~7%PoWzne4O<=Dfc#&g%uTc-J{~^q3A*>6+v6P%EleqZb-hBxhGzk9*9^iX&kgjs9M9gK{j>Ib2Al+>I}RrhhU4F-;G8{v-NNfJJip_H zzHyB=UCVQy%Bps3v1tnK-~xcnCK)#F^5Nv5r=y5#t!ui2lDzN${p!4`#kNXk*ToXx z_y8iwkW)VawGw!y{XHKt!FF2X=e?$65~KzM ze{>rljydA5w}!9gnqbdG8M&DGPeVf3Lc-L25T7dAgM-5g3l+DjGNhcr72PdjxAPmx zzO#URWz&9VjLYgq+Su#3YLJzU*sNP&6GmU*;1^{QHeI-46&(e*rAo-+GUuu;wMb$_ zCJ~?3&lc?0)i04m>sh?YS18kmsb}C0_c{l=mKU535Rok+0&qV8d)#KF{hHPc9V5bI zDfXwjouFn!NAM6IqrDx555U$EPXy(s;xZhPXm9VjH8$X~{_etVe;Or&gfm-ggc|p< z79_dmY;u6O`E9cRKgWW2veGhWCt(F>KPk@%9w~q!2u)|RxyZJw{+`B72!=Oe598azJGK-rLxPnT3UmL8kMoEpK+=@}X|Ti^J%i!g!Q0JJ~Eu zLsS4>OF*C(f7ziAcQ>xUQy^LcBIrYbF!4DbFvp{2;L5J`l(;Z;hBYQY5iDf~7eL^_ z1)-q=JQ9IVpJy?98J9b0fyv(Ht1@} zUGK6Vvbwu`#VOI0OU#B0WIoPFbHs|-jw zrYJj)UM~cYd9aFWA*+B_;t2-8FMbOWts{a^S1DyT#LlYQJ8AM0iBn(>=*@wlD|#y& zqHGU6E?&U$@8W<11q%ok>5RX%*yGaNhMCS8fjr$V8Oy~^B>vFdwBNJnrILk#e$){Ta&wP6Mp!Mt@FEvEOkjSDV#w!NS7BKhyY z=BXs%+BUcW_QSJ6uPK7~o{oO#0wF))9UWsTuaA4bS^19Zaq!)U(VhR~nECK@;m^87 z52v~00VF7|X42W3=+v}tZfj?wc*ikC?6d&IJ~%Cb7(pczY*uSzN#z~7Id^1CR99om zgbP~4C)5jH&3wsySKGNGAjwu#!%Pbt4O%)Q_-%N5s(N9+9Z}kd2p9ewZ`Jj$O*(>} zz}sf~_{ulAGu$tV=A<1js8JQQ5I}8gV7MOsCcQvn zd=QUBuF}z|bLon5Ln<*1{wd02UgB-7t6z9^Ci0Qk+kajYg<^!IvVNpw{%82;VYeu5 zC1v-n{TLnu58=@@oOyJhZGN-0CFMhKR_27Rf~ly@$D0owTh2MpE&8q|)3a4bPKU9C zjpRUtpfWx|%lq*lR@&2&5nMwQ>8I?@%@A?6@x{UR|a}i!momkf@l2 zA^BHcAMz0Ox9EtW6}ld)&@2r>Im;C$eN|H8(Fh^8-}$fEou5nTAIuDnl=wMLoi)(R z;^b97-s^9_8J&Hr%B!yTsYGq@+Q2I%p5Yw%bhEm)`M)#ke|+9pRn@yA+;8Xb!^1zz zd-m3Nv+*)=M+OArvMGk+qS;`E+QdiTWd%CGl{6Hn)Ax}<61fUvd#1cQ(7H%41PNRO z6E(@VmxNe;huvI99^Vc7q`ZBAT!;Iz8Ir|Qk_CGNotC~h+|0QS?p2(b770*V{f`6L zc?mD<)do&BCbY?*j1+UO8U;74eB*hI7tKzYadw?=vm7%feF`i|$qX`M!6hS&a&Q|c z)a~|)JU!QW^AE>=h$%^???ACaio+fe#Y(r87;c~Saw6$e4>L}}`8I8WmREG(nh)wy zdjplUGekZElv?5|M_anxmJ?qF(DMoESBw*$U}=!?yc0u)tiY~WJEv5RERS7sUXZ_z zj)Tg7vW4-woU{UUf#jI-PP*t^Gs+``@gz)il5@9VTdAr3k4KdkHLJ#;rzrIPG@)!_n8Ooguy0C=-oBTUR1dt+v+kiN7j zjiE=Z8jC22e3l=k9clkNQe7V@BB}5Jr80BT1!&?>iS?T&23sm{&>=>>; zprf_4P6sGg$wHBTC9u4i^2Gs!Rs%Xr2674)vOR$LAz+1fP+Hj5vJHp4RVKq`|Vzb0{4_ z0KLX(%Igtqu+Pab=anRntK^{`!xesMs6nnAu+PuSke5x@VnzF_K4Xu3+& zj%D(<2d+EHPBHiStzZ1;xVNQ@an3O@LiFTsh56;qR^ACYh%9i6Wb+eRK6cI<*~Xd8~)An-5bn5*V86M zm^vlbz_adCX4E`&mwqMI1!1ydOw+elZ7WXEIoWi!To1QLL)KH0K46xBK7fZW7Iu{) z%IXcA(soKqPK53b+1+Ux0o^Z5vg^ddv<6^qjGQGY7^6|H(p6KTYth$eNf4y%%&${FDq8x~=G)+wetIQA7gK@t}xbv?bjclD!9XNT|jC(S4JO z9SgV6dJCs$6ZcpIN83AmQnf@Puy%_~{hEAVfcdzlFg?C^kz+Izv-~a)jW+y1Q{M17 zGTafU2&3D;0zkGt;^r6?+s&X6)X#)Aq7ya?rzp`wMXo6W9a7%PHI-u^<*PkqhylGm zP<408d)Nn2xO+Ds*dX*z0Op9ak!|qgl0tqlOj5h~*ybwIa9vBs{ z;AMePZn@p-t&kJTnrt<75@E$Ut;Ro^C^tRu(JbLb>^DP zXF!w~4!+WnnzqA)nrJx-KF7t;Mkhezmk@^j`>}xhcU_w z_jbA@D$;w?Qh`-q@o&JL%D z)dVK#n-{+Pr2ygDI4fNXL5T84@JOn**F?ld zAYR@3;Ssh;b~V!qFD9C2p>S+Ep(6=B-~9pzP^IPCo)4g|O*H0WmfadA+4~I{Ip@Me z@n5zV7iW1+Yk~fctCwwC?;_nl88{*kUZ+<=Ksk6ocp^+*-^EM zr<1_tEKi)M1@)0SNny7ypIA}A+7$VQb>VO(5yfqLzw0BOxk~$n27u`}dvB&gBfw03 zZZGG7S)$>ovkPVWcjrl{)TW=$kN?p*fd3XQt@k^J$-81WD3U(aTQfSz?czm$Av5I4 zeocYEqkgi-@(|HkRPzR|A;~p5ac^bo{aS0JWr_3Z(=0pIBoZU!o5xPaB@YPQww*eM z=530xim;F;)Y0?Vo*F!Dphld;kSJeD2@nQ;(Muvflm+Er%cg<0>u}JD^2vZi2rXQW zp^Hz1a!3n2S=Zn%bxny?;x;Id;WXe)d>LbrmY7l>H7=W#-R%Dyw_o0uwWiF!}nWI$IlVAgLKR}}xIVi0EWGRx2z>^fMG_RsLs)Bn-Qpd1m3dMuY|fkAIKD)g9( z%PU@zTmV$e(BS0c{5;x!XR4WmrN(0%je+M!v)vGUXxw=RQ5;MLCIe|E5E38tlcgvb zWOL<@(@H=uEtoS3m>7fwo*a$wqbs9_H9zvL;{;W}LmkS`*+qSRfnI=6=w|##;HCS+ zML?v-baP{2Q`t#V-mG7<|9Js^sBY6*UFiA@Z0O_d*=8G?Yzx=9(|ch(;CfY0DCY{p zm?+eM{3R-CR`b4qlR(P(dOB;$bPCDk;eTXt$WIL&;I0yAbKy|ihZ<@^OV`g}R+GHC zzZ>&yzaZbAX_r^>@$~9@Dhypp+7|{gPv0H3rwQ##MS9FP){gz0(E)b*h~TM|qU~3I zDZEW7=D&}sZ6qD*$T1?bPb)S_Gtr*v162}M>MWkOg2t7L@>2)XdaF2~Sgydh@MYb% zHbF?c`(ylf&)HrlR*!CmXoj5M8Ot8@Y@FKL8Z+Jwg!CY>iBor1%?;SO1$gUU&n;Y! zjB9e!vS}z985xk`!L`+t5~&IQqjPMh2i|J|@!Il*hVc*vo5m^UgSRu}HbzQ_i|27iexpe?_+!Zs{m{JK)Wv}#Y z>w1#tNlhX$&WqUt3zd7VGo<;p9QGZ<^9QoZ1V_whFy#gLqu~;J5=IECVW1)l>*1u0 zoc<&@w%=zT0-jIFmA5vOI0UJ(++z!IKD>(JkR@~*XbM6 zXPZ+rM+3E1Q)(DDxNwPVdL_GYx1YCL5%KOiAFcYE-B5~yPg{m1@5Hxd zN&6S!4X@zZihAGl7Y&V^S9$9WIJa|8jg>Ui2XAu`#1m~-P(2?nHOw@AxU$p2`?o5+ z&Z|Cj;mmRm{1;7nOO_$v@JzAomcU@~vWta324%5LoL;aF#PzrS@zM$Xx-dP@zC-os zy&e;tBG%ZOmLS^X1aBfYsaB%5?jNb2Auor5*$I13!<1+Pum(sk2t)}Xz@m>AFOk^| zCKNA$xCb=$5@0LNjdv`tJu@+@noleer825AbOd~u)Ss;3PrDdMI)x7nG?9mUuz?eN z22XFG!R@m8%RCmr)T&JtO)~NO%3;TMz57fIw&%@4Jv@A*mOlhAFRx`g@<{|< zpC}`~`tsZa#cNP($2@xEaA(0FGb``k_`Y@wAQFd-0Re$2hm;Y1?BUmzF>QeK*S!yX zE~g*+r?W$4b*Zz_+Gkq zlG318n%}tCT$3_6GkXleo(eU*1Uz6g7%O-HxWBDfkilKqqZ52NkRws@HD%kwaGS=* zxSd9WS)HJJ7H1aMs9!X1GT?>@Q>q29Wv*YuMG8WB6Y|}rb0MFK8C%~Z`=~CZxvpX^(vZeYJ>=J_U9lKTQpWn~9YL_B{UG*dfz%hTL}z zsCwvF-{SY*uySfQPy69Dp%=|uBE^?YewaT}`;w+~Ec#8&zix@Gh3VHxznpA0zSNa) z_jk4SRg_WwGvi8LRiAXP9oXFd&nVCq7R)|AG0nTFt@*39p z@|pT7+manX;5DWR$|vSt3X*ns^VRq;^q=_JQ$h1Q#HS6FcMthLFtA?q=8@Cms6>>c z7|d~b{j%l8)ktruhC?`A3P6d zO&KC7ne_q26AWMBcSITTnTuQ#zBb1QneT}{`-}j8TFo_Oxn2=9;N&34BtBk888623 zE8{Z|b9OHHaD$8NqGzuw^&kBk4BV@}9VmTMv`@i_t9Ll&Qt$Mjsw78Ev??f9u7+MH zTgXJjG_t0&tRj_ETbz+sS|a3d;jUP~jgsNr+q)&Rs&iKjNEt4kNm-QOmPWb;8jx{C-q@er5O@^f_@)8=vl{G9?E2OI<5Sx+O= zN74;zZxsl<#ohzYsQXNN&86xX1q)46#|sfb2>!R8E&e(YJ!{kNjd~`EOdBn-vaZWU z-|7HDfwT=I4d-=lw^lax9WxsoWa;_<1F`&**7{)AkkDtq|kDEJf?~umIMA*_BSo@w1 z5(*nrg1$(cmLsMu1j_#s=Wl8rAWZ)GbRv9(A$8?238?A z2bD*rhz>97kH>=V^{n8Z8-DtsxKiQ$put^2U&+m41Nv2e#VakzHG^y1-)i)Cq^`!b zWHpzCk*y*70_C4HNNgw**-6;g-&>cy{?}4u2>s~qGe63f$XzBz0q&@SqjjbXY`O3m z{Y+6y%R#0D`@*w}a+Y^cjI|)+a3uk}D4gC}B7a7A787Fada&re@ZoxcwZ6%RuUU)o zVcRF}ttk7m{gU}FZ7uI!+zDd(Pz6qE&Sq9wI#>l>-xs|yOk~^2_OZrkvlQ8hl%Lj> zT`Hlo-&6*EuH!WLGA7iWz5(iYZ%-`|c&dDXA-)^?!B4|0F|xr7lH?R3xoCDUHK25` zTsdM5vvOlFMzQg$_9l&Y`n{D;9^Gp#(9~IfMd!2 zkH?Tbx_WmtTpQB+`$Hmz&dFcp+u(P{(}!XRuP&yHNS${8Gw9-FdZS_x z3<#<+z=N_SRkytV#<0<0b9MYLhdtDJd0)xbWh$t(@Oif|V`?P(AGtw2!9Zx#=owaIb)Y5{qT9+96ACjJQnm#X29wskZ@WfxIzafGv15o99Pqb9@-gK2&Y z*e=!m#yVl2Dg3-H^M3XIv#YJpBg{(%jsD<6nr7p>G4O|aLD=|iXW@3y_VIpys0(Mr zPsWr-7gfDOmTZA5G`?Is7^7o9$_rB&pdQ)r3lwOyjA}N55}^O1yR8_oN}|ThbW8!e^!WRpf$JwheBCzwiL^u-zb*Mv&y%H1M-lj_=X$;@w^RVR`yj56Ok zyg!$=aa>(#Elvljm`BOduno6N|BB1Xb_ky#yM&9owC>QXaaPCl;OIbONRV7JR%f*1 zGaWN%`a~)Xd!W8)($Cj zQP-Lga^`~FXHhHS$x`i3<(ti<+|ZF|(+4u|-?auh1PSihf4^7FAjkMhm{Abrsey0> zp5H_qmmWU<8Hb6MYw3^h^hfCFugHkh`%1%Dm40t;IiFMUq?S^^g;);)lIV z>SofTtBtO@KCgBue=fCYly%oQUBBddvc}O=i3Q(+aNktPoypH=)68*a-7=%n23M0p zzjlv5D^Ze8k%lk4uwn8D*-gY;!TzJqNH|-5ZN>z^pqUn6ueoBx*253DRL}f@srY(9 zP&v7jbiWi(%W96QQu08A(9ChFhjNB404$l~t_Pn|;Mg_vnPv zdqhONa?*puuZO-9EQoIUW2h{B}E0?IxXIG?i1pD?f7+LIy3|i5;@(b@dvd_VZ z4MVTR3>ugHgKUm(zIsskS+TFEA${{K7>zP_xt3d!Urmh}Hp}LnA_4`@;(Pj~O6Nbi zmkF&@a&dBWVoyQ%u1bH_UFC@qYeiLWX!-nk77yCM*_B@s#p~dEw#yjRF=)*3x$M87LH>4&KONuyz(@a9%#EVFp6iOk zt{DaCR-=Pg;qpHX9t%zsXnWHMMA1YJ`SyYEEn31OxR`d*%R1lkKQ1H#zqi*jvN10D z3;PZZtI&l9ZGK3x2C1ve@j}-?7FxZ~{3BAL7(gz{@wPDZKII zaEub!{uo!|gB0-Vrn8GW0a3WrQ^+=8A+LT-HVSyN{}S{eQN~?|K=2M#RyR8ih#kC7 z!0=!3!{VIH-M5$X3>Gz{P~`&|149XQ|Bl>rH;$U?D?>x}145N>k5BU7tin(5AX8zQ zHMQdD2hNEacBTpSU{Eh1G_Xv`j#^Ntw4_A|Iy>+Vyh;cf=whTUL|u3Yq8OGBFtk)j z0q{|Sh2UbEz7lR9{7&DU(iE^TYeCv*ur4%S_L!CMhg_qLB&RbInfkApGKqr7ug4J7 zSOcx~FUtM4)JTD+gs2s%Ud}2dUPvSRuJnoV!)teI%r(Uz{dImP zE3F?8VlT&LwQ5&V{$d4Eb{F9y>T9qS+)sKY^>y{*&0LQima*5M&sLk`D2n^tmlX|_(R5K#|OQM!No*<-{v77rQWQGL}w#?n_X8O);!ma zf|SXcoKr*66tOu8%1b=#Q=+j=-aDFiH6=Tot8bJCRc`8`%`KnSKwpw8zgpSoq7?rj zPkb!)gFjYnBO2@I83o|B>%xev z6aFXf@6|Ki{T-vL`Vu-0x1S+-K37W5aG`d*BAoWt$`04M@Hjo!oIEId{wlFU*JiFd zNU737>eC?XhxPeGFU(4F3^Rk8PWQQ1n|N9qjXSD`twp?3Wvdm|3xQi0CUpu;2PX9u zTqBys0PET7kC&*12F(NpvLo%U2SB&BwwX1lo2;f-R|w~hpFe6q=;nHf^Axe+!hm1>k6{j(_g-o|9<;gGnir8CmWMy>DD2IR?lpko9oB@ zK-n`IR~F1ma_{eZ#@DXgP9>jG8^S=nqm_7A#JyLE^5T7Y&Kz>Jru6taKV@Nfxq~Cq zh04!FXQmZ&-(@^g7l@sp(lu-Ye)mv4)%zhG^|1geC4=lxc7Y5b9G$}d3zYA9|5=H- zcGL7{#eM(qFJ29oq2If=Z4i%Be~sq9`IA#e@+}{GvbwrHu<**lW>zyNq<(lsQw-fh zhNV#HW-%o6;NA&gmfU_wjl6Fl~0=I_q z6LnUQVY7PpF6MA`%i=GUT3!F2e@A0tbVqy2zsm=2W(O}Tao?RKiUWQvpB2I9XH&~5 zu}2|o)x3{n9hK4l8gquG8k0ZYNt5=N*fDjFX0QF5V7#7Rxd7!1e?8A*;qmu}T)A=9 zjMTw-jXKU7=inwitN93(@Nv;;R}%;ZdoEpRV76M{8s%y^tLqk`S@*-6|q?`cTuq96emk z8f1xI?|KhUS545AiMc%d=(ONQ7DmUUaEzcjtWROD02XyC)7s4c^nLHO5 zaNUp>4sli)5flF|p7a=UkFBJz73Uy8ug3Q-=7-$o37cpV%bwayy;5<|)hF8ZTK=(Q z*~{~%>@&4>g)PL zT0%Z5FEL-GO!DqTu4kdtM5cw=^Y!0@Ja@~-E7nxTquNWv)!M}U{2Tl`YMSdcf$lug zSDf-LAj%W9Ms(^$`i@bOPrlP3okR~>#?)__!^obC7P zSg%^yz|OU>?z@)!69FBJcjq!++8BuX3tGr_NrJHM9>0wiqrqre zWZCBnPN^w5!Y!gmTu$tu1XiKo-Maon{)0>znfH0o+!I-nN;gme6BQcw4E$I>X{gsJ zR7f;z`3zRBnJjj$y+5DBnd!Mvx#?Ao-;xm__I^uC87aRAAF67bJY@@J4eqm-4K7`F zDo_~-azar2+?KYLCtrCe=1s!BnO~b_Ep~EUuu)yko&+(MMeF+9ewTp1bgvdV8H&g7 zZOJQ~2;Kbib?Cv*do`jHyI&Y1uicTlF2>qUH@=@mJ5;+bN(=2@ko6q9XlL_UA`m_y zA18v2?e^B@do%E~?46`Z!)xtaFBIRXX?>1FeVEM+dNY1rMHf%ghJpjL=UWn+#njn0 zHJO0<*&Pp_g;`6ohh<0$zA@5T`fOTPdNjYV zbk`87N8${72-$(|-L#q3di+Sh%U|wCS8R40)m(F$0jLx5#%w@Sfl6e<7K2rfu&Gfq zeSwmLZ;ng5+sNGk18-fy??By`95Z}D#0p|^p(glt45I!riZ}arr4D;cm$C`UMnXC9 zO>SfH7GSl3R&_%cd1$GF5xxL1}Sa?4_mcxHMpIi>NGju(Xbc9FIV_+`=m(YVb7fn z*@90hg7-Bl&xU^J&V~nC1L@*&XQMPj!Fd1esqlw* zXE(h&%I93hMetOa+)|1tQsMLYb0olVCDbh5qzt#DPE+K{QgPUlGcarQdykPi>DZ&B ztuDJ56sR1C^FNZ$ba2@F-uGc9#D!$Ba9;Q|IJ?%Td{HknR3Rt8%qXWI=nZecU?eyB z6~_gWJRW`Z4yBbl>Tl zHI5_JKm%oECdLCb-+`;U^9JKEX>F!2n+J$|9fQ)MTOGH`&9&FvoY`0RKWD+n`fe~3N51d)U% zUoscLh`eakIA@0jr?R;oBrStLESJp(b4w5yu!c0lZw%Rm;sEG-aJB z7MIWme-2=|6!wo}i~HY_ODGbgZI56?2lsBt?@fXGOYi^Ren3dj<9_0E9>=EdaC)iY zE&eRW_|!muT@l~h2fm)Jhx^ZGFtg--!<0^Od!cs9bD{^7v}#AB<4io>kHc_ebT=zK zz!BA3wNX-SRs;NYQpvqRaO>i?@wp=0X+9kPnLbG_5=#X(6j-QV+Vb|l(*>DJ`c-x# zvRNg}EnrvZ6D00lp6)#AhUmU;j&b3=5sBZ`tjYe*CBGRA^E?}wTxzCR||RD-&I-JmCvmYdM>r*IQR0JoR^L z>Yxsz5(B^Drz*hcu~Ul~yYEZ^Vq{ zaGHQlW4_>7I9~v$aewz_HHDe{dU+N`zd6;~jP-z@^?xGlFBQh1Z*f}=;5A%k_&uOH zmF6wI3qk}%INtP+)O;`R47~MPl8>mY%dQvi5r&0apY<;Au`JdpYioI%&}mU?{_jE6 zO;$x`apS+E@FKOrhGktJt!|aqSzq(V)Wnvn#=t8An7cz|R6E|>cV7T_VSDxUjJ1E| zrur6F-}jCBIZ0OduB_iqck&?ClX8BwGpvk=EHg#6%dUXoFoE``F1fLv2q9hU&eUeN z;-4Z1(5LuC4wsuyFk!a)!%nq$JXBw9!0Xyy-(AU9F~z=QCQ=mv)@vBAsuU#ycEQZZ zECuZBIxVMMMa5GD3ENB9@ODFDJ=Q1ii)}1`A}j1w#l|aKg7LYKAX|G1DVNA{A>u*V zLGK={a-)_%Rbw1rahehn3ZZ5%iP&B=7sL`UTVB@`pMT**#Pz2nw6_1~*SOi3U^Z$k z));bbEuuA%s`C~#`*T97N|t52jm*0&$fWlN4Ryj_Ys7UbyS};?T$tpZFW`~W?57Z{W~Q>F=bVO4rnO-hWa zgH5&vt4jEWW*)OAq99Ds-P-!+%3~}Ey(8N4V=W!Rw!U|HULu|jN$#!bfHWqJYW zd`sdGUS_9+V7ELL*O(^4)ay^e@U=7GN91mV4;yKf40wJT`&%C#%Kih^1c6h;y+DyL zS9DY^z_h?qUx_vnAc>9QEgfWe;w7{0H@+hx{apRO$#yom5UGitv)$v7_N^Z`JUFbZ zR39#yB(Q(HA=L&%r4{-c>Zo}7Y8Ir zLF$WCG8Qm&=NCg{Ptvd=D74o}etSQpz2F7(5McyZ^5T zy~~=!4~$0vn)LCfM+GA6$}KiLnH3Y!<37d9!&6AFqp&4)yadTt*_A%3@{xodDC5{h(D8wYPMkD2kdvswfd#5yUR4R_)fTS~XL}zX zNFeKroOZEoP%Tr8&w_5R4O?vYQ!LZYKF-zB&Zlg9iT>7sxQZ!WzyAAeN*qZg{3S&6Qxdw@SPo~IhfC49|KSR^N9vYj zSCw>6TF28)i-w2&h9;Yg^|cTAyAa^6&j~k2wpWfzs}ge#(4R zSeRBveb>?mAZ|zM$niMRYIyt3wiO*U{+O|zvl=Y2$pINAC{gR#!v9OKgZbSY?38)@ zz>m4&WBa>XLe-oCK6WT)Kac~dVA;6CX{uEixA0(@p;A0&G*a%f*&0vH-TK8#+&{oq zEk(2#fLrw`j(Cym24#B-S(EdducM4EA$W!8f2J^cWoLloD~i9kYXt7*wqs*zrJe z<2D{Dz1x~9dZ6rM`yoFj9~O8-5MvVN&=Fl?Np;klThyz(%a$=X=`015!Wz9z_3pj| z*TqdS*@=4Mk$p%#IFIy-UgiYhhbNT^Q|%Ds${Buwq`KCfRwT@qFT?hLJifTNrCL-^ zIM@SJ#~$ao{Sz*T`Mu0+>_=2%vGtWO?L0g z^`-OLd^n32>gy~s2GDM2{AB_*&;M&uV?tlKEFJv*9Vkszxtf|&5Wl+>bfBfW{OT^~ zy@*gQ)k;b>75n5mhj=oIx*l%O!!#R6bRij+>taS@mg+#iI-)27kylbkfv7xofV8b; z9cl5ZV6*^6x$|Q(->9mJOV`AxP~P{U@FsLT$IRIyb!EKfqq}eY1X#^y4B{5ODO0J> z=H)EXQ7;xWyWN<99hJW*>*@f;KpYp9otN0=IQhGmUFEzybN3!9CwAxY9>m%?sUBwI zXgJ7c0T)s>p68mB*^nCk7*%7uXb=st>LRngJP2e=Dwd;*SHJ-eyCsm?4BGvuh+fZ>4IjsH7a2wy;G!-c%5udQo@O4sTf=*za|-A2NyKREp+^JWL><$2X}WX zDqoA4jkDF&;R#H}YLu|cPijSE!{B$*k__9_(qY9iw4OZrTm!6blL)hREgLJq5{@^f zhNQ9+wM4Cu_W!76HZ^Ij>sQZyNad~l>KvBdW38@MB1-ec0#vtR{fh~;` zM#w+`{TKs`94QRYLANoG|HUBXaykLNWtE(#+T*QSxFrr!ORw_Vq@qDA_dlu~25Q}g zDLLI122F>?Ms0-BxjY38p|5ZAGyc=DT-FZc@HFDgkF=)pfdH!R^9NQrmi$Z_fzX1s z^qlWAn^m7IQ6c_(yQ*Odxq}`DHG<+2opSwPAaa|7QFuKkP-Z;o^X!o`>SN8cnR>UJK_9{(> zW&5y6&#Qz}Y{pBtxi;>d+YX`jL06RV6OMtT^1Z3dIGo9Zhv7$kt1&;DZ9m_3B-nE4 z@BhLMmkSKb>Z8dlvlHe=3ZNg2zto;9s?qUsqnd3)ni=gn-8@GHH9_&CmhSmnrkoZ{>qf@|p&>d0RlUD-au z=)CB9o2i58iRQJzjo#U<^T%85eg~6;|FG)D5@yGxLbE_5cHr`+EY_C-x}c<6UB+`h&*V$0M)6 z2(7rw-U(EjT?Y)$)H#CxDx2ydKZZEBsD0g0cHF&0&};YvpA`@O&x#TC?TEM?*9z*H z?O(oIpWO9?aa#Y(*wnNmt9_(zJMp03qN1~0w(_`VF*~coa=*mHEt>eBWCCcp!nZJt zkVv5&^A8(Xpp53#^L^H5G7@ipu&^r}7nXh8N5kob06h5N4Npo22=3(DD#rXrXv{yV zUC%;$JDz4Z((sk|(yE8Y)7uFlpS~Ad{5&eYHisSEZG2rG%7(_d_tAwG;;+rfZ5Q3~ z?gI;7q5e4AK-k~iExBoXQ2=twx@U7e7hipJASi!>6Qaumcwx%m-#h{fdj<>AmWLi~;>SpP_ zgE}DtlgvIolsgTo5+7jBkT#7!%@d!6LiZ}O>T}bZ&b_fqQT%x0efGK0Yn6BvqG*nr zK)6DR#zk?k!0gRW_S9V4{51BL=2csU5<;diI%!w1wV#a>>9fI4xTWU;Q5z*2Kirh@zYw~`f3;2?d=%)ys`|x=%Xt4LNMVHX6r8Jgm*c2 z>D_|50>^LlnSl#Sh>dk6wFfVx-mRLv5$W(PgU)5n6&JD3?t+Al9FIBj8uG|2?KkNG zbwSS{+$^>eaH~4*UMwFAE1iD>7^+vO*5lm8B0?Vvq4UT{Qn0eT3k3 ztG|)nfU|UUJ2*B%8id1uBy&AB*!i}ri~&$4q?nDVvq5?>Fz~MC)|^3vIYBl+Gd#o3 zwBN5BOpAL<2|OAliL8@Z0%lT6Q2S9_={LgIs?U|+wBM9AYUN`B3$0vSBE9JfV}Jg* z6N#M8V+fwI5xS@ZEvMx1P$Wq>jj?x3d~*mj5^(jSC^j2T*b2T49T&_us2<~oB)Opt zo7+0ZkJKv)+> zPa;IH!=lf3kDu?#aa-(ENY-sA=s2SIf|gU8TLFgRRjP}coumbE z$qomDnT}U29~fdhgNn%(q|u_;1?5m`U3aLzwE}j z1LCb~SV_j3Vw@biq$4}+W9=rz^XJB;ZqU0T;H)$yu&#AOmU^w|(B03kAO0=-s6OuD z?5c6Uk@En+qa`Yc`qpS$E}*JiUMEOP1Hgj|1D@CK)>)ZXb&@{)3NOjO@;U-ttzNGz z#zW}b0`VydCVUoFQ#<=DusuPOvYpIiH;OKS1RN0mQH33Bla6aQ63*p!gSd4TEg=(C zOA(U<5RdhyI#cbG&xN1yk167HWsjYpG*&hC#Yt2+i$icw3W`M((*aL{3Hc-QDg`b8Ca#t zJ;9;rQY?)B`n(<=>iN{Y$oY$QiZE22eTqUuqJijcAf(FS`4mA?vriD?r~&$@M5A3pf{~`O--~ta67D9Jno8uGFvp(+HwHg z5MM7YAjv=~?$=fPZ#|cNm2}zMopAU= zw#JBS?lIMaEnsI44s_lm5YY+&rj;f0TU=}{PF(xXrhK>^lI@Se!se)(sHq!IM;@x= ziedHKZGMnE3A&j5-Yis0ExsbaJyx9`VT^W>t$cEZ*2CwPlxSo5X}9_AMGbJrPL8#T z;DY|Uques5M-%0OFhg!BxVi#-f`x8k9D75?^mKDnp1*5|ZIJub)%e|%{C>vGqyzP(84%)5odM$_1OHy?esmH8;0&Mo)L@cYt_ z9;37ZBiWS&b0Z|(tKyO%p5)Xfa7ZR8z7w*g8DxAlI?efuD_pakiP=)jTxb3$8=ER@ zlrnBQ)i>^}@Vs$9A#XXP=NRzSpv7^gR6v{_J#!pcjWC|4kGNam6>x}BgMF0=pkMzf z6p)b97I2~A$YeE2$2usZ;gE2J#M zRUv_Gi?YQm*O2=Onyf3&CrB_=2>)rUI^vbhC;V_EKdjfV|Dm~yIKqX%S!t!F5gE7n z=lwiXv$Dv@M@ght<4|YciX{18Hvw|fq3NxiO**$2krZ%R>HPDfxzkf>&3X~jIOkW% zfHQfPIbL?%AClfb*YKyqzQyw*5s7$2N+Pfu6NcmKH~iJP;2qY0A{fG;S3W0RRpf|~ z#RpBNUBRrWr(MQlHQIPBKI6D zgljW|S;DxN|CTx{RKdj%;hhg(0Y9xIm3KAsMBXFFM`E?>!9VLFbJw4D)Ha9TujfEK zJvU-v>?KyhI=7cEq}MRwu5$bw3y5do)7ZUrTGq-|3J*yf+s1Fy9E7r0mTxP4`rk|2 zpE+LLy@1mH3=DyTP|Cj5_rCaJbOByL>+@JVju=C*o+X7C)@KfynfKM>YXQybUfucC zg)uSzN@zOaTe+@COhn?rQdF&bQ38LwN480PNuPfLSFx>rv0XY2Slk?@@IIoQ)7=wY ziUVoaHE$&sZa!hms*N>uqU;RSBwpobGX0(U)17+oeX2*=kAv=~?D}=KSM{6AnHEP7 z{oVsc8FhYox>=B!@0Bb1bb=zC7Is2~-~aj~D^L^{o;%HZ3_RX99ltu;v%Cua&Vxtc zca-^ZqYs3+JRLf z+G>!660Cl;?91RO<0#?Pi-x*KH$IiX;EB)Fbdu8ETHT7HrnilHe9SaUvm6o=;s{|y z0Y~xCiFl?b<9D0e3F;9Jj^e}7Vc6Crhv`LYwmI9W;2ZF84GS_9<8-5cSqvCf>ZNeY zTl&=WW8Aq2_ifKjZ7#zBAIHoeChu+-g+p~Y*ZenpKUrGYY^QQ}xGggN;$l=j-PA9` z&-SGrCEnFtsPR$HV~dC<$=5!F*U*<=);2w-4;I|&c$ww=F85kyrH*A+krI%vsJ&zZ zp1DY$LVDv4$f}+Oy!s+tWvJn?N_OYeGH)mBNdp=z7kI3STV_Y?Und9QQ!__C#eRdA zXu!ad+@yPfKlk=q70Rq0ug~eZdxc#?V&a`|q8Hf-Lf6x0+hXj$i2LY*&*|Jj7sUX$ zDTjO6H%Bt6Rpwq=1;Ti;ZglthgX3$`PU_djN{j>u?(waq0=8Ge>_eE~P{+negrO(1 zt$2D2!(w4xY6mmIpa^lBg!0Boh6Rk1mFd1goRgu+;F&FDPvBkKXN!=iD z03kK)gFQxcF;bUWw~+diPPq@Y4$EojlRJ zTiT|T=>s>@xv%8QnHB}ae>bjFVC9k(yx*{`tF4u$xu*@vA27AcTstB;=p^tzjLY^k zN8Q&?y>A?^q+fKs)TT->8FnIdk}r1ny;t6ew5>^yXv3fMQ4|Qp<=A^IQxdWlK@+Aw z<=gKP+#2uI7Fy=9kX8%W_T8ZjrCn@hX{~vT| zf7Sb$BdO0~T=`ONjbM$+1fT_v3V(BinzqIoq`WkU`$xqrJdUgOzt!Cx{Kom#d^dY4 zx^elvJbs`zR*UZ`{S_XEA54+S>+sg|a5$1Pq4c_3ObOSk&H9}mN2xy~a_$RNq#7T) z9;yHdZMpV}526!DAnFX`EQoP-`D99)i;0C6OWD--g{C4k-u40Qd&$-3ba?h&w#6#| zllCsQpu`}=6%zvB_>A;KN6cOAn-fNR+V4Ds5^F}T*8lkA()dxE{deQzft@(f!%Xz9 zclkzhLSFGG-ircj)92N}@=Idb!hfLH(p}P5^!M|5t2B@X)sa?neCkDz4b420LR;v=$VXjmhx0gI_IM8_<2Hs1o7$n&-fw!k>E#*WeOFzbTeV?p( zw<AuUUPUw6)+!eG}M%jr>$H+`wVblh=Uwms+iWzcoqgiDH?MpO)OgoDw} z7B#nh;wT>V;W$VF^#V9RodA7gb~4NkYFE}?eUSw#gF||xtFnSrpv~ri<@N`Y^N;De z)xob5?QU$p2^G8f(mT$xe?KCdZ+A&a)h=9#u4ULjlT?jiaDOu8cBJO`7#|%Y#~@=^ z6QS3XF5)g(Da+lH%wUN!tW8#WS7~~7s|L(&A*5~k3_ce1MVNC<(dF6ny$U{d<|w3o zD|B4nD7NtQR!gg^0)VcF*<{-$r2t1dOfbs{-ex>8v1eq#jAx?IqFVD z_=Qq;Sn$A8I#j4ss(5*?ZzzJm-kH45gUpUdGHY=nhl+N3Q5UQgo$I}$7SwghXYd}TWqd&N$*l*=3KC+Km-;YX(!UypF0;b#b z2=uMh$~P` z9LCh@#^%<78z>_cOuv}IRy%)_03$P>|9=RPA}a0mDymWM5t+_I{=`MGRsu~NLJSWw zm~@xT5d{C)Bf|*lLCRa!pjVR!E;(9R5F?xm^|CR2ao?bx&{qqq8pXnf)t!(_-Fz$^ ze_p50f^O@2GnG?DJlsjtc-bGI18sFa{_>D6ks>~2&xwhIuGVf`$j<(9$A>%~^_#E& zX| z_55SCp@!)XKPYM_rC?aL{g*Yfl(!v!n-b*H1>))ZjdGy2{zd1rpW=jRMH7;tqifo9f^m|5d9m-f#B*Cz;dDNr=lR%*#e0SsD4J-8Uu@FAh zM=4gm&g%_knm)3AYTj7;tfrpu1pcwF@4m}Uexy1xVKExp5y@nWDR-Y`HzK9sn3pe% zO#rlgE4v672!=az$cdc(tQv$}`jB_K75sIxw5+(WVY_G^?tE_2Vl96_nRrnbj=jHp zvh+8rvzbicoTNx?2P+X|XEPE?@&IFdcaE+W$=%hxU`zc<)1)k~z#(`F!CUy$C$K6@ zEGu4fUdyxS{+OIA+n~|JUP2bkTX;E_-UD*WgD)uCK`DdVVTQt1#R^oxFMF_CIHxy` zrYS}7ucTNqe#D#We5;smBW^aV+K05T6o&KzcOBahI1s z*K@Fd0@Q1Icy~8f!Z+D-vyMq54?+o_Q0Y8CX}HLN*h$8}n!BGCk^GFO??k`CFLejnZ7+ExPBqJYj55E>sww0kSJKn)d811v+!snxN9W6|TtAS?d zV9l9suJYic&&-sP1~o#BZBs>u~k6UD3N; z(fD(E<<(S2n^&jV{%yZC4)uC1FFJNhkxvQW&h|@nc>M@mrRn(-LPEV?#jF8-AI0Tz z=30-6l;c%b_z7NOdX#)SQ1#~L%A%iX)L-o5ZH@1&|D&=q;M;)EsB@B#-5odIjdD3z z_7xChYzPcRWe63*bm84`Bm#ud6$>oR)59N6N_~;2+y47rQeY&UNeW}W8nf8e(W!|S zTyh4+>(v320Ny=D$Ut5U!Vcf>U1DjyS~Bg^5&eZgE{bUTEB)ZLAKGGR52X_Ery zJbjVj(_W2PFx=hEGsllq7C4W(Q`^)r2UB-LUZ|R}I2=pQBOeUT|EOXuAL}vdG3?Rk zFWMDk{g8cEdr-GeueYxF+bY{XD*qw%SS3E|&kurSq(*L6(&(qe;gbt-9GyQ)j)NW4 z!73{Ekc02O>|{Xd9XqX+1YEVignPLeGC`Tw+DSfy8aN zG;EXwt4`nFBH`W0bI=py1B%S#*95r-`;uX;h#0O*O*0Fv(w9ZQ-_6ctzt`?~@%77` z2AEoUFoov1sxr@vHRlW0DO&rz5cLiYJd$XdC z*-~7WBa-;J;nD0*(x9s|4hlxzvD&6%BARNBZ5hWCBc;m<^iPZuiRm6wDhdIg?dOtX zTXZ6G8_i7Hj&(JIF0hHSsO5VF7)jQ-Inp#?wFTe!VL4m@4@oRAO%Gx_;7IKkj!c)O zKlr-1YWVoUPFaPP@UlJiFUs{hH<`j)1rL6xgsSsS=&VqbwsUg~}i-?zdJwp z_@@4P_1u&#FWJzS$9sWV!us@r)|ah-C4+YP&E;^!ZOr8$CH!8d!6UVhk*f&y582iU z*k+4&gu44L;YwH*UK-h=-88n-)cJ;2Q<;0`fgORr=9$y+ud4Bb1jV5j-hdzmsTjyw zeP^w~%J^JEtStA?*|IPl^|X%1RvX3Z9hO1~ypZY@=3!_;xvAKx&#W&Y(M6n#t^_(6@ z;e!3T!vhpREqzLx05EUzrxM@i{Xe=HLyaH|o(iho`j6@ig-N0)7N}>Rg(T&T#D(N_ z18|$&x$#g&m0%zbWQCtnFM0aEfYD6-kl(;(UWkq|uJLpu07&gTqWTp;?;RHQYi@2c zX(=LNo6n^M*vU=OamPZA+Qo4!8M8$r6mN4ic$l*LAS;fsV8w?Ik)DIkn^>W$ff!v z{yNDXBdL~Q{34AT;%@%C?cMp66>t&y`BQyKv%&Ak zvyTxW_g{s41Ste7X&%61HT&=KKf2@{7v3DXwp$oSE(%kBzb=?!lZ8*|lOaVLq&%B) zl!hrkyZ<`fAX86EkNZu+TUEB^Il7BK7KF zve=-BVjt~6l}9VXVCXeHf60jBm{tWOG~nzYGiY4HL?ru`C|s3A zI#>e*TIengd0ANu2+Wz1vxCn?jd+slQwEy-ed?VOJBdIp|tbR1mLA1gLj>5SE) z*Ou7-&L(uAc@2(?C^DF_t-c++O{~Ljoq!h$7t?F?Z<+-{Tob>i#HrdjF>>ZA!8;bKjh?Cj}@_ZxCtbz6pcq5%71KswbW)w<4_H$6*5h3iR? zQu#!-1FKWJg-Bq(IB)LRy?tNgm>|a5?`3WEMQc0%;=+qhmX?UeBnI)G1INK|**~p1 z`+}hyJ1-wA8qNID2h$L9yHR|slk05L&Al}v=2x`IbC1P%sFLJ*JOwj;-zb|)&>EZo zMJ_R$`R!(WWjf2ET+e2drinW48#P|?_^pbVx68a>KQ)qva=y?_eoR9{bLo+bqv9`) z{{AgSzyU2s5R+LRiVl4Uf5CT~HL@2-Ot}5QB*%Qp_hRX;QlIn9nrOLoTI-gX0B>1TBX;_iWd0p&mh+7hCXQ;9ljgs67gchOeQx45&)?0}entkx8KI@h?WvKNK@!cXpH%keV ze5WV->D^|gG}AVBu~R>?42my8I3@F9FiK`#@|OK)`u!W(P#jc5QM*Lck(WV$ zkF8=ur4P&Q+oW}D=|~#H;oiJ0%#!F=t5?2}4AVVXuzL9yG?^Iu1@+>)THyJ_OBqGF z15^3&P$j#V0P)^mcs66pJKC zL@Zb8fM~=t#~u5)aC30SE}FrYJDyl;cWn`lCk~?3u5Xt4$a7NN_NQ-cGqEcLQG@t2 zLfXng6BM&KP_aN9e|X_H=Tacn<7iO@aAI-8ABU=cy6|2*b}JUB6M1q5-PgN2<-SOP z;r3&JWD->$B)kA~vNMekE0}}x8>KuZWf9I%Y$-5xMtnyMHbKO#70A5oX3K|QnR@h; zIkm__3JQ%LaD~oV*?{1(*@o|c^XdnAx140xx5$2LyMv=$GJj;fN44X-C-YmLbI^vvrIK;V4ZKYbz8om& z!`g3eJ{TMV|b&jo#0CSkEil*F&l53n$b-zj`{uw98bGy4fk2=pu`a=d6QqjHlgvVQtY<;F=V?_OG& zrS;$WZ-dk_aI^PhR_OAaSiG2~oqN$eV_t;zZ!KsHU732OMN|fet1| z`0p|}X{uXmc98C4=6G$nhIa23PT5PlrGOw=7#+?d^E9#=Vb}GO%imY!ewygdd3i48 zNcy+eigezsi@Ypi)#r#)N&ddorI4mLNv!hnOgeekr>RBL4#!o2xMS?OB*Z4X(N5wHN=n}eEI*?I4`-t3pvd+SDMx}+x%^Oq; zQu$-lmNBq0p!erVb8k%Blp18be<9;gEUnWGgfM3L?)TFawJe!b9-WpM=~-G^or#H?1?TucLM&6BS!;7BZawewL{lAglGWhD zh%AEJ@Gcpu*2&+}K2bOKUNy8!(Q=rOG^y>}9rlZQvHfR?c<3b|zRThMojh@VBT^|B z44LRYRO_LmL+2lI@r&9xEqVV4ff%SKm=M0cyi-W$E#eyG?f3yHAf9C;b3s8d)Z$I&Iyq+^iYFNO>t&Yp~ksTq`| z#2Kfq<#Y5l3Ku2UFIIwE#<#)dKgwu3O+MXxY#}93^P{``zf%idT2s@j`X0abXtFQbI8WnDEezlPLyu15_OHRch^X-a%dXrxeRyU*; zmT{7qOy}1Su3MVB2DA6G@TQ+|OR{h<$?+E)dXeoRc4Uq>ynRr_#nG(%r-fLz z))bVcv3DTSxp>xgS7@<R?tK_`hk?iG<@ol2| zLgo!=ssZ8FyKg=M)6fXbh~A!*&Rz+>vhC&NWfG>k!gEi!_OOXjWE9!Q4Nitks7OLBgYY+w8RXpb|&exU=pV3X~}{Mb>1t1QFs zO+K@Uc}t5_S6Nv4Ta1Un4aE~vhCf9&T$PkxZH{}l$9G8q$ykBSbJqKIL%sbvtwjai zkxIq6^G5(RML(x<{ty{&OsfjQcxZyKZDX|537Q#L!04w$Ewrm7JilzV0Kq>eG~z-~ zt=|8r*!(cdI0|b2_SrGNM8FAg{jeMB)&fJ4{JQ;=1BUN@1p28jK8mdy^04>us#wPt z*BZ6EG;GaHIfjS}dAxuLgsvZHQD}J^DeMqbmojir&L#OJ>}V7AKYC9l>IZsx_rcEm zx_=*#9O9ZMwx^C3AhQ^gdL4>EV_-_sKdOGcjN(jKjzxVrkyW;SE-kHPrg%x}{FhAF zX|B|n<9Bl4I0K5)B`yHST`zgT*TnbUt0-|o5I7k@a8o`qnS!i8ko-RerYzrZH?ih|RIaiQ)wTEth=*vNckiHS{+Ht+_ zp*)TgBrdsggNY2-17pNcfJekxa@NA10ia&r*aLRWeV_HO$HOwjkvFQq7le9*G^$J6 z@p^PHxSsMq`MVyfxUO_NxRV-0tA1~V|5O<=`y%i)>C7$Q1n_EBE^P@*lKMObOB&E4 zQ`;LIbejuX`yr`-Lp?5qdFY6!JtJm0=@D;<27@cJmh5nOb02mu3XqpEH%RP6$fsME zx{)ZR4_1+iJTj%!Kn_4kFT%BqWY;adb=I&H3N$(76kK%CDQzB zTsCv7-I|)B5Z5Wt1^TskzonzKB^sFJi5FeOu36+yyxWz*e5$Jsx8TIqG^C$kj(5oo z#NVd(bBV;g-DJ7Ly?a5UkiaAf7vwcekkeCezjFbDOXl>}plQASpf2KGpmBz5?`EKB zTFUC|E^KHKfOb%{@{sS}@m$WU&FeY+EIGK2F#Ln25lrd8S$)M7OB+ysMQZ%1*pW@a z`_h4~ZS!4@>2TuZ^8Mp896ZsZP^{g`jeEW_**@oh1+hH(WOJ#3+x+<98~J^~xkm>% zr-}HJUbn~mJna$!iLG|gm}Ds>p5zXO>%je!TjOU|!t}FV09v>4a$ime7IKr+;IFRY zWae4{&#&_?lh(z6xIgS1<~z+Y<~ErA6_{jDbG*8GxF^9IAz5h@;gOR$eQQj|uSS3O zP~Gh9nZ=Suv+745YzYGoL{`=_{QPCeEdveM*0_7ovC0z1LM<6g%HesGO}dR4f=$(o zYv4NT!jios5|ozBaE{&9Z%`E0(NJ;zSL2v$l3DjOR_WMUok1B z#Xvagpmw7>f3@X%K)K)!7QEKgNETSSF{SB;I?w)v`?4`q8$1mGtCpPDrGJUdvSYoyH@Q=Lyls~~-*`qh`xjz1+$T?;r zQMSO%sg29^9I5AaK?4A)$qdV&XiL9vvLMc#)@s}Gr|a!qVz3DQT+6{5k*M$ip&R1S z{6$wUNv`W}-Cn}m*Do_t>jA@BIrq8-_38-7@cjDfhJ@)W>XP`sudBab1(YS| zYOdx`4Nvm8%AOMI7T?tggf{MrBnZQPkw&54Y~TuDZ=F6)WZReycqaYblnv%-i~jV$-MAL_9Od*T;5=_maaQ`>YFKnb>U>eaNlI$AOSYAtfy2A{h7YI0-KTQSI*_?r zuS$#2;`e7d?-%Z6&F-7+?YE5`I)3Ks?1b(Sco{v7-BTBh3rr& zsYoSs%Irn3Nq%5u(EzV<)|ZVrv4SX1~<$xZlId3%h(49gLEyIlSGx zC$h|xrV@51EZgx8E}QQm_3QPN{?XF!2!rpx^Dcv&#bkY%J9hR7rW=wf&!!jY&~~OT zc=N*-SXXXo26)tyXd;5|taG>=3NCL^`Wp0Xe7@V_c5qyOorhobifC4t$>NkV;tCX7 zyoK4F>L@swZo^lOHVSd$hC%)*h7n%PHDeH6Slfw0$Z}3Hk}RDOp=t7g;MbFsYXD)h z3EK;Pqp5~hlp}5{J&v49pQmx_o};4AUOrIj^AI~cq|lQ{Ws?os!ON(usv&C^Jst@%WL|kD$^%^YHjEt%?@#2`s=Sw`hl-2Vd+P57oJ~C ziz3g~6qxUFy;7?Z@NzS(d!1e6yIb+f!7UTwO7Uh=xIb3HYmd8^2|eZ|8q$iA$%IQ9+kfifJP?}q-%QW_4Qqcs%R;l3q)s?(KA^z1WA@#Op?g(D{_9@`W%^|+ zhIX{qIfd>}ST4y&zWkOz&c6IG=+dZuLx9JITusQzJsCj%iu)hU1y*ApT zdn#wZx$P~(9zMGPZTS3VAf0$a9AEh->a(86uN#({f=a_)RKZHPWSK1`^}GwWV&o5c zZBaEP?$17Z-YJveUJHlWYZV_K^w);wbyyP9Qv`aTwL7)N(s?-Nld)7C@>1gI_S`UO^x4Scwq6qZ7+ z{zr9L6(9I+<0>Rv%Zu|)`pavV669aY#9az~ymFyLLsMk?qKAj|_4N%eCeF>c#8N>T zenZG;NpBtv7y%}Ao@>JvWeL%}DlPGJ#P`6;xJ#`!P7#K8JjN5_F$VNbfO`32qHc)^ z+MKGaQG-%Nrwj|3en;On5IPhbp}>NcqHK8Hv}z7le{rQB$Tg#9V|Y^%Q~Jcb%0YCp zR5SZ^xltmybtx;CG=smkfjO z-Pt{E_AixhntgvJFv)#M1Oru$W6#w$1j+<|U6<0^x9K4tWwwmj)Ml*>bXzl@NHt2U z@Yvs?F*st6gzH<$eOl!d?X%r(ZMXOXrK0E6tTWY@;9bR$wt9)YZMF7fvY?ga8sNOBMlKhyI|CNrxoroaVr0|ts{~|<| zRdk_1i!p|et+{cc!Yz5LYk;`5yf7LlWR%f%6Fg8YsKM-W81MHhST#m=SLcNI>Ei3L zk_3)zwVsJ%(^#kdm6v)?y4qzCQ{IZtjE{`W8D_3{dmtpLvrO~?du${Kjq%5@Ahn}% z6(p~-vfsyPlz#e_O8;)%xwWx&?s)&(=9qiQ=C;~&`IjFF*(1Tq{UVNEG!^dm-~dp~ zEMr{R%Y63xATO)2_^)+PYbBT)+EK8lD+dDOP?E36P;Ob%w$y8qJ=Wehw-z_sq(=CY zczMcd5Y8kGW?YQ=UD90^_P(s2|w=qf&1*#_&oS z)HNh8imSDru0&2yn31%z#Gk)TbD8ldnyx{aTz)xZT)IPK0-JsVpX`)SYNcZD ztGdD|y)2!9*?H9YljI)Ew$AO?Zj(s!A~~qnz-=>U`9;tK=nuHNqfYXd`|Y`Ig(!*& znVG;ME%0IGPrC#{Z7MC)Fg~ig$M3(h1T&9~rr!c>kQY-&yKeJ~PP6G*6&CKyS;K-x zHB;g*BA<%N4acEx(ukx}2k+1$7w&Zo1J+pbeLr#G?!;?Ss(XAq6UmQr&#?`f^!gm1 zmct)Dr%9Y;BK?;UuTJ;B;W-G30n`InQT*|CUFu>NnRQ}6UC3rQaq3?-JOrALvK_H6 zQ4CXc!GcqD3o?W;?|MQ6TGW}9#`F%+yP@BrJ+rOV|qY*d$Fhu#?e*j5D} zd;#X&OH%BkOnZ{|@;ms~>7!DiglG7^R3y)bMh9H70(~XVhZ?cVRb`J^SMbN8WBIXd zO2|b+ZQ1?0spEsivx3RdvX}5Uf%xZxCq6`IVRq@=GBW?d7+)WiVFW4Jlf>wm*DaVG z5f>}J*Zxja@tzY(h?p)jL33rDFFMg`TGmX;AUf(<-k)xPffAl%E_shY9{V^(CB^b2 zt$>Lq0(C7Z(x{U=X+ICyb8k~qe^TVY6?-1t$f{}2tmGZ{+hwUDS5>-A>%k@J0%VW; z>MM>c>#K4@iW3h|22FQh=bkCJ(U<{ncrYYJU7UtGv?LC%D0I}TZef2XXE--VCHKqm zIufl06V$R8gvao5`T~p1_piz|(ltQ*M8J>N-T$SQnsNxS-icrE8=p_fIREMptp?Jk z#Zl){zJ@#?@T@Z488LRZ8s&C6ftaV&15TWQcrm|_NsBqyBG(bwE}yFq(K&chZ|Z&qE=Q0jsDO= zyPru3=BwF98~O%30dL!_@tQ?;zC8T^&05;f8ooNNkh+sgy}B2}Qu}RQ$e?fe zI=Ati8|Q+WjrEy*3{Pl{eA>drV*Lw1|1~5%?fd=wO0CEs4=Cv=b z5#p9T;tt8?UZIQ2_xJhz1NY%`o%=cGykFy)SzWGNDU;aYWP;?!?a0F()!TbpJEfHB z2Q~dZZnH`@&)#~DkPKV34cp8o)~89ny!SH2FMDohc}d>h%{whNJ=^g5i`j4gP7ePK znlHi!y47bq_|j5OMX219Fr80-bPo98iNJuxGRohgwJ9Y&)eot8M=_rr6Edt+Bd=Nd z#RXyM!{O|5dy3mi>XJ}v+JYVbm(yU~TZ`uMTySLu87510+FXWSV?R4kUJ*UnE=8Lc ziW-1l?sO-u9VN9>R>&z^2!5C$lFFFei{r037g~?Ll3+~AsU~)5^aZR3QR)myGs(df zkfYS%WiRD_wi{tAPeP#Ib&@E#+A@PA+b~S0c+B^|0_NAOiVb=0OO;x&S^WHLspKjC zDF+|GrkJaj*LS8TKKMi_UfKYuapcpeuxNpS~XLoUaI=6`e%07 zRsZ>?;IOkE|;1C0r?K8jD}9XTAQD<7v=BrXU7IH2-APUXOO#_PYo!-eVI*y zw<%p!lnc8G36t8I(cf`g+92Em1DnjvlZ8e77TZU!_HVz|yU#_VyfA_~`>M_TeNkEm zB0GP9RQb&b_tsUK^nK^s@Lg}g8{L`mT+!|xzUf7Cb$BW`{+CZ&S;ezfxN6yYrS4?^ z>h;F^S2X3H-4O!xDEfJV}1`h>B&p^y=|6c>r9a(d1$**h8z<&!2p z^(To01piP_{rnbFwekhSs6NA+^t67jRnzXLe4JvK+g-j!#cp`vpA@^>U%nLmwCUCT z3n~{{hkwayDS$I_aLoy?lcb7Q_O>BROtc&(WK2IxDvCBKT>B#Cnh`(u{hOP58L^WP z5GofFsnza|+R-|dbJ6r~a-x`a7v41dA@^7dW;P zoLsf(K7ZMxWNGP+J7qJ;v^ngOIjfpzVPWRt^X-iN@NQwDlwa!}_TKCf)5VrXR;fE- zd>Ly-T2V7dPp?Ijv&vIg~V1~!z*hPWelYa2Try+B2 zayxH4yOMW~VP@@qvs-+M&Brg2lCj?mZXOHoW-_P=t~l?5Zt4MeA)Sy&N<#yZ7p9^% z)`m1Y;8VBF4DRQ#WfYLZ0FpAsadoUuQbZ-^cHTpsc1_kkvYA7MJ5{CMK_=V~q-It8 z2I(X`A6iqu$K*e4i8cYHS~-zV!4{qqcg?~J;_Jg83XK%9mYKm-WKO% z=daqof6^xGrxKV%U8m$OO{Md ze1_WZGh7|MX(MX7b0C}AEs9DCc|Y-F(tYAF&M+`oY%vGktV`oBx|E}OQ-i5PhF77} zJyWhJn;9$zJ-1+`-fE0Z?UtEnz0NE2sFnAeBV(MNzH-p;h==L9Qc!znplbg#WWVBv zA4iISJ8xfgrls@IdtzRMfvH9tgbGUizCo0{&#Gq}k_nquN>}h6SDx6=f*mXx1nY1; z+lMKXi>vC8@+kTNk$}r*Mh;g%PN^3YDEbXdLVAVm5%X9guO2O^i8YmW1r*r}X9+I4 z3#G%|V0EPWQ`+dp2s?^*uv9y3wj2Lw&nnu4@Q128n3NPyNBTUPA`(@s57e9(EGL|s zu?{{DP^0SwF^>~}Gdfuzpc0%ywk z09L1BrM)Gi(ZoeI%=4#@hdz+=6+ioYE&+AdW;*`{OeB-UNQOgo3m7Z%0~H*n;%Q)5 zHH_&DaSn3Y_)7&-ke}|2tZN2_o}r4Ntb~q7?5b2NqUiLKJjO1*WoxR#SvqiK1*l6}5ys5UfoW{sACylWG;_^3w4te~^+fpmY8d@ModCSojC!5Kh=~}6LXOql(7WQ`Nh^cNXsKHckeYqBdFG2PqC1OVFn!X~B`oFYLR(h`- z|J#dF_Yc8@+-ap!zowvElQRrniI2kH|W#%1eF31&m{_D$3 zqJc7?BpOA|Y9si~t=ybe>( zU$1tp6~pq)BDpE5SotQKX}OEbBAQ^H>W6-UjpsW;k;=A?{L+b`gV~XQBbcod2puwF z9FH2mY~?yP05B}6Gj<+)QY4H88%JUO0WC`mX$ql<>>Ok zoZkY<3odUJF*mm~lP+iB!RgBvNlnViKOHxU?M$$->Z4unEpCbUMiH{cw<1_s#H|(;?WmV2)i)^I)hA_o7wSU|xK)PnGL+59ZZP?Hf~{ z+Z#JRGFd`){ut=j<$~QY^Do4Vr@igW0z%!t?^rnm^~p~@Z-#(vcPFMO)IGVXa;&l9 zuVN+EU}L`#8B0gm#KrM(mx?1I`j+^Q*vV(WIx|n? z>#h#3r3^i$xDowR!B>avoJzoe!a#c#^4FkRau=^xkO2v(j@AzyL~Pa1i#1j7(ME zm)2wS(B~%OF5att14_|htFx6&1H89aKhL@SKR^coMk)E);#->x+W{OxPu42v1L~|2 ze%+n_^SrW|7ei-e5onCf7%?-qM~3>_RR1hSs3rIRRyBw4sAxVSsA6lLe-?CbF){I~ z>uN`YvhqdGVEPvf=c!?vWb`dUbah=Yb+ z|LcDZ%D%Zs98CQJ?@Oaxzu-b;ri2oWG}%JQwI-}gn^xYATAfzV1u*w85y5QgvjV>6 z{6Oi3VIRp`RFW<@Wc1llpE7czn{6oUQXd>6Ox5OLzb~5|Mu0EmEIzgu$^V|V4BaUs z1E|d!4z70(zK@FK2xr7Ja_l@;8-U>?M(b;vBu2RsQXOpKBto8wS(^Q-FHIVlG*fO| z?YA*4+vA^)hV-j>(2HQ@9Kxo8PB_=qr5_^&ZX3S~N_oB~LFv2{F1ird!cv%JJRzs) zLdG1`QC_}C@0Y#oNO9CM_Nn%{0=ti|&S&snYkXMJo-|GfW%$w-30;dfdLTs*&gKuW zySNWIb%EK_B-E4KiaOU9GFf8Pt{`awSZD`ngl}wpr<#*uht4n8n_3MB^0ZBa%(N$s z`JXQq;})W7y_WE(zfE0wCyJR5;tgz`alLs?mq|n1QA{q>+nwkeUoh!dTuhFX)UbbS zq&2-dRe1^7#K3@)`ui~B7K_8uV*yfh&b2z;K{J#>1MKJf?i=bYGdVt{{9V%@y98Ja z9p6-&(7%5FEdTw6p2QV{u`Yp}M3>WvX=%$w?bo0d*?y5HGMZZW4U~LL{oEUIe`2jv-PR`oXt=x#gpliM5foThQl{zA|z*FzKR? zZqz?;!_f|x+ZdQ{<3Gg`0>np4avc^9MWYz(6^0IoG&wn&DRQ9ja&o~ymW?C{D zMx$z)3#?2$pSlN^V8i_Rebi^l+MRzujv}KOrZs~rsLqs+@Xyin%NNM9{o=(Wu~?~3 zGgLNwrRGgCtNstg`9lpY9@C#MLJhhTOi4$L)tl}5O+|duo*mt%`qN_*E~CFCpvOll z8h!2`3d{`Olz#l9IOTr-Qu2VwB|TIZ3lz&Epe>HQyzMEB+pGl^`*@QJckZrbuf%74`HKH~)v~r?=(|-s(H~CAzbC`UC_?+vaFKFIOeWz#e=R1S&Av^z5Kbm_T6nGH+no+{QRl{zk1+mE+ ze~akV>P~ejtbKywjk8pJ-_KqkMzojg6>moResHWdU(1wV6GCu)PAtWkK@C%mqw%xC;wCSu)2R+6tDnap zU`vxP{S`6J_uF-pPt<*k9sX}?_+qbz5aFJ?jsV5&C}gHn7YGr#vZWKv`%DE_h_f;N z)Zh{z`I7RC&oF*R>R@duOP}2J-FCv{6BIy8<;^Vge(4ySd+7LFEa;300hH9Fsigi# z!wyfxHKw(r`xJ3W934ilF0+{@yi7TjyZ(aPHSlkNIWZvtrsWz>|F$)qIoqax0-7f{ zPh8hS-kGh853(Vc>fV|8Y{{OSJ(0RILj3i#l}8>kmHk50&Sn3Op10M}umMuSrg&G) zRC&Yt&6jOlXU#$V3Zlty5cCGb?$nnBlcxAb;jf2`)^VEDwUpAwJK%M;Q!;M)c|D<+`kT2+4v;1}>^qS4?Y&B&#MXu1`!Eh@EmruTR_DC?(> z)IT0vg)U6V*=xF}H&h#UG3nVnb>tFRRnv1GH?ggmS(FVH##m#pcZ(g_%WboPvY1*s z9#H7Og7%i(zxE{^#i&ytwv9;k2a2(exkQM(=o!)(pQWhlSjS+^#iA+N)tBG-k>C<1vn z^>|J=Z8V;N^@fQ<@5QK&L z2KrVxVM0sMi84AKdnqmF91c5cwlPKvL|>y9uzvW#%$vTL)h9W!+Gk(jZn8|9ARZVk zIiins9^0eS81|}DjmT_%6if1`BZ2!`v~SHQrgFM&{c{y2?WI$-zRXc_`i`7TB2C1s zh^BnAdZ>xD?v@1CC|h4;UL8MKUWz}a=o&?=e5@L%NlxoHH9yCuk`xSL#QmCeu2Hu1 zDaC|HWY7!)(cn}&mj|#;2j`y*w&M{Q1QE=lGW9WF1Lmpy2#AUIi*PFrA6Hmdy~K_ zBZ=hu_A3ECY)rS;Evu^gy4m!)7_3tbu{H0#^?@2zo=kaD$H%@(BRl_JXEt(Xp`yjc zNG8*bsek~BH;%~xz9n5*1;sw9!!AlMqc3jpMDvkB{j6`arQxx*XnG*J;o~ph?RuM> z(^X1+O0G+ioh5L$;nCNC4O}+O@e(fiV474~;#ji`LJatqI#J574;!2Y$(O%`nDCzt zqn|ZJX&C)DK*}1B&JpDhLC{3Vsj1HW3B^dLbV#bg!{)eKlQkh7PBtb!zUs@8(RHXLOVLfwlQ&zy8ql`c2r>}$#Y^n<-UU!%~IaQ%oY(QFhG!dkMX zh3Co*H;f6=sSH^PSxEa>;;=qjBs3igGzPgDHq9vc`Z$~ql005VmQhR$Tc?{%MmL(e zxPPue=c>f8Pn_)Kl7q5Bg2MLfbz8+Lxp`aPt7-P$wQ>bpKdL4_tE#D(=g7Aw#Wv>@eXIQ> zkcRQ1C;dMBHstK~mkR?kfl<{dF}nZJCV-bGyOzR)1SKGt6_bVb&BKpOupC|s zxVK7+g~FJvYNrJU2kpxLH|CU`Y2cxac>jwnEN}u7DFa)nEjY;%NgfvQOe^^v{MT~` z`v!ECYO(^3L!ApzJn_t)*3+SAzA|Jbn4)tJP#5gea6Kn+{eeC_W97+X7D7e5e#qR% zMXSEMH;q19XDB!YrkNM5ee|4Cg{$=aZcX}71-2g`HvIb-{PgB+_4neF_DNUYZ#I3F z*ct0XsK2ppbH9$S*}6%fPXBQ>%vx#eRFYE6;b)Bb&JC7;wpCPxZkpLg?A8e7duKlW zlb5boV3mR{9hJnz=``&(A1$6`!JqHN;x2TWR6`k$U?iFR6&z@J0VYFA zU3YQx1@-17^e39f)oDW93Dv2NzAQ_f;^mume6@&6Iq%|{KQvX_3$x0*_2@jsE|?Q| zwsTkNl0a9YZ^9mu?E2DU#0a?w=ThrH{W*8DZ^<0gZZM0|VMEHPcf&KY8<~Eur<@OJ zXxVP{3Gz(t8Ub{d76?skx;VWK5JGWn?9!$(Vg2KT7xrC4C&BtC6q>g!FX z;QJS!$FvQL{Qk|yvBYV|n9(b6#-h$bWjb}6X$*mLc?rt=RD^R>(-OGZn# zPQE7Ag#dr!k>E|#sfa~$)5CoqL9H2S88q<&spigppJ?;U;fI-VV74%;%|=-Zj3U$} zAvj^?CEg1y$yMv1rWNlQ_1f6-fhr%zsOg;I&+1DM^%pa!faOg&hTi%ZlkhL6MrlUZ zzI+wzC3U!-eV|?;oemT!lHtj_nug?DXVMI?IWzo;Iln?lub!s}?)BdtJ!(mCM3cPB z-*(^jF8lM6?3upzT*TQtybS8MD)oCx34Sdq+WiufG6=*Z?d*fWXBNLHHM2T8TroA1 zs~)|)Vn*%a&;REph!f6fvmUS;T}>)|bwt^k8Jw=X8r>J0_oh(Wqt41{;4Hf?GEj%U zo1rB>r|1s3w5HKVEc8#-7w;_5a_x_S;n$o}Bl`ioUa>8?@T4PrQUmK-Y$)t7uQ-{| zX0AfX!ZZ8hi%|6a=mgb9Qddb@?&ENIQ%?ee->N~|L};~B(CsdYQ}uVQlKoe06nKRc zz;~{P$n}b*9=tvK)Xnh+axlXOBkFG+)PbNdXv7fE+O0_TiNk^_M& zg;M(RnhH)huOiWS@h|V>O_<28>sJKoP52dqbZ>EnEb&*1KYj5a@ZZ4nhp??}k-HXd%K?hX z9C#9(=a9zk5GOFOk4ma`u(qt-9J}rM9w+j7w{>2>PLhmGKS+OzZbbDXoy?Ll8x~7m+Pn|lyI!Vgl4_DS; zEeA&$X0}v{TVAf*)tVeqC9XQiwPN8~P_ts8IxL+YNeT2z#GA9I$LRdrOB|;io>96L z6u4JJqbim{YvL|7DCDlD#L)*?Vtq znN&xH&-i#Lc6scqcuvXQwtly;(J++7`Exk?*=HxoqI>;ho*|uhLB8o1R0wiwRvF0G zuf=QHh&EQj`*iB$=k=x9r8hNd@?ekVlg-;yZKcLD2I6zP-kp02AXG}t+1?^^+&=4N zUp`yz=C zXPlBdPPcMRoS3!8`SW-5b|3CYAlG1H0Z3LlS?KxtkkQ$ zZm{Eql>?=mC@pD;Zb6&+m{EiYr%3gGn4B!5@K!j?4u4j!W@>QcV3#Ufl3aB>Y;2fqGK0iiP^IY0515XTQt0-6dPc zof|3&AbJ8>S;>_W83|IJXD+?kY!*lXK}m&jL;knb0@4vlHSU)2d}X4FK0o??lq{6G zHhi`$AS?L{b}>YnyP3VO(zCgFd`Jcn5&-OBEu{MrX=sOwY)AATbaDNG1L7Pc#A{$V zdET3pzV=1st)>M_H37%g9ZOLCP0RP!n#{PgJZ@T+&%D~Jw043@g!}1SrHaB|o&2dI zMGgsqCX0WJK>hn21wZ5KxE=M2p|!IEM_XTj6ZM1o4$@JBjQ@+&CKdJBH^|R93ob=b zS$en4+oLZ~=qyNKal0^+l?$@nk}#u85Ety>jQiDDVav|cvU*ZiV?n+Pf8R?h(TsBY zz6WfhHMp{=cZPd||5mD8S_6NT z-I2xfHjRSk{|${*QAH^@ofN8R-8!13TgVYphE7&QK0B6ulHVhEr?IVzl$-v5k+U94 zpU|8bD)yXxpoGEXZRj~?H%#!=K7CTR2%g#n>>9kJR(wUzZyFXT&3?26S@u<@IGOQ& zelPA?Q{v%`3y=xo%>KZ_=s@(9S?MK5%)m0kjMbUKJ+e$TZ>LObN0}01&z_ygMoD^6P$>feL);daC#rp=s>H9;0srDTRO0T8*c7V! zqTO93TqiTM9R^Ht?gq?Kd^SJ_UI_`j5}KyHlLOCMpT+(je6odIm>I3Ktu!d)BUO`a z`zl*4^D35%BPmGhp*EYx=q(Q4Z?=es@TzX}V{(3*pmucrR1q0NW8SOWEhv}Jzg zY^L4M4bK~gv*l)s)u38~+kyq6VOvj2DGH`-nUWfTvB4ECz9w4A zBRb2jn;Z*{27E@3L4&eMU@mQGm?tIf6ZHXEIklWprcX9Qd~u+PwIHk~r8{rpef4*d zRC9cx;E5#mD|mUc-FG<=l-7Cwc1b(xtx`U}Q}UhhZ1)lh-1JzA+X_G&Lr31%@!3aY zi&>h48(Fu%i5%W(H}a2SJDe+6yOK=^U_(k;*BK|Jyg>3+O#Z1<3iGO7UkHm-sXP@v zb&ei`Ga4poGLuy>f8CT9%e)`=wimc zQ9`h}8WPSxeJ9%0mr`qyFLTw+61Aq6KME)pPe!v-L0>5frO={@#Q`AslY9u~gBAiG zChh6c@Ix_B^h>)z{%0rMQZGTCiGwJ9{jaem6E8A|Nz25Oqr+PNLurG3B3?e)0$R1W z@^3Kx!W>ljA5kU|kT?4Gf<4^qtO;a_rzk zB{aMHbVw#gJst>(2Cxn27mU6JPf67)Wp$SeiBV$x_j?7oDH&DHdLamIuv7!^Dl{Kl zAUQeln0<1g9(w~52bw{VB9jbUSH?b+rGT{N=dP~ zDrY|s|EK(pRkee@O~}eHf1hQOGmp$H*gT0?WAHS-_*E**U7*3c@P*dZ?2@nPY(8co zm8k8h!ljbTpg&PIIGnr5*JpC$!CB)`LGT=T9a?Y^nDqEg52%qWl0v}{Rf1TlS;zD! z;A-nuArPI4Wqhz*Q_3fAv+~3y`+Y&Y)wnKG3ER8-vKQIFc?iCEeY z6<7Z%+Mh|xpz&|PU*l1cM;|oR$maJOo)0DUmIv z=E`nH_S+Humwvg^jJV4|$Wvtjoh0`emuyX!yQW^T&W^}Qt`r}Cv#HwJCkO6KYJl9X zh8MC$&z;jZk(G;qm>&D$$ih+P(NFLg>9ils60N@RLwX{ChhquGMov#wQU!9#?wPym zl(11$O8H{u4CI!P2J0)tH5d;OoU9|DSa%hg@L;BT9!ddhS@;tEVC2DNzb;MiT+ zXnrWqfMabr5&QO}5cu6S-_aCzD;|RrtKmEFMD_Hy2WJw}CJ!b(8w+=Kc6_NdBCi~4 z62WOYU+a3omw={TK>^CXlDQx>c%a=bz57-vt}pR$OyWNpJ&LEqSQXSqmn5aaT4GLg zf-@PC{s3Mam6zQdrqQ^2Ax)(5YSH(yQd8-xF97wKg_*R+-I@@m0E<$6CMq6`N^{abC6!pOU!6pQBofGoo2wR@{FyWfZr8=vzdJi8!{QQ^eCSm(862H9%Ji zwk@lid9x6kZEsvISuQdwf)L4`Ka?GEf>Yi>dFw&@mQ8a1!fDn8#jRdrHFW9Jb^|km z@ykNAA; zjVNify<&5~Rnol$=1N2V};(sJkGJu!^qD950#x)$O0DIQNgpi?>mB#XDe<|*7u zSCD=gYH{yiDB*xWDY~roZ!H6SZR?SFeCYUZiog9hfcg0#y&QEKd-ibaA1Iavd-jePOHo?WEn|vqw&3p^-`cnhX^I;$l>fKkjda+;p83b-D=14-(H(=Uvyqju z6H9`#U8rU3;o&)aja<(3gpBnwkM4PLj{Z{xOUYyb=1OLzT`W|HgpxJ*vGGKd8@nsVb= ziR5TN2NBrUC^)>;^}RHDkK^|`dN8UhIx^{Ov!9{hC} zM4EKH0Eiz$2`L?(=@fk>O;#)1u^ZRv85j#NaAa`gELXZU5Lt$ds8uDk6feG}I=@`g zB&XxZlPJOj`je){e>54l{ZCnuz>2E?B~a4Pgy`%Rhv*xU%ST7eJKY^2DBrk~!1E~8 zVg&f_xnLn>)9Xw30fkKs`%EX-Ob4NZr)3oYx_^F~gU;K*L&xwqPMSg;owakZV`46j z3Y1lDeo3M`IY;9&(q6rS@-Ca;_y^SfH+$JENUX9n~lp~H)l zKQ5>jnb4*@Vamw$<=wzmu2tR$2tFxbDW3^@`STF6*%Z}LK8*yM4TrpRxiQn#?o)gi zAwA@|aeSsTbR6;1Xajh3aQZ&PJ6=q1ZXFIV54L^;u};!a|D%y`yhF<%Mm={vS}Rhk z!ZDQl z5pW@P=xGW^O7JVR@jl`$m<8Es&r)38q#P}j#+fRXwc0%OIaP1SKiXPBs^ao!e0}xVVd+2Dmq@_oBQ7!4la1r%zJmf#16~K=lQw+1jliVc93dBwudUcqgu#=QQg80mQl_wwz|j;0A|{z{SIQt!J) znYzz1ugR+dtQOWenS8js&*vV2`#E3<;e_f#g|_lm_UHKu}BmyH0+D56Mys@a?s z3U(!NmwRf}v@fFwTl3O?zU{9~@I3Ymm2eP=-w|ncFA^59%=ZfTeNpUy(PmZ(rt`(T z28_z}dFq|=?bQ{JcX3IK_Oyhu*4!6zbbUF0L04;i1pZ#wP_@D=)C7LmJp8&@Sm4Rm zM4~21L&(N~rXi+aryHuq)B|C4RBXAa9t1_U>RPR8$+1NjZzj2llFdF6TvV4g8yn(r zH<}Ba`1Vhp#{PCP*yeo4{|~UA+%3MG@ygxq*lGZMO=*w&JNehQ8Fl-B9}w<+op;uE z0jK@b<~=dtKcjK+%3{MYqV%fEVq}(LBGNX>$uf(5c;Cr!AP4oe$z|CFS>gAV_ItxS zzCX|Y8aw=QD-eoYJ8jk6SH%MvGs9X2f!XQjA1{MsOZi&gO0=RpR;AsHx^1U8ObCsg z+eyzT)4nIRxyKbcX)<3lNiq{_C%X@PW4blj6q)0(pzPm~ zx6JS!|Bms_hl(3|aywuLnO_$eT+hO>pJ@v4e=(6k;o3^1^1ca*k6vWQ`gh0LmY++` z4@MKEeTD6~m9g)PM{JE`+*9zyX19bCP17A53}{7YXD=Rn8#mHuN$VofXsHbWBAN_u z=SWSZ#$+k)k7Qe;{gU6)O+FvH?R;}i6_!W6I<>j4I{$pXSn$3uFQ~b$xeyrzA3KkR z=|26Bh8aQl+cT7+efhG-H)riw;w2IGfXg%&@hJlAv~}pZUFycgJNU(Zs7=pb5brX) zQ(n1ZFY{&0K=ofVQGW!z6I=Qa*+bUp$w`MScHR)~&*0vq*I*EMox)ZS_^+e2=i*Aa z^O{(>*mY2Pnffdanyc-ci+Q_1{RN8kGqFAPHiDqT%GygZjqLx7avZhgftl(Xyq7Ff z_#3CGMp{zS$f={cm%EP4K5OXL?Xd4fH>bb9aFd0U_V?Py{M_y6xEgV-J2dfG7cOJD`*o_r2lf)7)9?3O zbp+SWK2K&w*d5r#a*8G31*#WECiI569)KjA#E%MhN=3OA{1Q`tyyX^RbU&rug6xjX2?KD@x0$QisoRDd6JRwBjh)};BWwzeH!fqX@S?54*?h!G-*1CqS40} z*6%AJ%d_n02n}{3n`1zL81_r8NJbv2Loi(H_LaP0UUu5Pp$Tao-kH)!W0{N-6 zwLMK?kG#h61lkc#J{E+e4Ly910}KP2i|mK&6atXO4bH;1fx zEdHagz73?x_Rk5dNsW?tsZrvCs;Vobh5?{_;Qhuv5%M@?<@z(oez{?xsliUg-wL3< z=hFF45MQ^r_cK}AC4KVc%@bP_PZ9`_?PCXjZibD9Un(IxN+bG5#U9JZe133Cjb%eQ zd*qk;v1}X~|7n)*sF5hmVtx&pj^V3&(`iR!rGv%{5&arZHDN00=49}jL;A_kGeP2- ztN(#XGUK{fiu7=t43W(l^4C@OR>v9YR1w~*4R`yGhH^)%JQWVPp<_Vyj|&Mo``me> z5_X+jlfU{KmIA;9}L2&f0~(@IPJ z73+bHQ=;SHhK|rAt0MD4vqJke>r_pT>-*N3 z<*L|)kvJo}H^-~d4ikB+zAXzn!0Cdh39VYUwqC&mR2r1HF-(uTa}qAE+^MMg8Y0>z zOx81=XiS12V*i1fyMDKblFv2I0k4ZS9ZVg)V@2@i^!{D>c!wumn+Bj}p=y80|2`*9 zzUU9AtqGDk|GzO{2gpxh7a0fa^8C~7`q`t$;a8sKKAt|nCBUyyb-qB`Cs+JFS9y&Q zx-{%5&2^Avg)F0=haft8N}10oI!^F%l$AyE>mz7FyDkH!LV zG;vnp+o|A}`AZw290%}WtD_3<4WN&XDYv?xXWn58--lQ_vkxR|mWPIiZJVAdz(mdp zbs%+%Cb|^mB8ko)FqP8iF)(wd3DKXQ(y%w^DoM8MABA6mVu{!k|HD*Qs8kK1z3GRx z1XXi#JpB_yUGQ}&W1#QT;`t2mtiwGf?UZObl5J!Hmg1B^PSzY1tydNBg}KUuZ40Nw z)bwnMP3%nvN7!R6!wmnp3PC4{MgEy?^1l|@vhn*hgDGF3BfQRn+zS0xHJJs%VrHSj zroBdO!FqNS$LYGst|1yh4E^hMow~2$OhM~4Sn2>+pGtC0fQ%$}l;S}zZV z2*)RUg$C2Vi#p{ldWzA zgTm>)GA;F7EF8N2?Sw|dtqkrOtQS9ah6`?~p81a^bo(~%e%aFQa<2E$>I4-T8n*FI z&hX-a&`JtEL|7Ft5vuO0-HHs(uaKu18|V(#1Sv7}?7cI>v;2;*reR8<4lUB8>uv@_ zr3-JkhOeZ*ZRuvs)L>*Fbdx#buRM$UaF%Ok7~i{Xw-B~HudQ1WK=x(c{ZPNQXtZfj)Ae+wzS8Zt;`8CCe9mKgKV6SWCth@Xn68gi2i{9y}IaTNKU3555P5nQifFrg92E!Xg4*^o9X9j z_SFY7D#J4Mgzvrb^YC~UWvyY#3_P<{T*y~jDX{E^1d@a_;t&>gm&%Hk9 z{7mhd`Sdu>=VNX0qPo*}Lf-PcpwfQ8WPHYJbG2N%skNksVpGjmKE1EY=S0m0^@`50 ze6fF?U7W>|G~!@(HRf)R57Py?*W*xO&B%9Jfs-i(*Yq_tn4YHuZWMKCx2_bKi%p<2 z6vkz-lw?rycLk;)E|sK0!);;LD$GQ&m3j3<>DVZroOxCbaEeAE42|Q|ucbixt_(;j zqP!P(!a}27MjRM9ExnFmxu=N_ThR=?exy?fnJ4=K88Cb$IZyt^l?FkYvl3{bIqY;>+rNW=o`Mm#>OMz#kKzigA~au&(^s z@v$`t=!49LLVG>ipGrQ>(~A#kQJWoPjn}(69OuClfyhaRdJHga)YQhfRH$6BYxP#V?Gy2a@c>9f#tj??5_C@+oM^`U$8 z*9Yv#N{4I7N?CYc3CPW_uSCx8PT!J3GJh1QP38Q^+uknO66&WW*Se4IG+f(NI#vX{ z`Kw3{EIG!#BJCI}6uuIfMUbB(q!-2!$6wED$5_=coFI znC2s7r081C-^YlLOC|mvCq&%@ZVyW(xxX+{d_xLq8}1dEcwaElHQE02pWniggJ_ni zV7C3K7}I@}La`pFn|n!DwhUxs)Jqgu+Ljlw-?0zoe1>Wy;bOOUZYD9BfO*$n{%{(4 zmvNsvyH3RWmB7mDOf%=q?+zb7L<2+QUg2?VWmve*GDVAYN>?Yjg5wk{Pow@$J09XX zo+UqREP+0!9VQQ^V*`Ql*I0O~a8cX8jc+?AAi&O;{(|a9*)9G=(ZCC5q%cAM_P+{Q zS35I|mOQ!t`b%#7TnFTQ-en)>R5j=8+EIpVm<VZYeL#<~Tp;QPx@cNwnk4DpCJTT=5AG`OB^l6c+&p&n^WY z8I~V5Z2df2GLJ?3UKSp}HA3hSJGhkO*C|h^O0lzPQ98P5VrQ>KmH>xO%sbUHAhGPV z_nsx3JXI4B){9-s`lWyBl}@Qfd-QPWs;>>cc)l-3nz^Q3th!bd5JYc#-cx)oEjw^4 z7`tO}Y8a;ZdL@S@n#N7bj3shyqr8rZfXc4+F9&YjwKI$URgO!FP1=@M{-ddZzR5JT zO3Mj5XSuG^z8s~}g-wV1m0@>4l{(~Jy#Kt1K7UZTjsP_>J@+%sif}E%%5^L@Vhw|3 zX5B%s`3Q=TkMf^a!fU+icm`N+KpeFTAr~!OaL$H6g3QTbqlLR(B=cCg{=UEeMbFX4 z$*=d&D8+8@j&KbRb_@@ix84u_Mp<2Hal;01TzBoH3GOAMuQ@GHa09M9l&66Ljb0I% z-rZW1yc}}Vgdw28Y&m-89Tof()x=UvHFZ@IsH{iM)yoj|TJ&nc;zPTiL>c)}swQbg zafNBbB8^9Q#62m6KM5pG?;Apb7%QZog#uAdP?-jsDn%_ z%`I%&`cy*fqQ#u@mAfbQn$B#$f0I*6-RZ>q@k~|OQo0oQpRI*p?W+Xfl(rp+-5ip7MI zJ$pztU(tLAT*Iz!pbA8~*aEkzB9_Y<OzprkTtHiNWyq1j zapXoS%BrGR^@>#9WxXFd+fF zl0vBl7)A~o`0MqroqEK_)61+rsz15A9dbHmVm;fO8jQ(v>9jk^H!OFkJ4);F znB}ocyBRZODtTdqtMi)uhK0-bBSbx-&q=K$&&VUoayFVfb#hp^bKm#`U|B=v^K3n& zxRyR*E0j(RY|;k^!YT>HJ7Vf`Wu;@h`{D-Ki|v&5+h4$vvLlV#<#ZnmvIRWk2rE}N zJ1ojdHdTZ5^>Nl&S&dHf(t>pxM%wb!J3neZk05N2Lh;J`iNZGSmvDsP)!-gjXXrW z5-W$u%dpvKdQysQ*eDA^IwL+3B0b@07ujqRB$N*vVlZPWg!BaM+fFd9pE=TzgX;fc z-AG%G6v2_rkrm8LUf1e)sc5y&7nhBH*PLq;pe^s59?Y_9eii1rV5j@188SV4vD{LL z(<$4j&TIS7r#9E@WNCZ+PCya6^@KyJ*F@zdkv8$cgRFE659dULfg{egZgH%WiwI1d z(^qnPwgA)^0u!;b+JYjpN9McmI8TOZR7hj{(s>4eG}zbn)(mOt?8DAAUC;*`+R;j# z$1wJc&t$`$J2e=@0?TnnAe!Lc_ebckhrj)Vt7ly@o)Sr3(IuM?&;ngxB<|cV`a)!w z95mT{=Edm4b2e0SCZ1Vl5yR*4tm_n8HVF-}|B-dPDqI;mOvSsCvPOUocjUZRSl;d)&^gz!aCh80>0xKEmaz1M%+F$0%+lsbJc zBAsn<(J({_7lY$aboh?ErO4(&(XqQ=??A^Y2Xf#9Hn_;{LAiu-u$+_Yj+* z9OjO-k#e?U(}uNkgQ>%0!3sq3PKTtH-5l{&)sITED$C^L_C}+{oUx|UGMvxt#s}bf zv2;5Oya64z{oMfv*ff`B!AQ~S^2e>*1DD& z3}A$Po>db_s-3PJ%(?jLD5tAmn{e8Z_KY-&HgYEM?_kCUG zIhmGk`)9*`@D5ag9s8#17j_KrkS>;4Y}BXcRZZF^y=<;((G{CEZY&=4PI!LPe3J3X zC}2(40tyjFRIFop;GsN#z$>h?E0Mp;KW8&#M0Fd0o9Pp-zka_QuUer+z8r9W`>_uOlto}<&Espuj3I`kww1&`~;92^KVA}=~YSy^TXRvahdSC zW{|OBv(GhCn}B!VeZ+9iEB@XVrTvEllGGCvA)oRCQdg450$P@}?;?y)#&a6FXPxX>$^+s8KM`ntQSJ; zk+KyXcVc*%hb%-cs!!(>`FKPCrQ{(o!-rMab=ogIXxhrF)9Lws*euT(E>fhmPon z+;>9u%B*9ZuYhimu#}rI0Lvn@55%}Zx^rPhW+7U=R)?&GuJGB|M~sIcQ%|H5qim;- zlX+(xAgrXu??5N-pk1R6kotw*1{|xE50mSA6c3$KueNp8=1A{jFPIP+WxtX2D|-_m z<9uoS#B$t5#(Kj)sr*l8_PtrsWBRjXz(22tP?CutoYLFw&KQblm@HBDhh7$-$f54$ zTuoP|l0J2;4QRdJG;iY9Z+qs8wz`*Z_|fqyO_oW8M!sJ3;45n|lv>1aivKaav4N-{ ztYo~^Sm;M(`it2QBFd&2<|agpX*-MMfw#$7d-0c=j=}$^MqYLjfKvfUB=71a9iDnm z5F_@c8!@pK8#{7y{a)@{Z|di%`YZ^uD8lJU^CX&PZ5I9NLW*q z1*WlcfO;cE`AC9RWEP-d8oC6-f%e958V~x|ndr@5AchL%aEUu`iV2fX;qxXzb|a%5lS(Sb3{ zN_VG!^#Y$BjR&Z&tMgHVo}=cK`VR9h7s4Sul>3Cu_xIFe()8}2+MZp>xdb<+?ewy# z!QAR&A}s8T{OjZ0tC;3x${t3(YM0TacZVQaO=`@}JL*fef3&skgj8mxNh3d2ZALRZ zDTqoUj!v3ae)KKhyqg(exu%`P#BwkhV2JRnXU%PCw=vMj!(avnQ|zb_8%^$R?K^3` z&$6;M%zS#xqF{ps4F-~_qYlES*GODk;xG_55)O<|%kpYS;-}u1d78`%Pi|;hm`7bbC>3aypJ ziN)SjSImLK)VHID-LDxRx_p~w{Zl)Z{c$XtVv1VMXJ@AHzE zrBJxjFT3eyIV;$e+Uwob+P>F9-u!-eUx1US0mrd-ff(gbq#y{H8H_c)FE9ip6!x_A zc6+M`XvRPZ6T>gl4D=co=k5swe!Nfmvnqa|u7(>;rbsOP1mjZYR@S@=;Udlv8yo#^ zBqTWO(yF|>nIo-laT;`pl3LdJ_8@b$rx}xR1cR>#xvpipn3m_&#F-v2{m;Y#nye+m zGt(vWp;!KY!}G=JD!rc(tv`6VyKOis+5QQ**b|$Jl`Z~Tt{uK8a}2Q{XXO6HUu0S9pTSvf9kQyml1{oZ+M4>r&zIep3>ZH*_%(TQrsA3saMDH zrA%6h%trqA;?=qEmqA@wQPfvlj6r5CO**ULyK@3mSGJzhp7jz_`xB?d(UhN@`w2`` zaP}}4lFk>At8MQQLDt0KahLqA2bphvP&Kj!-nn?X;xa@EAjn}qkMb=*?yAG_qVKqG z4KTz31d(4VjzJP3vCCb3K@5g+uTsTIud}3CWpF_l=BJI1y;>WVD^`6o4TP2ql*&o? z+?FwMoe+iM<m#W>{lKRCjEnonp!17UQ zz#3@o5BAgA#yEwS{Dk=8tK6FgFECy>dhPw|5xV(%F8PB%7$}^uhKIlPPh7g%hvcdo zHhMg{syJT~Qxrx`3gG>Sd^yViSLao0Bc)#>q|YDBuip6kdbx>@qsRXKdmjnNjLb0< zFSY1H@-WPjVuD+Uc4y!mm4Y&0y08eV8w;YQe#w`469<1eEjPS(ELfK-9nWe*XM4vg z_f8DzcH^b)13ar9r8|yxhUxQQ5A7Bs`X0v@%zCn!q7UT6%gIGE^&~s|W3AFTlIepa zD41sA-q1Uo^Z$mEpU1H?mk$CmMJ+kl`WEQB6>JcXJ=oHFr@(a?;Duf9E z@8*>vMSbxIacf>(fW$HZ-*xG_PNW=pKFhx*v;1gdH@WbD)T{IMHm z{b8e5h~V$>BPISz5KiD4id=IXSHF)JVvM!MqpWKuPW1F^g03Z3**wjX{N_7602=1K zkMOTimEVGJfMvR!`Qu|b9Y_2<$I1;E^BnXI21SnsM2<#mOLA=a!+1PDsE$276BJi5 zP!LoN8#7C6@e(+xH8~iTJ1kDW=J$P-`1g0us2V6H1(pL9U^$k+9$yueAmTjp${Xsk&Wa zxrc30PzhH!msJ8zC;>d%yp_x|`|Z1%{rVaQ)s=$0S6BL!k6HhKl24YHv7HUld(st% zv>C(6Fn;1y`^!&2L->x(&Z%WcNou%sA4AMj61v;gtrESWr;)kTP>Ju1Zi&dg-hM2* zu;{RC*R`SVY6{6i$i;t-CSDaSO~jh_nwH+`i~e>}h?v~^?yTZ6{32sRM5OoFdvL#~ zqropPQ`xN7h|bnL+Ql;0vsi7AEe)2fdlD41_?PZ6aB?M4W=-dG*g6STr%t3eF1`P# z?n|;;lh8O3xbN%B!aaaxdfxl*r`Uz-{b@AaRb6k^JJ|rTYCW|LI?(6lHgWf z_>GC44#CTKqWa+kFlC5SWsEXt#w}WSYcEbuO#W&B@LA92D(kV@C_)mC5qYG zEZeDEqf6wP^*Z#*$9@@wbNIhk5+zo1>%{gum#XW6vn%LD`jT%+KAA64!Q?%PjbD~ugh9Kmz*><#}w>cF* z1~H_1hk@PZEi!odC*&cFI>jq|4_@j?W&lbAdry<2L0;V;rXMzQXSIrWo4KaN{Q>7! z2J2~HAOyBQOvvr!+}anscpUKqQXBM!@(;;RXDseJ0~h62ghDpfrR#jA5A@axpATN! zL=mdC?8f|qE01AbE+!2G*OkPR#EX23)rLv_Z?W^!l9u~u0*VB&TxKIOA&k~WqXSl6 zJIb}Sg@%f>z4CG+@Wo?pb#b)aCn_1I!D(S^6Hj_2UD{g5F+AP9r#g9ipcK-Z{x+Iq zysf=t#-{R3x4-|gPy4QTlv;g08NBOx{B`z3`T$O~w5O zm*}BCJ$5O7m^J&}TSX3Hj#QpROMH0(f4a!tbH8N>+pEPDW?G`WFfdrLB@nc`JL(K( zEiYT>D28!2m`ipPdKhnJ2j29Uc7A>B{Tp7d2b|a;~AK2cU8Tk z7?+La9ZDF>xTT*MPc>;5se(55Oip{{N4oArtp`hP*2q3af|Fj(n`0==yQb^&snyT z-b8ITx5JKWPqi-#J2)bKAPHa$fLf|!=ru~LCv-+>Dk6F-jx`?0Hxa=p>JDWHJ6uC5 zPMQiK{X{t&(%T_RyftlmBMRM}#!zoxzcG{P;uNY5%H?AcVEWzi^a-On6lWIV&Tn=< zkl@>!AeMP={p+Vk(AgIF1kKn4nxG%Z-~EXtGj< zB50eRck?lXJsdBwOTD|e@NQX(^f45(J6|`SxUfCrB7KS_b(}KVhY1jh*XVX_ZA{ALH8~Rg-P%|BZMJ1|FE(WWSK~rS_kDk9O59z$j_PK(FBOv^gEO;^*2#MD(!+Xs?F0Pj>Cpyx zD7Uq|G{@$^%~wt$eQ=ncJHVMmY@hCQ?lvu=Y?LoP`Rhd5dApjeYzE6SmuqJ+^39gp z@|aLXN}^`(1a|B^=Eh~kM8J*^Fp0~{z6{It^&XbTEFP_}L#@tuITcTXa&%(0;_7$# z_z*B_;aAqm-IOP^Bc6d+aY^D+%g9TTR9bFk~-WhI6Rn1`q9Ol?k&)8*zrxcP!i zB1-o|NJ4tOl}|}Cc=m({R&;V*;?#tKB)@%U?$c>FNL^jOQ^pMIh;4?s?(TFa%LzrLMmRz-d1vD3)tru&FeXG5z~aYxzusF15KGj+QZi zb&*QHqc~EtK#J>os3kem6Rtfq4rU;kaQF+pS1`8R`5D@fi{qn1c#rCjlR>z4YVC2d zniH((x1z0EGJ3wN5Ni1_SkY4TdF)ce0L<(5WUTT>?blq{65!v;Az_2ez8L}sGyFb* zXYfFb|C#3!1~yCb9Fgb$F@aLZ0pk)Zk)Bd#f#Fh>V?|A<**HA#sABD0EjgEtuUol_ zNbg#vnLs*&xV8(fO@>*OfMQRi?`}T~dquKsjJW@e5WdcqGZU+>ob4<1@$vTa+)_V8;@ZvF9Zn0;b&H0s)q5+Q`H7j`!v5j22*Xhal2n&D;>zu@s zj!y%hm>@rjK8$%r3if^-iQG>j*^qdF$C(^<8sV3;neztaH-vAHGubHt1oS_ zv4@_&C#!>hdP5uTAAeXhAxXzqyDi%Kv&s+8PUg?*JH$c=pW5ydu)RJC6^CD;9csjp zY9E;Q{w*ATHIX4vVVKFkBPKuShqu66LHESLECv1_z^cl#K%kv7BIb){$jSMTGy{n$>zixIHtTLwR|_<2uSa#^L`|_y&81j6lRHmK9RtdA z^V|DXrv1teChE{C5Q{}p9=Ng3jrAdE@rk%ahKq_>;YpHgVxUjP@9|!B@kA>F39+P{ zAkX0kGX|3!ahdcL$!~gsa)MvJ@Vd*cqAtU~F~r1R>8#Ou3O51zR?moY9+qAd5cxa`gvgBcX>HhIoPMV784{{%^GT_L+z*;^>s zKGoJR(eFE`=}7_+A4af~jYvo${XHcgl2K2HV|B1+QC!=^otTbFDBI1RMox#`^*i~q zOsX$j6gn7WKPUFN5achvlxC~Tdk%aRd1jqpTF!o>=->;6Lq!J`s)_#iQN>wCC5w-a z)vUa0>S?4|w3uNf``(%`H9OQRv?O=jcJU$(k4#oKaK8{(*fnyh^az>Re+c{!znG#3 zdIoXXU@F4cD-B9!NfJ9*wfc>UEic&s&g@i~(R!Pz*H0>q{GUTgTRZwc22C4e6*pdZ zRdVs)u+(*^=b2t)#JbVwl1ch^SusxSW4 zsLL+6PEhLMW1EvhM1AK~Xod($@@o;5bD%GaT5|?h{LhRO7CC{C>9P_Un5fGlJ#s5; z)l!*A={WWn3Rj`z)M4)n;(kiwC#3Uz1}RL@ycSR8-o-xF*fR%n_dB^bL`%DRS_d<;Wfg6}nuX~wft5wfscd6nBYV1Bd1%(6du+3kb}ViEX};p$ z8cv(=C#-j!SnM#@E&cy8ze+bvovLIFl8}GqA?Ec*%WNafSZ*GOw&oG# zryLDPSo5B>od>Tn5fytpXBNu9K*IKNvY~vgmHOP8<}_(XqUVh1dtN#haCmur29UXd z1}?5?vKDVJlMF0Ktg6n9)N&F8+rdRl-Rr*)M!+0?vG?Xor=uM)z`b&%H_+5>fN$Ql zE`@;^+QPzY{}{b^GuOx%=GZzVpP{OV;`xb8v$UMasV6J8geSD0qQB}~PxpU30XVAd&{_xhRzUXa0YDyLkDO^t66h16M_A0315khUH-s^7D;E-YT z(M5*C9HYzP!&+)!o5Ic>Zyk?&zAsuKU-G5Ykp7~wp!h;#!2?Av&_uxW^61$#wocov z-A2LjUJSa`(_Tft>K42nz_0Bv{|?zxeTlVax02H<`#qz#$0*pAX3yb*P-7)h@A=6L zkbEu-phq&6Ksuibr$Ml^e+5vP6}`Wo3^De5{8*o%CaU2|;#MJdb|PrU)Q!XONM@1{ zlB7rWHc5B)`r?QfHMU9bQ!MzWsTv3!4ZC1Fm?tGLbx?(N$B8H54s{F3ZsUV9#szZ% z;8+wj*_>#q?$*JCdIUSXhA`t}UxBKQRNsDIx|_v}ha*a%B@hX9m>1-r`U$Bx8$Gk01$QQOWPY!#z)7+<=b5N|TH!rZJV}ceGX_}Y+ z>zw}{Z`tcyHj-2-GM@I?5LMINtDBd}DU+D-rK(s(7Z4mQoA^RoS3VML2ws~lHDQ{K z!~jfOM86BC&Khj^HlS@bT6JT0s!|8JprIJ|D5?fi&-CP);0mo9o%a7xIjhNb5_G`x z<5u^W*N_XQ83${zg!x#0Dqg=y7v(JhT5`C4Ohz(G{MZoJSHzMHx61tN^TqYZKmY*u z_|`wyBYG&k=GnkSUm{}a>y@oORKvHwdV}DPxNc>t=i#IMR4@KG2Cx~y5+%Lx9J)P)bTWQ;Sks-JO%PU*Z;Y! zqP$!?1zqN6+>WDOgZJ^Lw9CrUob0|&pu{JxQ#Ea+Pp+Y#g8A%Itsnv!5l(+Lnv=b96e6w4}nxwmlkmL2KJsWkTHQnxWI`M5OC9A;j~L_u5&070zU$@bmp;3vZ0o)}!y{$n*Q?bbA@U^H_F z{ZS<4W@W|a`i8h&1YHz=!Bm#(hd!UdZzn8H*M->=%h~ci|Ez!Jel^%BCuFNA<>Z0%OBT_Pl5AA|5+z^+`05Lp@Usq}Qb*N*Co;I5u*1K}&R z{9B7>0P<=w?J1InB;9WXyV4&F`mtOl0Yn z=A$KfEMGGMBC6NC1asjszses6iRQ8L1sQws|t1$Ex zZ+4y`HmFYAd{%6VcM=xyZTh2JERYV*+4@}>*FPkEcPFPKlVF6y^g!lWJZ@}iz#WTe*hZ@rV zI?f3Y28xI^G|G%{m;}h7An_f1#B3}dhu!>d6jK{()%G%dbK9i+=pB-y+QQL;6zsE! z6LCpDz1C@U$%^fuhL(avjHjj9+w3*INKoB+XRUe*rFJb@ST}Li6O2c3kkVGV-~9j> zq%+e3tut*<gzPE1FkFV#_ z5DRHf?LCiJ;x}l~m#j0AbTNuDNdV>r$BwMSe>CL=h#WJt8_Xl1+ONMVle(Yw=oScN zx{IjJB0^!>l^zpYrH1*q{S1ksymU>zLx^&F-_l=x>oEpLLvzhbC57UYMugbih3^qJkNz&LqNp>euHQp;tCT!P^1qjq z01QEXk_L*&_a-Tf23{r7iR!R`@U`K`+5~?kqP3dc5YFKECP04`?-auuvv;%QRH5NF zK9@@tohkWASZ0*BTNLL9L{b#C;ScU`&Z_~J!Iv1{8>EB6pr&UzE zrVvp#nF;zI6(Jt%RZ0r#Q3aEQ3b<+-l=zr(HdnBLnml%PiC8x_{0JRT>Iq!tBF?-{ zU$aUG3zcdH0KF@HR+a@1e@Slo6hd=uf zsrpJi^G43g;r+$`sLEd{gefsk#fr&4oFw=Y{|pfgtLW}%S4zBK-oj2=INgT0O~e?! z-;92-A8rm3U8@ihj^3X7Y*yl6&LPoK0HPU4#7?8_Xp|V--xh6~*ps*ajF&9BE0h@v zBk4O)eVPx5!f(S|@hhALphR`MuSkzwD+=5AUR`YLO`M$r2y3fb`nA7eS2Za5SWVtY zQdp13TxMc()@6=!M)E6uKXHk?t z^IpAIUlP?K7j?6J-dcK|`&D5Mm9BGI)Byb?Q&Gyz-3e~uB7-3%`tuvCSuv-)hqg?l zX#(_jCD&p3*h=vt#^rBEgKHAT1}}ye7OTycOM?Z$bzV%PTy2+9JAm;v3fa&aF{wpsqYf15{J#`1Q>O)*`qAN(q2GFt1tw|#v806$=6BTM7K`&{~m zFOlB@oI>4Su^EMyKX#X%mqZ)fw2IwiMF{CCd*pZR_+0|&?k-shXqgPX%#l==#3ws$ zS&`%cljv|u^GzDH(4ut)VkMJ_GG%>JPB5t^?ZMu!#2fc0EP$*>!ls6nXi1KsG z0LwP)5pGbKmhe-?)Thw#ONvm=lv$}_v!^6$p_dMe3~ESjdF=`kRFV6a0Uv1P|ZIwxqT z5=XgtmA59>eg4cIU}WO`~%Y_yH`jlTy6CC}rPYI>Qd#z)n9;c)Io=Et{CS-?R* zLN4s-WmTIE2)GnShDe@%Tvdz_oZ+9M-;DFY{0@?Gf!qnR1$xz(wmXE)4d?fDsc~#$ zjmZ)BGhyLwQxY9ZpJszUymW&n`fl{k6l-VZ+w0h3=FAgedOuIn8(XiJw=DQg_c+Ps ziA6g?w5tG~Z3=I`!oHZ1F+{q%@U&zvtKs+P2PAY@4d<9z>^V=}wZapoN6e3@u#Kr| z#`D;jjfLraCM8##_I~wPrmY(0>yYx$6r53a_+stRLGw!i7Oc)+ZUa@aQgX42?d9);UGiI};HO2r4+Ii` zh=5VtpC=Vp^&k#peG)Ye9to;x><@mq1?;GjPvEguwn6c2uuw0!OK=dBXQbf0hw6d@J+?v{28IpX z1e)2zfvc}?=qntK|I}!(Nj`7)Ogk@&wiNQcT;CAO2rimRGguyw^yRTKxsyHmO(u@ODGj!$MXaWwVbls|dm(^+;7iI27${*gg zey7U#ERy;Oli$%w&&nKf^<)On4hfN2e(jM>!;2xF6s610nvwu}$ryj>*ON5^aJH`7 z{WeGVVU=vX3t!FKZZAuaFnI9I{Ksr+2NLQ^0WYkz{8T|ZYYUFo7bW3TUAr(qbS99W zFUz33-=zUt4cE5GKK+l1xG~lJBo#M0>)xGZYY0Fwwt+tgx*y3x@2DSDCZoi!Gr?xu zBpaS{C+(l>6q|E%;xxQl^Cq#tE4m-g3VqJTwe)q|e|O|z<&AWsvpNSuI5||U2>FO~ zr+d!Z3(sr6^%{$QgLNimxNYmSAc~EhzFEhQ7!nJ(SRG@9WQ{dFt&HV!PKUMUB;1MD zfBN!|t^pWS4dTJ)d(Ok^ISu8!?~B`dHVX9pd6>HAWqV>01oa0$(W;BDS;fHBy}lr% zu`)dq(Cih~4qgZ%N1h80XFvqmXbQKctkVyARY?J;WSgtx3So<_K=C=+?D@baJMpc) zRSOn*nX5@EHTQ)tZSh-gU>esI)(Eg*ItF>JB{AHD#YkqB{9Y{*nND+*u=Dz)DEzQ{I z=JnXM^hjA%7k-YvHDGU5cjZ1U+&U?laHMuAYyjsb8P^+!P!^2F>V7L+N*$e<)x4R`bpnhuM0g-2AekisvBA|+wSglrOAl97d*k2b(3G+&0y05 zmvn0*FJ&bAkrZz3J?((XKb${O5tb9 z_bczuhLWhX3C~V3w@B@QsM`T6QOJ6h+tdB4Gl@<>MBUQWjO}n$x>se!prg6-oeYyL zg0GkTDI#_S@jz4{e*NYH)@2fKC}fD;-{Rc+@8Ru2D6)7UHzqAy!qwpaFpd(_CJ zogUZ-Tuv1i1+mM8b&EK}vu^N;lbSc7sh{i-FiS9fm`-gAp*=h1piSYjo@lj3>!^1H zg$2<^uo+WO^zDmY^0tkMZCfq)I(EosL4(`qIBb@Py7DhwvrAc z4kgejJ0nNaaJn5h{Z#SfEyALm{e7m#>b|N595#%Z_fvZtI3Ty6(E#F^rG~;BmCrfJ z#!Y-Tw;r^baNHTWLQ6I$#GTpz6#iIs7dZO2Z5FziY)kY?eeIuYTHnr(bBn{%(>+BQ zk^D+vlJdlz#LvZbjUh2hNyz{`!`m~b3@T)-ss_tVRh{U9({De2?%o~pild9JRVUh) zJ?iM*y5E2%kRUE}r2XmBjJdthoaLH5J?KMPlwxL09I9qAtBk_fMhlz87>Jh|=Apzr z&q9liL0!w5gEi#r1UY-O=+EClbA3Q`Q(pXJ%Q z7e|a0$mbegX8f;%9`kF^l){e)!U4RzlOFBIMmWA`3LRl9!8QJqfV`Ea=41ztmaL|w z9k^ciF}1=`+}r>u$OxV}vv8`Z;b+7&DYbjA^k6-XEI7J*@ua>Ud6*I#ScbnZmLW4M=3jW*dPE7J5!Mw=nw!{a1Q@~W&qs06{V2{b znYcBEs4!7NI(B>>#;YD@-PD}gdkSEv{fG5>khj!n6&(1%V^u(iDLAI?d2e7&t)tGX zqm?JwSzv+t%pVDjiBg*Pz-vIt7V%}lB-@k-PC6-DVxhH4SFm6eeXKQ-|U7oarQF*ze{<0GBjE;i3syBS0Te;%GY}U2nYs_++(Y?@nolYXKI8lOCkz2eS;+l#L{RqdL&|Q>1sIRT9e;qu-&OE@WTbTCZ1@-1pUtz(o zS0$fE%`8}$jkV3c{QZ)jxi4NR(fH(?dyqNHz%dU!s`?6TVx9)eO{-TJneaCHsH5P& zl+!+6{Wp_76JR0q9MU6n{VHkN;KZO)*II&W^Nd%2tZri|*@5Ku#WUw40ezaJWQ&UT zdN3yGRzK}DfpPs+Q4ul2nDmhsw9iQ=|3ps4S?|-SOH|aGl%_r~brfW)QEC6833=rteBmxQ_4tK!M_ zJlyJNkbC^+lafvR<}~YwLQ&yOT?1Xox{Viy7^}E27*>Tx!qV=;W?Eqq=B;T-+0!0% zN%>EOv`CxvOqRtwjIc=goYHV;=nR=9^mKr)uCKNtVgz)9>`G_>y`fws78j@Xy~iK2 z!5ld!BQ!iItdpxKQ-V^=iN-(UYi45+>8z(fhV&8N8p@?%zQ)^F)`i}A4^uSKOeXZ{#yxFpY^{r29dN~k3cu5XhX>tF(L+Fn zCB`_IWShWnBHQLN%#D;8EYJSR2rg@cW1wz+ILiF^p3S}L#^;-g_c`=kmzsn7KxV>3 z$lj0;&gVjqNr~s>q@`4#x1@=Yc!L9SzT4W zD&V%zLp)M^XCkXjQ29QtZnV0j{}oup5bDgJ#oU_zi0$|7N9?GzdsmhpO?)KGBu{c} zj36o-#*zEVf0t}*K+De>a%>Mn1tQ!Q9}{`@4kT9kzn-31rq2%YeLrUeCZ-LcHWmW0 z);t17HjzKL#6~J^JWDvX<4Z#E94GRCo-`0Ku_blmdlJXHra^>$a2B{`)=seaTbjPY zu5KFSfk;nUTE(8hy|nM)@G?^3>766tg0oYPZ#4~(9Ntnwskqdb_sg|Te}6^ipR zzJ5h@_v-8rA>xkvSUQ$4ZIq1GHJCbYza?m4Fq*kJT03UD`?zOVj^XYRhk1%x zd@Y%)s(3G=F}`Q~bPy%2#9vPR^UHc(PJ7k+zk^5*zSO6yC`JUWD>X_DSA4Y2r$wFe zu2e1L3i;ntdEA8#`PD6p0}97bBQ+C(u2%-w8u{}vYUl~@QZmo)A)QC(GDrDnDjt|2 zE`$>z?%TWzzfw>1SKi`g=wG(}kILzAuKKMjfvw)dC+ZX!iL>tipdO=69!$ojM6FOi zXec!2u?nsjhzCOTK2pn-<8b<9#;pd*%ie6{KzLA&}YhnaW}o~YC_cq(c!}SuBV&+<{{JA{k9%r<#a8y0?!9$&| z@(sgW`eijY0$ktD#fe3B7DIlfboBW5cdpG${()qGYN_{f30PcQABG;WhE+xNgeJQf z))H^AO)uXkCWVZon46AaB+$@3JDr9Cn}6k0-VEP+3Q|4BhdXSRm& z_ft&zsB8h>;KNQ!+)wsN*}tYSHorDY)$lJiI5U~c%_`b|>(UMys;cRzHJ))R<@@l4 zz9~(@zYIE!)l`1_6b;GB@QRC3^^KM^%oMq(7dAx?Awy1IIx=|xPHPxAh-{{up8tGZ3-EO0Q zU2UU-)!^Aes8r&gj&_Zp(7D#2DTXiU@2LF_`;SKd?hZ>n?cskNos6zEz8=F}K3$zL+O zA<{9M(_}b#PMCVR$$wcBzZe*=*eggmo6$Y=#=y-I^wDqK59?Vrp`j_-E*! zUioQRL|o6jVp@yCqE>O%(u#R|gSBK;;eh_)SEIaOPx_w7_6NJCpD#b|arYuG9))oy zJTm+MVES>n+gERiN9=+prPih2=Utc3U-!L2=40>vxXH(^F2yI=zs5hrnNfx#WR{hE z%WQs;ac^&8tiQ0;s~m!R6%1hBc@>J4$1^8gX$ExqEDg}ZUOb1GaA}tzkmuJg`V_9E zed{fNAT$3mT}=AJuK_mHgPxx^HfiqpCK$|Zs@z?kJLXF+xaS|vjP=nkW*I7XDC3s@ zC_6t(L&F!Ky{!E76`k(#R#yZFs2V5`Z?Ak;T)slA?@V!@P&d*zE#`}sXJ8{G%`eDW z_j4BkI;v)yjLeVGfhBl@YXaBQvNhl1c|yCFm5JBp53*PJ<_mj>1J?k5D^T;YCvB8I zmRHb}FE`JZ0KSO(x#oSK+S|jW0bakyy>?y0SC~E09l+d-I)XhDia(w= z>SYDzlb)rBoXJ-%iU6IX+BCo8PV8X}>^T8eAQG$8p2}?PabWpx?K>}z1L+@&slL&% z2~$BjbWTN3!Kd&2mhUtXDQTa8m;K#1BY1mVOTQyx>~lB^6@jy0{oR z*)y*_ud-E85uSSKa#<$bP~W-tkhu9%^HF-QrtD=t`99wxKjBk!pMh|)Pkv9gKINW% zZ=l;pX%3gkug_&AENFdAq$)!`gebV7#5U>;znwytb`}D6>U9z79R)lWwuDN{;%qT= zY`IwuRIs9udSu4vcm7#J{^T1PuG*}-`+Xq=?IT*pTS*B$lT}GhpR~0E-rDg~DMmb^ z5=b9#mU;D01KlfRx8Q}N{nr$RIb`?z{pajIiO79(f|2nodDp&r40nb{!#lWIC-Sr#PqmVBRG zy()HH;7I(0SAuY;iNDnuCDWvWbFvZwCPNOX)^DBp?>d)G=ArKnX7QGl-Yk`lU^h8e zavPPS(PNJ(cn~0SFjY2KR{v5SB9Xx}p9$+-(XD7*^0ck%n3BXG;&~P}gBF^IX+AmI@`v1r3EcpgG14?g&{b%jqTAWv^Fzd?^$%_7-Ay6g zs|P>OH=1FPIdq>|_Jz^u3}9c;JSUl-T9X_KZyWs3BkHBJnXDyw$reQi+)vT^E!pYD zBjs27^b&}}!gy>5KY#spymk4JERgic*A!23$E!vEmU&!#rREhiuc8f3n0M840--5{ zU3E1OG{zBaCRLa=>Rc#YoSx#Dg6x7^zXJwT-(EbC&6ZoX_*N+}sX16FbiV7hbUIbL z%MeGAh1~VPgv!&vN^QWW4!U!9KSZ@T>w8NMMdInA2P}L?SxVIf7w^3z(_KJF)TeR8 zpgz!TQaQGh7TlK_$9t7<8uOJbMp*v1HX7&1TTck;<=C7qB*vwZ&2g#mEh#bZDn#FS zH-rJ0V&AU6P-{1v>CUl*jaxr1fpJcM4hY`kMD9(kN-AtxkPa_iIrjTC?nBx8Q)x(s zYEich-&%bK)Z6kj%+DnTHU>*%NKdG)LrIX+P!jW+7ypx){d&InsJ;+Ij1#PMdnSVa zvJMFy6*?F^xGx~55f`U!g!^#M=4qP6YRq@#?&mR=D0$q^AeL9|=heN+KOGFF3&Hds z){e>!=_H=HsCBCo^Htwk7GLKiZX}cjm!t)19MFyu7ioHCc?AYv&FKpBM4i^l_{$kG zuxn@J-8Y^-H7isOHMIYas-4JF{d5^05cNE9mwyH@Zo`Gea^nVnc^+S{I z-^Ec>6hx#OR6rV(?pd^efOLsSjL|t@Y%1N-N+U55Mt4nG;Uh?GGIAS;^rpmwvF~#~ zf5Cpac3t=Tyw5o=KPM2rG(}c9E!+iY)ns*9{#`ngF*KD3XQtHRnfb@y^w>i*8^z6~ zxg9-ogyMeIGOx6_=+JqmyS=k{F67_7kNlpTFEaku+hmJ7Au=#{v*Nc4a0??<)4Bd!e~wC8X( z@hllIcES|r7EZQzbj-Mi9AD$_&SAac82A^j=Ejgo+ULIzk4mjMPm8a36iY6dw5*MZ zt@%-58k`o{Qfy?N!{I40R#4w!}L=Cd>gDk?dbu#1G{s&3uDf2^N~pf zltsvvX|CFAoSj}!u387Dy3X?ouZ9^!T6b}O+FI1a#6Qs#lVq2+ZA&@*-0Cgsj>zwa zm2%fu7r`?|Ut&%!j9%cRVriqoZQQ#Dc(XSFu*a0rvj3&r*c2AKk^0=Rp zgzut0u7n_Xjuw=GLk;ybpRQ};@3SA>8E|2q{Zhin=R03%V{J}}@J+qn3I~?ChG@ao zOF)fjpUs2ZM*}F?UvGkj``K293-oI6TZ__f%Pp;BOWwRz`^rg)I%A}u?OcAI9S6mj zWtjX31u?;70I$tZ2AjiH!Ic<5j-!m>r6x!nqbk@FuG8nLQ=cCa{I6`k+h$ub5gYC> zlxZ=T9Lc~0z@_r|;uV6+_mGk^@wrx-cdHL!*)xuxj~zxLMAkcZF4*u|GU?ic)W}6P zoOpW&nHIElt<^WkIfe90qimcQ_PWmGmZg9IFwDZAja&2%4ojg z2`s%^qu*7T-ue0SMjE3}!5=bQ!3(Ec>94$*M16dw0{_u19D8_XOM2BeN7emAm2aOp z{H}BPu0z@*8UZuDA_kU|yOYLb(^JYvS$P^mIAFby(ZkgceRE7pBL0%VHq6p0T9pEw9X}?r#aZ<`X#2Fs8q(e#1)jmJ2$NOgso=6LAz4y*qLK?I)Xk+S!Qw|R zK)bb=aQM-N(g^)e6=#h?ngzNcz_+ho!pweslS_Olnl>F8A4qj{6F5zU^KO>u6opex zj#aW|9|36!FZuX9%(SfoRq^~Y{5}wwi|dv2_jN6!>g7MA;L9I^{dsKn_C#7Km1GBf zHW{OLxlg``oM zY;jLbA~P%Es|>L<_O+=Zrm-)pH&s@pj8uF23rkfsEYkFiRCE5#D}8M9|Df;J5v}Ub z5%R5#`JvJd)4Ab5rqUVz1je$c8~0GOhg+~Xe}aMkq4pIu%3FuCG<^%m&Zgq>>Pkv& zl8ac0ou~CnO<#+!J1n^(&!2HVdb6c*GRkae$&Imxe{l7$Ty|Jm$U)or`HQ~&bvLef zpdo>H-nf9@UpE$v?Skny*SKCA`K@@l;fF!&9jG>kfHPpAzE z=C}sQxI3CM$mQL({)NdzK9EBe+pbS>tvp;KjjQ(UJv zFncFm9W;yNBsJ`Q`A2CY-xK`8B+O6kU1y;k@wEVw(&)3&p-?*@C zhJ>A-Ca=LZS(@%lCqL#l*uFaPif+kM&|rOy%KLeB3gxYetJ=x$nUfRk%1lYC?HkKy zyb(5ZDM|$B&}Zem|0nRTfNbW>_ay;(P{!9gQkLDh>JhJ9cE zYib^teOsO1_6Zl`y?x)YcXCR0$NE7SwLdr~kWB4G&%?5fO zcY#iiIrv6O#+u(Uok)iT-J}}7-hxn*kghQx$*sZwQS{Q+3^$lk70*^)nHSa-J8YErf#bi^-fqZwin(&G|8 zdu8dt=(Q6fC~50xYOCN~IsF_WTzzK|Nk{)PAh@XJ>*xA${iUy)*{M-$B_9O-PO9M) zQ{MF$JSv+Ic*l_iy;PK{5?S<)pWI*s1o2Ur{RzxD+s+2%FUmgEGRO~;-h8IgYTeWG zZ?UTFZ}Hs)Ihq(Hep}aC!=$)8Dd5UtertP&KHYkJy1FOhut59L&2P?)9drWs)CD{l zuc{4z?thzNcz54fxtdZs2sr;rhnWDUU+K^($0J{b6_xq6G>zeLxAe!i-iQ~A6;3em z<~(Y?##YDE_*+7h2KF<3nexe6A}PdE zD!bSFrPrWud;XAQjjvyx;js>`lz|-P#%OgsA6qHrrEFHVs~WB4SLPo0d5B=7FFBig+FcslTFg2g znpPMaI>Gj)mH)PKBcB*Z@tmG{3>t` z*wZg-v^h|#naJvxT-V_`otenaC}g`!v@`hnK5CEOCT!lO0p1NNE;O#r_$8u-sDmc< z$(l;49BzaJd^_qtUD?J-?6?sd7E!P%oaHl9D+JyNK2c9O5*CEP%d&U=yr#QE9rJgz znSu*artm2@{jCO}z3>YaTVuv~Do9MO9181+a z_@PkM?Va(2$!kQ2@q0l*dbMPSh>s!3CjCCID!OC%MQVKN`3wGNJtkr0$^Nec1cVDc zY^gnRC5o5RhkN@2;v63hj*`mNpPSCj+db;5TWzgk_@QQ#*5oWiPIntt)9PV(Pv}P_ z4VcF(&#jm3%poPQ$rTb4#WS%r+Li$|($X!1%2TOmmQdkXxCX_y;i+rUo zTogN_>yOt~Sxy_-nVOly^0XAW3*k8pi5G@^2`X><*z8s3&PweFbkl%KNqY>}&dP|&aEHR67j@@!gm|MeP`SlK9zH~)9}X%i+*s`DzwN@}J-LltR0 zkFq!_?Mq5?w$mBKK`Bzvk^i=s(jprR-j zNi>jMX;x!|&qF_y(Y~|KhPXNeahS-}Q6zzxlwN<;@?CqwM7Mi^y(96`1BI*$mu{Ge z*BrSdt;qeLN)m^_a)TRwxA*f>WRc5WD&1klbtbh__1?6*KSGvuWL0fCTW9uh zo6qO#+}!)S;&Ey}zl*?sOaBX^ns&@yAJYdWVmF2b>L}>9%Ox$1&o8Y#9x75u-M&|c zebUlx7%P44&v)pha=fbe7#kGQs>JWsmz(MGv_<*X+AGgdJr(1wTS1Lb;kqN=bae+6 zayP15EF4ymq40G1xD|0T&c|m4JG2{3)6{5R6j+FJ<`BXZ_1mASO85@IJVR?9hvG~3 z3Yl6Pd*Y32&rHOhtJr6uDx3^C^6we&W*7C7GKQm#0jRag8`m=sR7jq~foed$Qd0v{ zz}y#4XqA<-(=t7dJaobJ>&SEzAaP1lt!-mT2i07seY3J3rCY66zSlu}DYI*LyNJ<3 zg2s9&!!8VM8SLPDhJgZn)tN%bwX<{6QISAb$#m(R2jsni@qjx8%25$|^WK!&k)&F) zGeN4Np^TPs?Q+A28K2&<$N%UodN9Xjl(P1_#$)|?f83j)d-cAl9Ts(ZD?f)>a(UFF zxb5qzb6h0}cW{oAGda#XANpht;U^BrsH53h#^>cGD*{Pp1&x{KI!4lmLl5%@+bBow{6*g(RLl{HP>?v<=% zDRZ&@eJ^;Fj&|pp?0HMBrtkZ;;_k&ArG}Z6u-OT>9q)eo;1;9lNSy-N5}ZqIWUWtt zOS4Jg1W9=4bzp}h`IE@?Aco{4h5P@bi;gUEE7K~qKTkNUqs^m9&&F?Z}b%wz1Xo&C+`+Wciv-o&%(QnSbe=72+c5p^|H$^=>yd zj0m0*X}m?BnSM_o|1_@ssYZPH4HbMvZ};Ob+Kfgl0#T%UdN&ZI2#Tc5SVIO}=)7Jl zcny682B*xD8osPD!*9Si=K)qTRhWDw2H$y7wbq+Svd zOmZ%5wq3OMU<%11glDhMpO*p4s&X0!U|-^8J#$_VMMS`?NC|5V!&k4Yu#`%}c(M!w zQ+4F$s8z-n?}4ftwZuNS1weh=H9EtuKj9!=GxCO^P{KWss;U#4w!>M0q2%V?D+={& z-8H<^1+kU5g(2S;^>g(ezjjH)jiWZe4`PDc{cU9Ose@Pf?y6kxOmbxCN!@YOjSTLM zEXsXO3lnLF>9L!*sdHpYiz!C?)I3M#iD7+BO z^7VUB5Kjs9#shM3@bRKzAqr0FZyy&PBesPd!Hod!f-BhKy zpAg&uxn4T##6n}bd}i_K;b-`iOY=#J!Foq5O^a$wN^SAIm6t5c0lSBFO)8~W8+Yg~ z#|NikQ9uEZoqQszuaLxfyq4+s757dG;!GbVMSdWjS{UWR4i;i4{^A&?pUH#g7GV(Z zk8i;-cSF6Ceiv3*-<#Rqlb9;)Hd$G2sKIn*-$l7wa_Vli+1_3L7jjZAiuoU1%pZ^m z|MB(nIH&*G(ai}%2C4#p0D$ zlV}ro7l7@=!Uc^QrLkeOn2GXC&}40S6YT9qEKC)pEBL)P{8Xi(db_~=s1+LtukZ}+ z$877xhnNajGpPyokyv5&yJ*r{@gd^fTQt%nq0l;;1!kEjV_y6b~P)-^sE%>p-IzS!6#aNM5 za#<2urxHr;0R2XgaCZWl5t<(DJ>}FvI-~d78n2%{}V(|w=WU7*vR;xLmUfv30;h;6?QD$tqgfAgk;^Q>|uS5f;K5#h_f?Hgy0Bowt{vG%4_Q7`?t4dx5XBplqpx&9Y8SdU`#L{lTz~nnwgAeOr zU`hkx`sr1w2Q-K6c z)Wf8y|LiJ7OUkmRu=+B!oRRNqMwi;HyW2DNj1k%vi+VFU_O{zv*yj#mhN?WMkOkaX zXc%^0cm^BWd!IDOq}Bjq$D74tjvpDmFkWS#Kn61Hl6+TvNL83P!wz z{#VZfE*$Pa&T6fmca%Uv=r7y~z9?~N?NY*vFOzh1sW+;Q{4tW)71?Np_Rn!%4I>Jq>Qt94h_be|w59oy5r zvZbvuS1$*`e3SVwiI+)V5NWW{j!I=8bNuz8vvWPtGfsW&NHiOJByf0Z+RF7U#|{0z zQ)RUGLQA|)V#B^|2mZWKmhpG@p_;(#+diVd!;Y_}wx-Y7qKRs*@v=mFp>e^??Aq_y z7H`b5_sSm2y$XSM7Y=cB3?(Ifr}qT|N9^00*uM*S>urgpD~rBMo>3?hztDK$rQtK^ zCa%nmK73$Po8j@+BEUxfP;kzUPpl6ziU*S=MichEdX{Rs$_kc=ewZL(8Bs&6YOL6$^sPsw&C5e;VR{Mrgv zlLH*Qoi!2hkuGU%%tlPJ!Q8#>|FaOBY_k^_#2BCZNhO))eH=-EI& zH+dbvcPnMYx6?S^$fLAW@x_r&QBGv}cvP>Y5Rwp2)-5Ts894s2JXA4M1&w4@H1F(e z#8l@yJzX4f`(2>An?V8%_N(b={eXcQ7AF`I{b5d(P!$&rh$T#!giZGMlau!#vn2Fh zpG^}nK^yN(Ozi1!0ThC?s8F$A3DsNqVE;gthh&B|n?WGmg&V2wBD!3YYpJzcV7}jg z3N=AIE_^nP0pE4vcJgQOF0duvNNzC+*r|dfm^Y?6IgJT02`CzfJ<_BXk1%gaazZqe4@3r zwMu|4#N89@zZUJs@1SXH%cUlZLgAkzGeIj1KE^9QdGeqP7E0n}^M3=R>0>kZT_{$< zH$*qJ6eu9wfq}8dZ-+FY>J6o2`#2-@yN``I?FhA_ty|cJZ#+@n?}jYW?2D2*$4U$* zGJT_*e#4x>iRDTEk!_2(cwdm(0y(!`@AXg5owf^A`FTI@t1$dF9b^6r!Jf99moP0P zLWXw`z;*}wPs0Xq26eIp1~O{{Vgd1bSswKCumceoTJl*~=?Aoz@HI-|$SRZa>>8v? zR!0na7f4n%kqVy~^0b$dE%DY35Mn942|pWS;j)`vhF%ZdUf$62o;PojZLCkczPwap z&fNR4N%!|?jG^6Bt@hY@`vl|74cf|EVtK6PCO9TN%JNcAgO92zwJ}b9|J0f-NAmd~ zK>|}}D%jFQN3A%ShHEs}FxCg<;3Xy%g2G|Fs8FCI|8P6=?02Vr!cealIQzF@(}i{wdHfaa?((Lr(8&a3&%D$_i^J-FO9pIzG9g2Pu?egzP7jD91?I4 zNw#C&*jUOt=Hkk?!9H{N_6I@b7&;zKIDSkKuYrzhE1HvqkRrb|R1>r~KYFun*<*)Y zgeb&el@&G$VvV2K+V+=;+@d`O+1ZT^WxurNTDFBfnYcWT`vwlAE<&+J6d+lAg#W;HXahE5{HdSW&ha>T@{z8G4<7T(c9QBak)u$ z*ZNp7WL~uwDCx93qNm#4@XdF*r-~C&DrQfcFXia{`2~jaiLN`t|WCq#0!&zcWY04?P?HGh_0oAlJ_5Uh2z2bCAnmv6t+ z2=e2^3*2RwooM{$%Q#Q^N%i$KX3d`@7oHu2vui#uV`L_ij6J5NVr7_^CAU{^G5ahf>e$+xE%l1lO8;AxmG(4-OV4wEM^`>_V&rxN;k zNTz8(%#M4QCCT|tGc&t)yAbO%tY%k5L#O_El=#;j51yhcX8Df` zstkZSILo4{3DY9CgSlE&NyA4)?&_0%CY9?4qKI3b>XY)?lZrAYg4ea~cU4REtFjA- zF+v>`Q1>W4QUMKr*qUKFqZGyS^B)$Mh8a$Bw$3|wJ}+0@ z+gkvstxcNxbNfsQc4@|w5y?1>Ti~BN-`T_N$~X-P6%NS4i64m^`ip&@VBp_ z4EB@+y!=AA6&alrYS+(?PJnYeQmR^`gU$vtrbbLujoW7HePD*;&gvkbsS4N1RKF4BMDyMO2z9~C7D`*(xu`{`+x%JJc@WhQr zbP=t5rcei%M)T(jD!wPz5rx5$y1`wBXUY)K3XTR}2mg=Z2qTySB_Bn7PKK8gzT5Ig zgV0OM+wXe}qK=2^?0KDJ6-_{{_+Pxx0oL zJ5Hr6Kq8|23C2ASKY6*(>9A~tKeL0L94C?IKjW_y;=T5-!{&mx)q+pJlx%ogz!Sd z2{9&*jjTvhY6w3n5rewG%MN))W=W!nh$laRL=a2_fiuQn$Wahl8dv876=WIF5KmQN z<_D7U^S;UrEYN(TMy!(H%TcSmDa)BqekkC7L9JWHaF7f#T4{eIRYw#mKmA7cl(vmG zL#K|TGes_?Or;E6SG~wTXn(P2|FVJGJM#f+Yxhv8Vb#BAqI}#R_!ye6oFrFzq2v4m zO$VB9JrBQT`mDN`lt7?WV&pc&R+AiT4-u}0mSh* z0Hb1ckHyih$1jz2OW}ZEu%^`02uC|`+@#p^5(~;QG7ZGJMw791bbibpBrTQyh z9wIIIOwGuY=4UiMMef=2IDxA`_Sd1{9;6h;Z<%|#{qY;KA%$M|}XIsY}GHINH;79jj1;r<*ihCrjGiQEVvs7k`gv%nPR%gMqS{d~~v zO~;vDe@{qcHdSdxOSbGM_}x}U%{PA;`>KrCU4RYaxHu(nq8g-o(^9~k`YSvqa8g?E zF=uQXqs6c%udGbumzNbrETUgFLy?J=R!Ck`D}|b&9gghm8jDcL0i`Uh-nYoBuARu# zK-=!-njANn_UJ~J;(uUJopG|%hSk;&=ka^bw;sj2B^5OS#i~tJJnH@K$VJ5U&705` zBGr8D0h(m?T`FKG^}A|pzap;7gU-)`TfXz1gI0$T)w3;;AF9xsSn*Z-^&@$oHBW(4 z;xFx~RUIbEBAG$IpYkRul;nJ1nLSo|f#u7ghFqV_v@Kn~T0C|*FlV|=zC$#CvQWYI zT;a=Z_mj(^kB{?MsRN{`0WKj~^2ys?&YC4>TO0*&T|67lOGVl#pfh92EM6xgYOU~``w1nR)bm`i zSRa3odWW0O$0THS zf@xA{b@`{C)d>W({vky4E5JU-rPz|9StA=8uTB*g;?s>)H(8V0D=WEX!ahiX768Vt z__zw__Wszw>2;a}S$U+1G_qtboPhF^-SZ1I#+3Xu2=9m|Y+qfLCFT)BUe`U5RyZbG zKgaXDqssv;>)vPZ8<%_`MfxAU8!Cg{@|b%ErJ z(2*Ix2bEHf^U*e9D{+k-^iY%3GKv*(j({t_yvIH==$M{<2O41$yGs<4uCOG?4^Q2s z>d%D+2jr~?lG-Z>d&Xm2!Yr*<@>s4yqa5c$`owj6x@KiuD!*5IVXO&uSH6-1d~dfK z*L>8evMI?9W}&_xNh`%XuICT*zX6p#j-sCa$NcL^|=u=kC#+KKhL( zE-m#Bhri%g!65@MJJcidp&y-85KiiaVUg!&ST5z^{JrQ(j7v_+Fj2*PB;(LbF zTV)Xi{~h=3vMNkY$u-K#S)a|RTwb^KEPWYVFZO+Z~!<%ZzMjt!8xC|L7j|@tGp)aNg`VlNyJoGMjJp67W-rbyVSU@9zC< z;_9v%g^;fhmoK z6&SHXvp-NRWxwIXUMsxy5c5a7-iICzw}Syb7F;0iih|DH>$Df!ER4>o6IWXBOmRG; zQyjnBscZ~PpG;hDi6Wqq_#pH$F3({it~?%qx*fkljMSZZAGbuVBEUfV zNTG44{|}luXst{~lq?L4Fn+?g%P_wd-H0{K)k{=$l2D=KDpw|{K%O304HPi1&f9dy1W%)Jknf|+Iv46Qp@nV*Qo~Q;Nl1kb|lei zKY2$YhcX28U27hfuk2|2imTu1=oiMWcLD096zEmM&zZ&Jca#=#6rOueP(Gvoh9iuZ zv>Dqr#Rg-(h6lEgu$SZ&Btbp&Y=YTrh;M^JR>}Mf)0}3ATW{C7PYIxj%upTbcI>0$ z69~1eZedvTrwuLF99N1;t|YehH7a+eg0c19++6K^V9n(zBL&B{+lkrE^MAz|)KxHP zH0^=_zlb#A=l2EAB|X#tI&-lG|u z=>r5S{7Ymc3^GUM#II(6*j`X9LtsuwnAW`TKtGSa(ALUrO0ams9yO4(O6WtUC>5)m z&W>m>x3_?6!Enjx-uv7MT4oE{x<0u_HbyT;}xJM0E_7o_eVfyk^1QWS3my-tl!AM>7ZiCnwjYr3>STF52J%?$=)yhNFgOqFFhwDzp2KXP@^yrd?~1n!=Z+ zmH#M$o(y^;yQBf-%2X_#<)r1!pg%*Mg@J$xj15X}MNucZB$h7JRzd$jsh8a=Av6vE ze;SqqI<_t|F#LLJhRxpCZ@VYfpUY>mwV<0~@a$eX(tgl#ptLXo;kj zt@emTD9c%66(H6bN8tlrmI?6!f^RAk%M)w!*IZ*pJ}W=pU~G;4nB#sKtZ%IJSy#u& zXS@JYSh3Ts(}drPGK;bP5xOV;Y&x`9VV&Lo6Ii3F2*a0_`g7=NJxWfjBkWPLM9^2O zcsym35Y0b~W`G3;l8_^Rmsc0R=Bom#JJmh#<`eQktjzoqf7x-Fu+7na-Z!X_RX#AJ z+3v0b;-7|7jKqQ!qG!YNR`>hnzS)K zm$z&z_6c3RzSBPa6%d?QDG;ky@3tbpzsb{0k8WOc!kL6tZ-;f@toHVb$9_`82`id| zlea^cJX5|Z+8Ct=zKzX>HTqhN;4$NUmnAjT#nifVJA2e9IvP;bd`i<$=1|S-U?7*( zp7i?r1*%+-`SE*=efh$l*udoeW~4GN&Jg%j5uaYoipLF3luX$TU(+K4-;?YK*Gn^~ zUhe!;`1^fabb3|I;?J!g-UV@}UYmj(`{>y4pmEtR>ix=;d_0=|p#Zx~0Xngv%0X6q zh|l26wBeJp!Edg+>9YqW={Gnvxyh`*Oasmx# zpjwuU37({mH14ryi}ouM)y}#=m~6gk85!@1Hm=odHPM?Lv-fS=cSAeae*EAot$F0y8#SdM6GxPtW`>>D^uVt89hvgogmpxB-)F$kHRFz!gux-Ac#uto~{2T)Qv%3Ku zvA<^`4I9Fr`M%V?%iDI6aOO;|?CWf6r^A6$g4@bx%7S{Txme$Dv}l3~gFHjRQb+aj z3^yXyNNV5KuAhdE5q}iT+wL#KUwOd5puQWpD!Ml?_H=!-f$ds6z9<_1?t;kNn+#g# z;n$thiLAG&>_LVwf9rw`o3QTrl~b_>Yq+vp#AM~tb4%E`q(o(*b#hu(v&+iX5~y=BDFg{7;%VII!cpXiBZ#jVHz#u{yF70)R)v z!*m&IZ?yH5=Vm<)b(B|hvnc2lr1&OD&QfCS~AuI{G;y_h8 zFFG<~1NaEe_x`kRaSJKTQyB;@3{Zc3dvVYgvCYJK%h7P5yI7QL??4$PTsL)l&oi*W z>z)gYTfmIzdc{5H=XbI28nXq-puZY4Y(b7|v_N6{_&#n03wpR_1nussw{C2#QJ>&- z!F|%jDRDANReT~ITV(gm^rCv}qM1>{-_IPq1B%>e{0S!J=@02gyD!1$$8Kw^g&to) zd%_UJ0|u%%3ALKq8~9l+w*vP~u=0MLeE4UGJ!R2|bk1`~Y_M5yb&aX| zZ@$<*D=_6a1Rr`Z;S`n}wXAs5TVMCd`oDmmky6!iw%tW(TSi6ds6DB1oSyuvQpHHG z2+v`8F6yiE&j;0Hr2<$9H^mq)&$Y!T7FU#QzX}Z>bT|?p)jun@O-z`Zq>hh@b3kSw~yUo=ZALLpY9h(+kc^8qGj@2?GFy`>A88-E5~Dqh!B zbG!d{Si|bR6?=9nhvdY9xe40SL|t=4bS2%)SiS_V3^iSRLNO%n9AS@AGMc^O5iQGh zP`i&sg=d%kY?Mq5wTFMLvg>?H5T8_E%vw=hYZ3b&9UxLBZgExAf@^`>50l5+T07ht z@z$(zsm|ujT4y?8*}*c*;8jwN37=7CsHMvz+K(5dZ_#X5UH;|UrK_)b+lMJ!6_

Td^cjIu@!(_d}l|!5)~(2VVM$;h|3(S2r(ZK;is?8s(L8C`bx1nhhr!*JZjZo%p^At zSF*(&FSO+7%)&|O|Eb)Z(vzg6hY8S!@E;U_U%i#K_03XxD3dSogD2CtHId`q0EK(a zEJ;VKo05HI0$$-EcO=3EV1^Vh_keJM1$gDo>^dcbAjtoOd>2Xh*RQyhx1u_)l$bqW zvvRxpO#XEpzf;Ftn=!u?S$)PDYugd8lR$8J)8?Ou02Y30Cc@@1dh=RNcx{^p>|) zJq3d+#+1~c$2GF4nX5pq%A1u}Y1zV$M&Ur3k1Za-@tCKVc2Xz zoM4uahT2S^a(}d?UM7nVWu!Q>%pILS(EaGeryp}Dq4jueHPJi2mbouIqiUIQk?Hrx zIA43NcS^v}a^qZ5j9?l)a2Rxh6Hmn^HbQ@G|4O;corvOnRxF7JOWiR27+YOs5gaSj zXztkId1Mw#f%A`(+nPe9+<6>dZR<0AOB=Qvu#9K^^SnkQIM-g_2x9dd&%l^AlPdn5 zVG{M{`_%3~yu=-2L2uCF3X_^=dl%%=tlZK2jS}4U{;5H|d@CneCOk})Th(V~v29~G zSgfyGQ)3wRUoFdm%W*`B;mEjT47<@Yc8)rZQ`jg6MUgkKUqHR&?TPl8Cf`CcfGH3 zR-_Lb5(O|z7q5by@4oyGs62zUizv*!P>j=CT<=Vd@q1m%2C_oQ+Ht?_X~a> zar(Ov(k;4S{%pul*Smfvs%F2{bN>j57i08m_msN{hNvb@-3vXH{}*b*tFE$tKF?K> z=inebxO%x)8Gp71vLG?+h6}d0AXmYsdHD@gdkU(2(Qylld;WI`%-y*7y8t^<`_*Hn zvZoWGoIE3WXQlS_=Qkq2=U}ntKtE738=G+)MEIPV}0yT?7F)(Ej@|} z{({Tu^U4=_bg%QN4t;1q!>w01i|6x8DFfArfrkw+;p!be=khf{1)>XCtU4Zj1LP?P z(!)^QtHFx8Vv|UM3pXtM{G+n`MXC}d6p!M=unL|eV!xcWzFTp&UEIRhU{$3mumH^( zv0!6HLS~@aT+&LL5{7Mc6zV^GhIE7W)X5Mca>xw#Ycjm4Kc3@Dsx!fCvi=4jF%Fcsq7+ zpeLyDgW=RD;0$Gn?`BETVFp5~^jYH=X7*7~OZYI*LpdqomW~taB{3woZsa_v-MA80 z_I6Dn?xI2N*XxC~=NCx-zjC@kl^w>{kd7U+!hE`1lcxS!H$~+7N8YdDv91wvRK8o3 z-#j#!E3y0W5cHwfhU}2htN#TPfl*&mu&e(4>O-{Q>=4elAcxFsIK`^$)gd*LTjGyO)Tv|>N8>lvCS7H2sUqCe5o9|#Zd<|uE3RZA0 zINn)9WtM<>8||vIL+bv!Va#S&&#v1A^srm%`OtyzH)r9#Lv#q&Crn(TbR5l_TCkz4 zYh%YZ7>lCgp3I4WQU2ALJvK9#wpqW4s9NDs+pVb`4xmMLSzWX(+%FI;25CQTM`!+^ zP2XICMj4!EQ^V^PD}{u~{<|HdS^RN!o!N%NPhl>o9|3XGxXf`o9BUm0h#l#fL|gyX z6!CXvh#UEzzcFz(eW;+EeNmi&Iv6(KU~-qhJiA}%aV_yz|u zEemQ4>31Sz$2;Etk>jXF*!9Yi&DQq%GlB8_w2M5I1QSC+Ee8q&R7-Bn1~R0{DzUIH zQ7>doeF1!sNlLO(Qx09T6|-%vb26>I_O`O}Ayb^rTL`yIxjS7d0O*}I2bZNtH^65K zR#S9Xp(#UIUg(=znpKb$i8d#xzXL(`(6OflCqvvnM#{HwstGS0P!9S(TD1`tf6DrL z3vBlR>8Hc^XL&|~=v2)Zx0z%P_>aU(?=f!1>A=+ah;gMVj=Iu2zkY3+L?!92Y{H|5 z+K{hNMYOXI6U>jGhSNDN(iMhhug+Iq6>M}!gWC^&kg&7E_2aQzDHE$g8y=~~oll$| z@;~-@QU02xbx-snWWV93CjQkb2}Ki!7Cs_7qwuvrUyXl;tg^3;{0%7ma5wWh&MzN- zbvM)%39J=0=8jK?FCg{vu+NeQw+tZPH6m2GsU*_xbhBg~9dt);W4FV1=^<+th;M{{ z=$)amEk3<+_fI}CcQqkhS`M}Ltqr1IUo|rEr1g#>um`}Dn*>x_Ej+4`B<~Oc04Ew4lX`e5x?}TBg=wDLWK!zxG)9j1FoVuZ z5hv4*b-vd%-xhKXu)g17VJ?OG6k|Z9IkqRA<2!&^)63V)g3LXf&CU_!@*2$~cL=<% zH@7-u7q+xQxA6Vf zJPeFw_rCDnez>jq3Zv6h{@Yo!L#2S0>00|>tzKUCWx=cEP7kKy+EB>dYtpi<(-S-v zU%zBO>azUer>3s94?QBPPr-w(?f9wdU10b>iq69k>i>`9ni7(|N7=iwIW*0Xy-CP8 zT(VA%lf4z8tV_lb=d$-1XN2sPdG3hpI~iBbeSe?dzwo(xe?G7G>p32m-$&|=ac!nB z4M%^cRl9WBG8wCPXqn={3GO#-cSP;i&lLVEYk)kiinziv zZ-m=FCQ{?^^~4)(uf`hnJ!T>V4e_D!ej->$?^oUmDUjQpk(g{J0rwVxtMT0H&7Sy* zmt4834r5F@+wrr`3Z+S=2IE=oV|0tUqF49C#r~ricmATC$Q>7+();RVXkxZJYmST5 zi^CsJyySglR9bj`dKsxmC8f7Ws4bVQS5KRadwGa_8+fQjgIHG+M5Aw){}>AW+cJ9N zdX%xQ*#+$|fzQwR=GF!Gq{B&^Ylyu97b0gDg0($>c%V;&L@PEo7y|wSbRU(cKHUa0 zaX|5^^5#iJ#~kln-nNUG&20i!-8Z%lw?pLFGri@6={JUq+qG*v_DqpuES^9~7Or3P zPjxD)D*OMC@Gxkmfk>{xFWvIr3z?yhd-iR{0&l0getK!kK1KlDJ&G8E=G+=q_!l~A zA06i&XOjzsJ(dpW&!=)qK2dG!nY6MK%PQR5bFe;okB?v>fCl17+&ZqwsGL~~DQm1j zW(v}?!dA;(NxIMRpnCCqo-odfT@gxEPT9&`cgtVB$1OaKr2VMq8Ao?p zNv-?~X*1;)?=DphnuPzD%?J_iX^ZjwESN0;p6y>|`9!D@V1+VhqySr6|g$jAC z&x_ha@huCo_G^fkzV7cl;s4RRZ5Pz~LKb?Vsi9jq{Or>hO@c2yi*Z0dY;!Fq3dH}J zB2JpEDT10{TjeTT%4`k6OQIvNbRA;v=$eYK7_!Fcx}g=m zP3|gUMeKr7v-5a|#RpwHARgRH178>WxWw}>c73}flJc^?n}lGUE~~jo;9GcgQk@a2 z-+#}Tx$Hnv#n$#uA53Ls*iosnn@`fpX$YqF;UQ8+R8p7e2TD>gtN6OT0Z(aT+Q4tb zF8u5<`Cvd>kiv=A)Y<2EemISS8PB~*qNreq?{sU47-YE5gtNEZzu~jNy*0;op4RkI z**Y0lw4R?=aq}C)jSRWKD$F-&%)|6L>4L7Fnis$ z7WZq@u#)b})Pb*i z+@?`e5H-bxWHbJ;DHg_09C#dg_e|PTn-M1Hj!_o>o*|ZO@B-8;g|CT1wF!gZ+S+w1 z85oK4tg3buF>cUplUc$?x5(h@-5o(Fe5r3Fjunv=#y+5qRz9#KIoo zy~N=B(5VyGDL+Mhp=SFq1b_-KiLF^&NPvjsUa4<)W>v}IA71J{0cY73LMgR7XR|J` z*qNfY1qK#NpNpTgJn-VYW^mW5Bd2}Rs&;l(8-)KiRaSE+R^M?7X?53pMs?+$p^^NT zDM#ftt*q#i>ggcv_6JA+Q^Y}0P#TNz*_Wr-x_pMl_c%df>d&mCL&AY7Z0_70Y_L^I zhHT#~nmx9oEt;=Z(oC|Dhx|8)B#%9D5+$bhsgTgI#}8fyp2M*M3hD>(#}`}!luA$M zl{BTFAxxS%LagSLn;xpUDgRjS9KOn>=@15Q2}7DVbf8vrCeeG@}+<^s22Y+EP}{? zkS4EWsCiwRX<&_gri5qz3kmB|Ht}OT+a#-61YfuaU%1B%L|JRU}^iCT^ZA3p2#yE^f7Qq!vLl=<@`b$l6XFb+f_~ zEHlCFxzXo;&+brv;5exal!tY5?Ir}K8+PQo5dvU4fjaycBj8>|uNg8iLz^sS+NDFk zY@_h$0$Z~y0>o{o0alO1Sb#x){wN>hLhz`|Gij);wH382e^$il)!e`-(eKA%Y4)qW z$Rn^69;6hG_BAZF3$n|R@)~^jI{n_OoO{OdpX{s}j=ayjY7RU1fEU0Ot+w+VEhWK7 z1QX__mzD~tFl#lLNr2qe=cGkSJ&kT>FYT4Aqxj@c~U*(8R5w<#4zrh>j>fgdNh&!t~Q5osWgJ9zD+Fa_#i}y<9{3yP74YdS( zt#4GJ0v9(HzS@AHi5fd;C(9DZE_x`c4CPuUQFA@-KI?Xb;0(pLNYBuffn-k}>)ytS ztS(->z&yuEoLlqZ06q^Oz7gVS*TPC=NU2wA!$4BQve5QIFA3+R>=c|Q6T$-0zk=#& zQSK2>Q?+|qC7Kfu-uU3%ulekYX<`-@Utd?~tF#wO8{u*n6zdy~|01sREt#f&zx%4l z_-^3Ky*;_}*)>ka4_WKzuzA$%MmxY4GewXkP7`c&%b=M?lPRD7zJfZRSWR)heElHK znU|c?djsnw0>T7egh<_&c~uSfk|#@|6O+%8goA!fMJ=GY*p18zbPuRL3uDCGXl{$~ zKSU_rxy%9`JeEeJ0CzUo`aFvqBjRjo88qFv-Cm`E=ojmgo0_L!htou1ANdPOs(w(= zy*lj*bZxydq9hJ*(OjE+}Eg=1}2Q1!Jvrn_LA3dFewQY%X z##sk{%edvsu=`8zSwtosc3#xRp!B-xn~50Y4R14~mDX(jl9c&t(}GR9{%0Rvv=obq z%*>>x^!ty(bza2~ez!;kG`tDACGTN%v(nh#X)<@cf&)pXTqG(&7|UvaGgEPIhGS>p zzy!WXGmJBDvVPL=aM>%_t1Wi^|tY3Q3Q+M=>K^ z{p6xm7zD_;ahc@h%I%YXLHk7>Ww>o+^8rG#<2{W6S$Un$?te-TCz(_R=?gk58=b_m z)kLD0QiGo<23)fRs=oOPX=TzyUMq_6({_O+O?ke5o#S@T3T|9~jxjmA@0pvP0%B6m z{7Oa;HWLOC6jAVpacczY=yf6{kMkrhStNK2KbzA_70w_8goxJX(EqZPx!apjX*?ZrpbO1G9*7gES^Ow9^(J2^q zGSZ$Lgxb!n+I_U-Z8t%jR$u=0V?KA=*R=ZAi^&?aCmAg85qJFvtncGG9V9C!&qNM* z*w7Nc*J#!B8rs>r!sAsPxD~{IZ*=!@_7@P&p|qWzE93r>1O-qVqi#bR9U-et1L>F4 z&jWESn0qd5yq*?*<{@fDjKE>lHyV7VQw%RM_(f04N((*@2u4|E8;axH_(n{x03a z=Ka!QB`sSjWjFgP--s{#4Jo75H_${UV)7TraA>`FMCzyA(R8U>e(7~tv6%%JX~S#= z8R9-SQICjQ5w>rWeqZI;3f4LKqo}NPjhNW-=}E7|Y@*V)mKL3Yw!_J0T zkVjY5(n}C_TS}Qr(xEl*Ss&=rh+>Bu+JKZNNi$R zOMTLr1*x57ksLsD?g1(igp0jqIqXLIE7x?Uc70_~Yb5q=$LrU8Z`*uH8}7-zxcDG$ znc4J({jlT1Ew-Ddud{<8<78g!mcMv?-)0MJ`D2qdwbGHaZij! zxk}wVwhVFoYZT4lo^Y(L@zvS2$Yt=u-wWHyAv{i%R~nIJE4||@Hrvck!d*izt?Dz* zpnBRBdb?;QzNb~GimQqrr|8D=seqbTqlOQc+N3M3l#vP8akSL5x17EHZ1(NrnMsqv z{H(lF^M+0-EV-lC^hbqj9Ycgy?qm$gnlZ80W$mHGf`LQ5ORV3AtiNB1Ocjr^Q<3N2 z^k07cN*d%XNyz9YWd&wPGP@<|Ez<#Q*y6S?fE3jG*4B)wl1)R;A4Qh7pVHVZI9{rb zUMv^=xb}Ha=oKA$qm4>;eC7uhtW!w?F`sF}^ycK1(&ys|S3Anc;$7AYzbJD}h&psS z=uvQ^7AIg?1Np{E@GZ{hQA4vTiuw zGFrga6wTXelXTBZ2c^6h_^&#{3T&kP<&f`Gp5RlP=ANVF9mFZKr7voi>M0+QWzm@b z<|xD4z%1p3U`Z-MjUIZPB#Rh@LnMLT-bHh)HeWlqk|G)XRDcgN1v6S} zBDRSYRqW8M@w0aQtMp72t5cx}=LTou1$iI%@?qpLM81X5%5d6fV6qpyDf(luyge9E zpq@Gx->!)yn_H5a;(~^kO-?+|zi9D6A$<{o#2+et=HaE&tsm_}0_N!XiF`Kxb)0F)M6BbQa_ z@F+wU**CTzt~&ulu)wp0uS!b`HRUbI9(YD&t6=4SI+<{{6ybtlig;4^WcAnq?mhF@A}&uWnpf z*!o<}p|_qmU8|SQmYm|3_C)gbdfeIfUbna1d(KSIbnGdWb5>q4Y&wWpqan5XVPg0T zTg*rhvpD#wV}(={gE^g0&{Cve^M})Y1@a#pZTdjke>6|SLmp0m9=$lR`&AO6{2MKl zm6%2tFX!Et^>e*#7|L!@$NnO%ve7N@3e(`L{QwyRtLji@Wn7=CP8I8EvB;drYC%h` zS%!bd0-SvpG<<>2NEPGG^WkqPx5|EJ)V5Ql#e$!5?d&F2Tk>)R=)&k!+C7~&vFkUY zFQ4#N$!L7%z9g)ANedyl30igYXi;K|6U{IYP3{s2O3gcWeb8QIycit0$3+v_ERva~ z;A8|xkxvQeUUo7)QNj+HJUauS-l9C}uz~vnEIkEAZ?GO>pGW2%1#p}A(` z3QnE;Nlos}H_9Yd8zqhY$$xt1BZDZnRfT%(IwV^<`)*rX-n_(tSVqS#A8i+))Fr?k z#p9QvZ)_8!Fh0g&UR83m^xQg1{x)9|!|IE|O1^BG`6=SLjZKqt2AtUg1+Q%fQ&}gD zMw|yaS%PlYY&kPgZh_@0P{SHu>y0YTvw5>7R}Z_hny|75^MBNB+Ih?P9>cG~y>JOl z{y56x&I#Bhyw|-={AqkUAd`3>-p2;M0`rVU<8hq&%@ViqVr_*_d?%8n>F6(?p}Vvh zwRm7RC#qrcM9irD@Z!%C=olfcIoW>=oyZfdofjHVzHJto>9xR?Bf4HU?o*mHQcM@{ z#&18Ri6v|d2)ABagd)saI;TJD*B5YqVX)TvaolrD|+iDSAV1^_!)ofsNrbcs>AV^eWh%j_y#U=o9~}VhV^0 zlZ<}OKhb!2ucI0l$DA<9uVc-b-B_4rF#JX`DbJ{Oyg~j>)OKqSH9sxF#--~5W|^!@ zieL3e=J|7fN(;!x6E{#LF+5|@L1WP?4C5eO{O|mmsa0g}KiDXe4{ynvk(j1`B1P7m zL#XC+t>;EXmdvIW;u)W1Jd5KJ{jJJj*MU-7x{XW_s==8k#O;z^tHHqJW#_F{_Eyg9sLx)j@d^n2}I?%k+K z#JyB^1NGN^PLetkdji%Hd#vM1xJU$05F_o2xCxXsYDYPVH?&*_O!X7(f=H;L)rCK2 z!{M%2Q?EJ6TZ|n%YMiv>xC_I(58I{X93~mbdaN8c!$3_sJI;?YN71tg}FoNtUs z3r#JUAO!>buFqc%6nQR?e*;?tIt$+1zNgI(GbWBHrn2W-{qXEFtGod-vNP+&BL~gc zf3Fd1i=C>xAN2cY-8#YBw=qmsM5)KrpkTT;8gD!W+$9z#UQtxFNu+ zW{OS3oWz4deUK=@zC|R_yayxFjtKAj!BMmQ%$qYi*DxZbzFPlbiK@sQp-Sl+*W6!l zJtsc6TyZvZ;cBOHyDi`ky%;er$astfLazMvfaH} zMDaaQxJc~^*;R+cGxi_N^%d=8^AXX$k+CS4sk?`A0WgOqs01u8{U00HfS`k-pS4FD zMw`_G7@df8X9FKZ@6%4Ys4>!Atm{`*mn}kNn0k;Tp=0LwX^6P2k{WX45hvGFaboIH zk#Ut&A6%TAxQe+Q-S65QLeFDU#jcXr@6IMJ_2I6n4xvz6BB)e->071+NtJFC^%V4r z$zAU6>z4+wLmz%aPJWJcj6C(F|2W4KDAZ`E=%p|?}483(- z9ev@K`ogznK5;3$?yPYt0(`St;yNjGfP&YW!$P3)CNlC%;I6O(T)K28_Qqn+jl)EgNnOJ@S8#j%UH%~Tm zAbW!4`pp-B2Yq((?5T&y1=1+nX|p9qkcH}E(m`Y|SQ6MnN7o**CwMT?Qd z8eG6gM_?)hL%pesdyOiM){TE0ZmrBt>1fGKQ@BYG6Vm{KqsmD-5q9rKjVP{nEM2e; z-m|DC_O6CmwySem{N9x`9S)Lx`!Jue>Gj^e2%K1;XbzrjXTm&27^+@l<}0z~=eAe6 z5H5G((X&~IJA1@##^!x!T%3UrDdlwdL+U1umbDEUbAwyL ze3eI6hG=si0v&Cr;zTDM8AG+pt5T8d_nmb6)WgRpfD7|-8FN$xDQY-?T^#ZW&?5*^ zYr?chZnfq1bLswFkV>fkFVsLEguWQ>Fi;+`gpr=}`{4o5XuLWn zl<9aQ79X}J*vq4xc(fPRV|P-6KbxBlw4Od@TC60D7Pwa^74+w~MtP|Zyrt0L^A+2lhOX}>9-Pn z+Q`c$iW#l9xw$z-E+w&>R0!A)4M+$7;k>^p6JZL3X1vXrm zPH`8#VqB`k$*FiCJ|bTCMjD>Du&K6+ySno_VswG&EwWbKIzbL|eI9DM+YlgIx79kb z8C5c+HT*Ru$qO}-wKpC`7I|&Nly%1@_wmma{c`FkoJ9#Y543;@Uf-An0qD(i9l)&$ zdQ{Wsc{P=->smE=0R{Lf$k6rdejh2*jHHzuR5tGwH#(&gHD(q5 z`jPls6i84?^T%keZ%0jgoa5tbFEVUDd!p8vzh&4R2}Y~@rmCKo?0zaXoYzva-DY%~ zlyXeAM@MU4o8@h6Q2l5(CKGT?E|^Qqv*c!boY>SgO##1c4!cuzkDM_PK;vEfh zAoyn|@SC}WRbo!sK9IQCUb&44w{{F?fV%d)IVtd}*kOGD38@@L^1s>WS$qZ%E5=-W zJ#(5ktxX35H0Al1Z$p{-H#Kaa3VruIs9ijf$K66}#4fHqN@*nC4s^F*a;UN=PMkCP zNBJZ=@mXtyl3iB58lm*se5KAH5`zSID(0-B%D=9KeZ6T^%Kscd4gHGv0qNGXwyY() zmn`(b!`M48ErihGM*Bq9L~+MpQv3MZZ?%;i&!O16!rVURHNflf$J{;|a3?V>o`gRP zm6LNanO6g5LXl7o?RYJ%B+UUDNHvP%w_{&@3*gTqR+9XYq(~U4V#3@p9 z@Y&s;Ztql8{}of|<_OL=$Qo<36gJ&H0r|P3^y_42>_5nEO%<4Wo5XnD`00!1f`b4J zInE6;9mG3$yP=`U3}XRNOn6z4vA}eXU_*dUz5a>6Lvil6Nh%zQabfWJYU!;=C_b-< z$zR%Z_v}~6^qp@AnLZ{v?{MVH_Tc$q7a<$ zZlfS@$a#yFT6{mA7;<6?`S88~O_EQ$x}W44=nC_I|G6bBW~*qX#6VoC^E^t z#g@|)mC~ih3z*KUMPcZ_!OZ88h7d?u@4w};>^V{|B7h91(&Z5a6c`Wo=tu)=CVQd; z8EKs7f^jpjb&KHb6S`)%Fr_=e`@=rS=gT0t{Bwqq)#2^u7NJWnM?mQ{Rt8NUovK^# z;@h;Pq-B~^+$9-H$u?s)f2Ee4H6*uU={X|0{{eVJanj^CN&AVP+?vBswT8-%-$a1c z=P-M{kfYJJV2GVv%hsa%S%Hl571atQzG1<)m2M~?aM(%H0yM<=8j2MW#+YpGYCKh; zicR|3u#R)>LrmZD1<_tg@z3?SLsoFoU^(mNAqflEbPzYHNAg{iL+7rH-O{lZPh+}> znMa(+o=3LJBNeyKWMH7W+E~jcqYV{gbZ=|vkKPM>5~sOi1)4twep#e)C+Dw5>X8iz zCNTgla?jjx26l^BccS-=)R|D9m^)?FM0Tx$rW?g$b4vB?;jGYZifu7j7`u?Yq&B&K zTsdNVCq>ZY6~>nGFn&*CkkkxV&t5V7c`B>&ChHrN@(^jvH*Q>NN8W9t)A^t@8^o`Q zoE_K-_1Fcp^o_ulR}_!lk8j$-U0L7#dWMy>g&61DoG!@IZ+;BwOoP`5D_7F@7*9#LqNqUfT}cK}2?5-Mo<5Wfv4(Xz0b0)>(3gd%b*0 zDa_^_L)4v*n>2hc+O2?H8hNM0p$tj%o~DS^I|6a6Yol#v_vKS%`-9s}^Eim^qe;P8 zcL({J79uY+=erE%Q8^)foiVZyBy~#g#zCOtZQG26MFKKb_RB0tVt+|!_C~VoURHhl z0ju}PT#Aay$;HPgDflC@>(MGPq*um|Q}RcRDV_nxDPdmvNTF}F^7*Ejv6SMh3cYQ= zobk%hR?i2k+H$~sl|{}vVkbqveNE8;V^#n0`Df#cB&UnB`Z2t!F+wdRvyRpa58LAH zpbnOAYQaloyZwN}-ggy8W80Grg{e82|= zF#uuqD!ffZMm7{&viLSz?`U>r+4^nzsI3{|BZud(>UN6?3(gSlCsbd8B;9v?@A{5i z&>Y^)L$8wD=~w;}0aR|(^~TfWCu*^Hf4;lCQy&?w$4zrlyA+D4=4F0wiHbuRbX*@} zG|Tcx{gsR??^J6?PSpeAh@yJVv_n%NiY;S<2`0UTBX$b^@BE zz~NEXc58OA4HAqmlqKm~%A9K5A-9kq_Gu3lvJ2Hf9+2nT(4oAb^zxsak&B4=ypt=$ zOQE^xJqPpfM;QWj&^{PrSa2+@#s;an2p%|k2f6v8H#)N$EeS{wPgbp7fpkljq5D)$ z_vTsZ?d^r8w1#lwKv98{69|iww=y9tUcj~61MGq9(T^J%nw`HLrGKsnw+?sg3*m+;*LJ1@$7Lo=MU&!uGfiBaQIi9b$A1$2PxuZ7t#l3VLK>+ z@sQv9UOEyKJxEj(WU{G6Ew>M0ku+wFvFb4F8JP*n}Zdw2gK61 z&#vm(d(6zfxc~iU4F{D4NyCHy;86Y%-|hIZRXD!(yI*T>tzdYkVCIAv5k5*2&yDDE zdp-S^3oL71{TI4N+`hfb>Dwz<^z*IMC|_=Qy(}8m1lRQOtFcM2H80CGvKwpyKe3fw zSw;zL{&vIFQ&hNljU6wC-a(Zo#uK^8VKxlk&`@#?dvkfOg zFhbI?f=9R8ncmBdh$bLXqJLc8)bd5f0=bU2s=`-Xr?~_y)VAR=$3O@9!EQ@QHV<&O zW@&%6RnYkp_~`9deR*-A%NAx*PKF=6zI5;6gHV&4oEhyub8(Q%$;SJtfh`;8}?2W<&1AhyASCRLMRVY7?CO)zy1hJs^6& zq7*!@yl55@tS?DwUf7P8juKuExQ+)KO#8D5AgPypJ64s^2tF6KK)of_EKw+!;tF~hdJ%l zDk`XTrI42_zUnJ4l(0^sO$I$7(3-v-#+GfZaOemZ(MwhQ3X!%>+36&j1AIvfxmE+p zJ>pPijJkD{9AqP1Z7~t_1ihoD*L~e-DNP|tRii%^;CZ_QfiadEnu>FIL;rAa=}kT@ zwPAy_>x)gpZFU%|dK05C!=R$`3!1oI!%27pRfF=pjp2^#6a;huub1@h9w(I{s=W+(<>|?{2MqIjAAean>BnIuNO?@anDl2jv1d`&G=X1C2+!P!Gw zJ1EQv;PGi%Mf*wZj$L|Iz%kD%2R44PrF5DT_SJy-Z6v;lfCr^xV0E3B1d-_E+LRE-v>U! zq^I4|PXuO|(}nTQ1CM{do}bndy)-96Y39GMUbxY|xhhw*LAgQ}+g*G>en1@F5cX6f zzD!t*cBNq#T7NFkGVDg>CLD<$%V6YW(R&QKvYB2H+tOgWty4#;z40^ulHEy*Oy8yu zmG3jl4Sr)DUnAc93)nZl`dW2us$!I8tOyj5H9*D<%xW`I*w?fZcrC1_LBW%HHoFnmFq~VR%n@wBI+z(GgSkUOCWBxYy8r)fM&eys^55nt z=Bu4o7HxssuX-QQ60)<*0Clz?HO#bggq+A%c9(3uNv*2E367}BM=4NcM!)@ZXp`xG zA<gcVmp}CG%UC~=d{i^6SlT{>zPkIeF*@upO zYd|LDyuZ%lm2XjwHQDgY5Nhr`En6j97|IY_$W5BV;^Mz-nEe?PmLf-8P>6BRjoLhR zUDc)VnE)52HF8ab7lsdTEQ}=p&4o$F`fK&|Q*dwX3riGj;;+6b{_6KIv+;v=M`Fgp zm4KM$Sx`vHryPd&mp%wq`-{{1JJGW{vnPG8yB^5e?){aeKoQXa56H`&1Fz^;Dj$Ww zTVEl$UR6ue#`io|_|ez^?Rzj0cRQ!v>RHq&@5Zl)?G)6@tx}5=5AN{^*k4;={N1SUi~HK(VsMFv>p1UYmrWzI7_j_VJq9xDq-3UC0iPp z>8s*4fx}+-^yu?Tr@Tgm3mKYpd>)?%ck2H=>ujF#x!FK1Et_ACNIGJ=0q<4~(Ie)0rr(y91k6ABS#zpMsN%upMT((W7t^Q9aF%iXp!mTK?KM z?CuuSA8BhrKw)@$m0LlJ(%F2zQ)W9BYW#y!vIlIe)A)4baOw3zF)3b5gX=OSC;$0as0TJxUN;s7~Hl4d+?JyPf8o_H))oJCU5@?0cgAdEy%z+Gc#L zLW?=2!2bj$J6F@F7jD7v3g=%Ubl1Rbq z`}c*XbEtImXY}57SBvrK{1jOdQy)s)st(9}Hj)t}>4Drm)H+LSZ+fX0&&Jy#Y>2Pa zgAnA(qSrIWt=!m->Y_3uuTTiv)=|riCq3;NX+@vL2VOS+aNp9S zav3kxWuY_$&KiSV4jBlgHfL{aye$^%zihV*XC3w(o+(LGh#VQ5hF7Npf2=qs&4Y__DjQ)3T4KF&N=vLfp~`;{3gs{R!hYjBRnod96?0l2y8euh}?Q( zp1JyQXNqj`Bm4%Zx_d`zQiTEV;mG&fL_8%Xk!E$O~4cw9@H}>IoETPmOFWF;pZc6!5%iB znZ&fSgE^35MXM%p92th8{Fs(C`y!XKvr_7;cI`&>ut33?9*njn`0rx~3EUMt<+mn; z4XS>0@15RI{qyxSfN{+TU(E$Xt^a87`P$$D*Hy8iz`)KZTw|UCIk_u)n=qwAOy9F# zb!J%XL;qHOh0FmXyGc`cowvSU7Zydla|%_+&Wao)`U4i#oPTPa#PqnJJ=~%I7jgd^ z7yp{|cs=T=R;UJM8SLLIV0^=vZtyql=F;P06NT!UXVnLTQcCDHIoVTj9 zpGWe*#}#>igGjc>wkhf@sLtW!1%G__4GGv{p6^RTX!|mX?}ff;iGRY(_l1auIOiXSu}~!rU#sycf%mWo$kg{H8Z`DA9lBmxn4i` z16}hAdt+I===F}?SAAinXZb!IV+^zH!%s9Ww;J`YMLF_?dc55$Hg&cCmP9DI{2`F_Et2z-!QBzGp=VdL?l`7|YmA%Jwyq$Pt zrx&|RhK_EZCRAD1eJ6hnh<*?{zl|+Okvj25&Ws)}mp9rU7L2>zkH|R*u?&TeNSS|L3)uNxHs+?|kcqnd}5t1S;V9ub`@TwO=A);A|A$^W0Y0OUZir%HKuP z2a0U<3n#4Jtc(wKr^8DrlX%#Pe!Zi~!wlJwe(I%hL9=9YU}aA?xBKWudb!=A!$@HE z+LhTSrCei$_0Uu*cvTSCqar8S2Xd0OE4W z6PL1O-UQcNy|qS?Tq^$DZ((~>2MliBuW!C-!kQOaT_mXytW5*lJM$zf z`+Ak=zUq*9U^QAmFKlG@1E-@>%}%Re*NAl=PdnxoW+w1=y`!%4#If5HfwR_eTU{`L zs@&8wd}i*?00h)b>ssvd$fpCK*S1`_Dy-j`HOryGIz+43Gvlp7zQ)2SljQEsdQ7wj z!)d0|$kkK;JFk7czC&u#cH^RLNkd~xPIzx@S@XU63^tEf&xs~|@>gtu+W&8unf17n z{xR(B!zHgb#pSu!69ha##eYDA1I@R`87)GcXOYf=PV5rydDGYxB6=gViK5hWQvb$W zFUMu_z{B%0>xT`68fRf`e<`jcRv?Fh_Y`i*o>b949+B3YhWH5Q>&oZ2XgvLWn9N{buq7NQ_w4KwoyagddZRlUSqvFWq8+lp)KfXgXX(kx3-qkqIn z_K(&-4NquUZmS0L%r4%!uzyw!BS5*AF|=t$uB?KITV`lq{q3a~oYQJt0QW*U{>X@u zRg%bho+O^ju`+ozk6@G@7vm)O`d`B|Bvi)S$rctsZ0a*QdHn>Gcv)FoXX==ro#Pkd zkGa#yVMvV?hebeNIYl48%t_!oJykzV2;7nGj2E~#mHCVqD8M+AGUpGq$8N#h;k3zb zr$mybcK;;0H0H`ak@q#@lqh^ILyjdN7`^T8$t4p|CeH0=;VJ1zFpfcs*UO9x)RtJ1 zLuJ9yd2?p=orJih*nEE{x|(hEYUrZMxXV_nA9INJU42{S>S=R3rLW<3j#*7g0hPy9 z!pXTYYFgNm`RW=@sGv0 zSg1%?o|<3aaMWI}E6CTfBHqKxe$Zh({ zr_zu{!t${*?b6^0mMyaXv`3XX`N)BAultd2e5`1J-JCsHLT44lj_zej6S(@W`TYaP z(T0r>0~_CeG{bkU{`|vzxgfM}>ql-j1!e1r3SKFg#6j$BQta|#3W5Z^ek|QNcI6ez zGzi+3s7JVi%Lol~SdeY_WgfrSs|89wPVPF9OMT_!Wxv$6Wi#zbi=^3CN^G>G&Ekvo zevH%Sy=P@iR)}4~RUvAWjyj1O@(YNttFnZHMaC9k^0ASqs?eXTXBRfB*`DW85=bv+ z>ZUG!bY!(8`FPHrGKKkUD0!#Ist9Y;XIMJB{!kjTk@I7vS^NeiFd~S2)!7!` zJEZ9~WAuBmePhwrrz(54VQfN>EUJf1-DuPxD-dK-&*VO--R;y8iVI z-?{)2@!RPzIB6ji-;}YfC)E5&_SSpX+&z3^iJ@nq>8~duyP*0|?cgeWe(dGBL;M-- z2!Y(`hg%4sG7Iv6BNz&u=UrE&otA#L>c%v99do&mJ4mTQO&_354@g%Ua_zq#NDaDQ zW;GQ4xG$2S*#`GS9RWQeP4`iNb2LRm@YVZWrk-=L$GWPrtX@Ds{FY|{`vYC0MYW|H zt4tf8_Dw-LUiR$A`Jh{>c>*Hws^0v?G_z^+w$LMifjA z)Mj%)4N!#MXw`^iqJQ6UbX?r>3i5*GU#%csrj80;KhpS*Cb_c?9;MWw(S1T?BpRbh z;@yHQAYorPVZ_6Fu8JaF1g_i4-HU&#WXM|(W;q?WB|qzH6;P%hB9mhsH#@QEFs#i< zk!rF8Ou>N7&P$e?O?iW;()R&V=ZydH3JN}n&ERI^i-r2&gc#iT=FkkXin&2{045d;sX$=sWHGX`Y%6 zl`BcQnC2NJmn+LU78<&FmwTnvwp9vZJ941?4c6>J*lawuNmJx za=xAT41)zMey*-ZzrXq8v>mTBYqMd@x_>6zj=#ke&34$-&$yErX1CK^Q35)&sRPmBKf z{|&KQ1|SqphD3$f5PG8U4k?2yjql*H)hi-P9zuzzZYeH=NT2eWJcngo0rxoNe|koS z6Cj^<<9l^`8`hT*U>X*ncK+Fsc;Wb) z5_Kv{uO@v@)@!mzoPUo_mRq76AvytmdWxiVz>7x03zVK>R?#3hR7g+;GMyzxUQ%?oiC?fpSQ}vCM4%qnZI6J zy=%}@C5-|Y$^{!!MU#R^Qi)93dUkVqlBkZ72*+?uT{;w`!5H09?eW%E8nt7~(ket7 zx98Z_n22ZpLQK>hQ@anfU1<9?5WpDUD)-IV+_Nt4*hA1P5(4GP(5#pc4GrK$gzmzU}SaAwIQ~ zFH?(NRXmE0e9}t1njKj7r#|P+r?SoxTxdnnAL=y%6%`Rez(Guk*^&kd^at4;zj0 zt-&5Qh9&d&Yh+h>pAWrH0=}en^)sB<=^IB0UH)9iHpF?aBtvqdHbJ+)%jwgG7+VJM ziiJs1en<-sSR1^cW19ag7@MB%Zk(}!l$kbnYXA)UdWJ-ys5w_(->lmg-Za*C1l(w0 zxCGU&&Y;o#5IJ9y`f+6lpUR0Ad0K7#`v;WI`nzZ2h=`5iof@5!ny?q}xhlvmrLps@ zJ7Tf`!RxOoqr&f{rP;N1*sr*k7N{-_4pq9Y!!;6KB(_rCGGH&J*<=B%)q>GA^#fau z;d)XVztm)MlI+AK?hgwEH;EMw{+)9_b@R~whS)AauhNe)kl}shr{R%6UIBlI(ir%$ zDuxACazovkxEU)O96zz9i+i6X+b-ok?K8We;k7<|X=sh4`?8OS-aL@Rbt3Bq8&?60D#rJl1{XmIh zma|Z(rA226#gEWl$X8eSjqXZi>n)d{N$GE9)5M|&+Uru8%z}?-KATVN6IfO>N0Wic zk%JZa#Q=U4uM*CY{0K-!pntt6f??uubEBv=j}Z=+`bdQ5d`Bf_jmhqUT1Xl5YQO=a zc#i1z*-xzu`S*MxCx-n&w_yc0tDSydo8q9Tm!WM7fHBaLZ*Flps|>}x6s_{x)?+fu z+n)5^C^Rg=23Q@Nr<(`0<7`pufahNI?A4B$fbI-!|DFLvZ;nq#!nRkPp)T&q-%k%3 ztD6nkjt;?DwWV1yHFh7@r}}LkQ>4$HS)_0L4jVJ{8{p?Alzfvhc#d<%B{tH2zA!}d zj3+v*dF3V3ehS1uahXOfHi?(&m}?R`c7b{H} zPkcbJPW-_yUQZMRaub#(HYR!khyd9b{u_1(mD~I1*gpM=pqgjtSM9}_M&34yOMNeV z;awj5PE|v1ICuXFnF8}GxB3%wFQ*?spxkb6X{_nyi6{l#fGH>c!_fJj2F$L@%oe48 zx@#f$fzO!afme99M-@a|0^DCMlT}B#9vsdJ&3t{uP7E9Y>|(yRD(B_1gs6YR0vzY9E$UZXgyf_N4XI9pbi0*P_iQASk&%$eOC6q=cmTQ*!q_c{um zvzFc9Gek16;D;mJ?!GgP;XC$WYUge@)VP$;Juyg7be@JIY4sSdXtidP4d@m*u+dp) z5!;Y0JidxVnURXs?;jJI3RIYkZ|0y9%i{7XR){?c&eIGgJy5NQ>B)v!%G7+~6 zyBl(soL_!Y^%&SoeUbWN$a9bD{;K+|m&=YiJj=-=GUHX!FT>=?8pP3+n8+duJa#2d zSpx9X#DQ*vfwzTkcyz%kkPHB;XCxkv=GC?~Oe&v~OGVS?VdIK`sa?iU9Ef?<1+EOyVoqn!pK9Xkh zBID}HOrkYMZS)8F4BK@nOLBE;4}GZDC8YMa&J@FN>em20IXY&E-W5nCydNTc zo_}<%1{e>6gqv0t7`s3$b&Mbcx`&iA^JA3R0$|74h!a66YWERmresDh0@9c}bTb+( z=K!2~261aK+A$~gq*--0WNHV!I|gv*hiH;%&%_b^n$eg6iYDQBMXhOd0fY~2z*W8m zL{B;dv$ECPP>oLNL!!jTWNLrWw!F=??=x?bp!vpH(6~*5hv%QyC&4;I55S7}QKF6* zNZ=ubPSmC1mU^fx&Kp^WU0!5O$q;%1%MT9A)-?4wuo!Iu8mw1^(0JSykDA!UJaa2- zZLFKXMAe<3`MS-c##_f~ti%d(@9mW7Y0`~nfZ=@$Rx~exf0jkOJ(;y9 z`6_iZVPiu6Is1IaMrtZml?Vi-l6a!Y4iCOWb*{aHzo|{(PPwc2%OnlWplW(=(C}F3 zx+&lN$9;Yx0SK}1(j{$=3uNPD#rs~g%#O9a_=k!3@5C~jO3{yC@oi;RQ%T(qNiKuF zaC>vGBLJ0VH*@*weGUd%(X6mhMnHI>3|#vB1p3pu{TQ%zC88YI5i^77O7zQgmaP@~ z>%&-Q9084r6cO?@4Hm%9H7TTy3$j6dfsejwrcI@&I~J1jU;_>T639u=ck>?}ID;SR z)d9Q2Wk!Hyjs0hfW9)3dfNfO=fH1Mp)E@Q~%uw!-2jf=l&WG+=>nT|&ddb+r?dD%b zR^4UW{v6p}HcO9X%>zI&mfCw#L>`hNkc8c{A05tw*}u9KlsV_Jc#rJ0s>&S>Y#PY% z_=-G@8xv%kA*1mS&Cel^iFD6oXNaJ;a+RY0(OAFN@WCg8dWE~@AD>?f?*wi+SF*Z0 zW5h9%xtO3i(~agpX!Kd8cBjUvF}vxV1?XZa(4s%>AR_(f${ynPmeF>zaN!qn;nT_6 z3OKV*<*){GjvV1K`|M`dYz}n{!gMvo0uRyGpo@)u&JT}?L??FI-3t%%9)%8o z)PoAVg3J1IL_KGb8HkFbppjPDUt*gtqj_x^@zqRSb`KfkEOr0FCc6Ouz(lg;%Tz~A z)V(f~B0Mg~+fZ$KLcDN7wnaiw{y&+fxncxlEIw%i-oZuQeB4Y3kCNT-yt>)c25izXP)-3;N$g;0 zxoyI^9}%4Z9FkZ61SnU1xedFBu?)@m&SJY*Bb~4)wEb8hwCAJPWqQHU_isTP$JFZr z6-yz;fG3DOYJewP-Vdf;GWTL*cTyp;xg(qIxNw&ISHWD-+8qN`o0qp0L30^<;Uyford_UvvzoLQUMDH=(y?o@@PjdckjvQbAoUM z%uF_awfo;=(gX0&& z$cr((=rIfJ?+lMNuLaL6UL2ErojC+f6Iu@NzhW_)MucqIe)xT`74^zI0gq8nF(cuG z^MhBBR{{SB#Tch8)Dgcy4!{Q^Z^F%VE$Q7X#gdh8*x;x3*{%!^x6oI>EncT7`lThQ2{2cFQ@pYi6VB&bT|RFRS^?b#F(2(Y zb*nwZq9!F@)i*WQ)J>^@wzyOB8ieuN(-L8NfgbMTx4nLJ0s~vP|A7XIoY;*^uz4&_ zGrJSyIH9b^qvdJW^g$Q-fHLdIIq*}l%7b*jC4*u%?I#ui#zMn}m#$-GGEspVos20I zhl@QaI_JOLL|5$Rztjkhcz^9MC#b9A8En~C4t}}AKACq;b>s7&%ZsqYRcH>%h88*P zmh1GIByBC|OTv`|cX8^%#2JB~o*{g3!w){$*lKfWvqYLybGoYWXZl^w+%hhMnBKWO z&!^PVNAgc>S$|Fe{y*gL`3g&HCZbz(_P zbuK1YeVZ8md__B)J~R^xE6LBF+uq$Y9J#6TI`5xq5NW5M_g@vfX9z*%Ctg%opMTXw!cqA3gp`UzfszDG3D*62q#nHL+HHd z9+whAh~`6|C-g#?RYc?@_vz`lH_GTf=ETYx?TdrC)CW~6;Qo&E_Zb;RTY6^}vndW5 zX4dKSVsJ|a-AxfI$XnX@a0aqd&x_l1mClxsQp0C+tTXZ-bbR1%pE1I`-6e`%Y!0Of zLmrs?Kg!lGBDjF-yf92UMCubx^&x)rf5HuI!g_CsAa zEu*OPv_yAFQfN4oFqBkEw!>>#_xL%O1%}d@yv*@6-8LN}W+*ufu}^qp`EI`18wLp+ z(UMFW>dBF3=DJo~;MLv)IFY+3yb=$xl(U2K1kTW^foqv}F&rl-|` z@zl2FjgI_|o0MngMPV1VnyUa|M=yI$M^xPnqaDlEnza6IQuB}YM$V?D$-7g&5=Jwo z=|hRRiO>oW*SP33Ev{6Y^3@igQmZtP>59X!^2kemAl4A3=~jX8RUu+Y?AH)+Vg!az zpX*bG+n&j3k6upYwjj^wSSw*vt^Ymq0E@ZFXUXo2Hk^nj>=RiJ%6a)RU!SO{)pUyU zGv3G=%hWMJY1Qen+R^S7p}75c*1h-Ltc=G)uiBj#_gjzxkn0}`Q&Lp;pbzrw?u|0V z7Mr=~%9RbK=Yg^AbS3Foo7-2TSLS$fRW)8rg2h&MG}B*B+GF>{Juoxay9r`F37n{` zztixFLN`z1dHK2|mm@qN>Dr>%eM0Q+FBbd~g|(rFUp%>}ZH&qgqE7x$zJ(nUn-}K@ z;0RLaMAA|A8U+?$>4-DK)W0!Vda+3iinj4b24qo%0{u9}qjoi?4q#TDV>Z6W1`RG?Gp*nan`Sw4~|zBj*vS(cQ1}{L(k( z4PCE7vrG`5%rccG+wb1WuED^b7&n(L|4YeoKZTwBt--`@TwZ(EcA(hj^_EVtKjf&N z)8|rB(Aj@9Y8}~ZE9|zn0QZ$x64n<(Hl#yR$0Su)J_@BkeZcH1c3c;&PP z9>4&(>Hixg?D z+9rm>K(rL~$!|yKI5h@x|FWvNab`?@5dytZfO05bYF`)63Hx+oZ{Z*1(+Bx}fQUGF zHe-Ja-{RTM=T#4)9WajdQ49ZOnx3r8T%ZsCl!2@jn*Q?b~4!)Qh*@srBNi(&?$>r+%(Jzr&m& z_mNAw)FAcc0yWX`5D#Maih3eN$xC875}=v%HpgUpc{v5xd6EDwZZaFc6h>I34BA>1Y0cFX&b>6tZd6DH&DhJ*b2f->En}0E4bDka~Ox-t)O!{KPQf6bAX9YD%N^gd3e>;tzo7w5#q@0Fc zg#{mmTc+Fd35Io0o2yPF=EAgXU3eN9J~0vD-d{>ck7fCvpa zba09I`O5!ZI}Nu~A0`R8{i91_2=<3|v2+2eZIrF!oN zH|cm8yfp*4`U%dq9^W1Z1TDDj9Q++WnTdCw<>w0cbsxxX9m+W;EotD@N}NzCw3d^~PT?hLJa-U`Asd`oBOaPC$IE}eIIYh8@Vn7vxY*C0+pm@?b5gQCELclr z?X1s3VlQZ1Oqa2HtHdSHXvKmp4toy#E>BwT14k`8#fKbNLQaR&Pk-AFcN$HQ57JC2 z7Mh=CSN=-w?)Kj}r59{Y8Q$-}J2@&KWm%L5934EP1#248)W>b#hDkIMQGj!NQKG#i zjda#)OH1W~pGMFBofr-%by=hzL;KNxTJs(jJm#pK*HLMC*jlxgrqlmpxv@OUso)Jo z36kt=uNag9HEOdMlq|Sg0Mo6sv>B9cE!;Jw({hKKoiFbHbDfE-R#Ld(xzBFe^P(&o zUq0K$E5YrRQxQ{^Zu;d31`g4EkXs@CROkw=lpnlu{A8HetXC;U`a{UQ^1gDv2lU(h z0Nl4GYtG%jC$h4U3E{j9a&WfjGxzEgOk$jt>j-4!m48GV@u5$86m4~Uv}HSt-kYek z2=9DEF{qUO@Xs35r(SKk8C_=~>Atw%?VlZXn_zF-{Z)Cs9QJ)-zPm#8m;awKFUhj< z)}Ir$3t;4g_?WEE{B4FW?t(AAJoqg3-7w8^6ckos?H#s89I%J_KJ z-?`k-nF}t-Y=IT0j>`P|6 zz=HDdJV#AjgAUe8PlWd@vNa+v2bwL46M9j}dza)NFrld|*J7U0?iooDxhX%%&kmLl z`mziXt^%r~rFBP-IBycA{*1y?2*|+VIZN35FTNoP=(teORa)-seYai$qX6Y^K>u22d z|3UpH-Q51FafUo;tJQjz^T(jr@+F)}Q*dy4NANT@3iPUp@sicTCC_5|vNL{`KC>@b zt9CKP;+jFM(qUamLWA2=BpY0wNjvMN(RFEWnDs)7aENUjC%4?{yNdXn?unP*1S{~4 z9CEtZ_0e>b8E#?Eo}gvZT41o?-)F~GWB=flPS#{4c#(~*^RyZV0UZmzQ;LISO_PAa z%HFEvZCthu|`+Z3vLhq*4Yp zP)}euK+I`=Z%j9A0xHJdk~X2YXUw|K;!Z=$;pINXq6D4iM&JB8t;qYG+~z%@w0#eI zOPq83b4&jy1oh_c$GQIXsFSbGnw0~fFYw>H?4cUw4GB6@0_-n3eSBp1WxaI*RCHDm zb`f}96kB4~s&|qS_`5xQy7YqFwv42+wwxD@bAQ$Jov@zO;pG8lMoMnE?K$d% z)CxL+hx^lkW-ftpp^|KL;(HFanQS%XBjx)Q8&pzsiLog{iasQQ+dhSHW$&i2H0xF3 zK0pP0d^^TBGb02Ih&O@_2f7f#Fpj)-i^ieTyi7Z-)wZdblhRPc0zy-a&&ZTKNB7yZb z&?|Gs2Glw&h7+FIGKoZVxB}8?`g}^h3ZA1|o#Tc)yMTj>`gQ7ESeP2&=vh-AaT%E! zbgG#-I*W1AG~{)KA9YZ#+Y#T*k?ha2!G2{SQZK<`L^LUa$VJv9%$baLJuZhLy8EXq zrINz#^p)30BY|`JZL2z-kz1(e&Rts;818a5B&V1BSt7hJm__xU3M@YU zjL62v#;EbRm@AOXxnT<7Y*c>ABeJ$?(!hgjL&9}|gbhN37?V&PCaFSHG<7mO*=*@r zxNA81UTQC(!bh^JR|9ggev&wu(E$kgqyVGksQOJnj~u6_8sed>kQ8>CyxPrvsvQSb z!gHb3_{ahVgw&|2f2yKHj_&N^Z0QB%p|G(5a=Q;e*~WjGL_;cF+iw;~aa`x{u82*3 z*4rt6Vy;@qItP>gSA8z3n<+F? zFL0)EJ9A%6FNU>q)#_i|=_Yy3I-eFdGx>=7Z~sn&dTPMsPm?OeaW#t^Id~mZYs^c( ztI&*v>MWRB<(r(Vn4D*(8}&B@qdY?ckHLZPvfb-TjCwW04YkW-$x*Zq|63dddmV4Ydvn4CjSN+@zr*qWFAr(@qWhaSgcdD zOSN0+2eo14*Bg3J_WJL6A-a_Zl?CxRTB?*XJH_EWjaGm_RH>9Wl7dUws z_nj+-UgnqQ$N8tybp*u*1Ez#xrOC)jv%@^4?Rx_QLpekjqF3&${OO}Lr?lXZABX#f z4aS*jd6%%Nr~Z2dDw{PSI|UC^iG6`vJEJJI{Bq3!kOE&z7%k0lALB;Q%!E+r?t~e( zYI-hQfB!(ueopqZX!p!=fvs}0p=`5*)h;GHR!zRX{mFC#Kd7}KKVvV8b5mN&62&4GxW$Ph)c)E+COU^e)nLV8gg6 zTI_>##%dKS;kPI<9eKCKcRuTR&Wklt#QH)CIOi|>a6b8W@cYGv|I`@T=$mlySAS!Z zJmVlB!D{9heYKV&y24y4?*z8GW6#Uuzg`(z9FyT%>|3ntQxVEG&kQRr{u$y#l){@w z|CN;Ja2n;WL&fc@JCrVgE%MD(NZ09DJ z1QieWCCd$G(3LL$_=l;_^}(^N^@)a1_;0(Wm`9TxZzOaPVGLvlQ=@AO5i&tXBO9hf zG^u{>$#~L}wvN*0=gR|N@%R1*3!KC=UX`g9P#+GKVNtxiL69;RP z!BKY);GKuRqX_*(0N|}(wRu{OIoJU)lWzQuoeevZRB#hfKFCxURcP7>DNI&#nZP*0 zeB47{js(~}Q)~OVcBusml2(Vv$iU2G9Fso$MDYkVs7!WEk%Cm>(L5$DF^=^Sqlh1eTEQ}TX|gckiL!g^AGMYA(Scejg5UDcp%USlDas|F8{8)1 zCEHUOC3S|n6*Z~)rVF_GHqzhyFfjz~&`Teps`?NqW>8(9>OwG~dy|4+MG5%!3uJ+F z&|XCC-oq{P9R1-V4r!Yo)5AfeGWIX5%%wVC6JB1Hws-Cpkgb-@wI($RGIb-x(??Yi zTjbYCd9PkyNJYy*tRgeH{-{Us9*w*_{V*3fpTx8YXrl@_rAqA_ey%FY>0Z};0qa$= z7#KXBHn5g$OF!I9>QmAIYr=E`^p*C5C86-w|FEO(R12a{zvWDn?+umbgs=j?j<`jY z>0JsNVeZM(Ly!?st5y{H*n6Bgz!F9$HCM$DIVdAh+4`&6`YO7b$`>L$9{wgZ#w`3A z1`6ay!zu?r31RYxHTLuu#O!3b%L)%WCB}d46~i{(G+_5Q%ZooI=d%aT9f}MiYuO_i zd!%r&c#+<7OX*-Bdex(we#L`9AbGkbM3?ATbg+{>?s4VH#-~^5ThSRF?^b+|UkKu~ zCmYNg%#Q=iXS^RSEY9ou0k%-zTKSE&yv)mKpHpZ|FJFkDdY|8G)$SpJIENx1e9S&i z?5;+M`-ytH6o|>BC4ISGX06M5dopeAQ$^Acej}Uzn76_`+6beWbO4#|Mo2B)=USwY-cikYo?%%#Mnh& zx=E1FXV*I8$=4czTeTdS;Auf5b)!=+(8IeZOuN*<-wEX*no?`css( zU^e&gG&Whl(9stcw$rOofP)Rlqus>wF>@#fESrXujd!s3O`mrLv;jWvw0uTc@huST z;eH5;*O&6>)Jto9?R7}2w^ur_p>aT2y}jRkIfX*((+UNEF#lB56?Oj(D9ri+Q?|+= zmoT%Cfiq3S8#hr91I2qx;tfzPQdd-$a`9}n@yUyT%I#%KEx#hxTHsDq5n*obcgWL; z@$S|DDtp1=WowNq^ZL9WMj4Fz1@+tSGrvA$!#n=)eH9?^_R<{&#oNZD zvUyZqjCHj4_2n|7>+c_5e%ExnOyK>z$&_CxsGFM~jlU5@#R77KSlPsLCyU9yKi~E1 zj$;zW;n7Eu)Q0sqC>QAeJ9J!(F~@R z;pUxMbV`sHXwkGH^sfcSD@FEcJ*#)LZ-_P~RHI_Mx{58P^U{))r4uqvigq*Zeq9e` zZUt0Ub@zXY7V&d3JpDB|uuDzQVLkGvmr~UB z@>EcUblpK~7(Ly`SAkjdT;`H}_fY7zN!&0JCDlqT%B0HQh zg=kO8ftUf(d7do`#pz6*qB-RRLj!>x@E+>bw65+SmUY;beZQsHhUQRG{^iKyNbPq} zTTzLJkO_XabB9?d`OONG|u=%Si`4yh-P~Oa)+V(kj`bj66s3 zCp7eX(9MB?ZnWd|5->~d>KYf0=0ew@8DL{41=0je$~V5fx(<5HhXeG?!s!M%3lR5w z+ZlDcP^V`^j!uBjUh%XMIt=RV;8T+&r|Y)FQ+kk)sn(ZHHTj$&DYa0}qCvn_+9=|2 zCU*3K=&mM&(9@tx>QSC;*9NnSj7qxH$xz&sGdGuLXYaaR*pVtc(< zLJQW5Vtt{xL%&?B+2<=-uYxSWsL%EfvEZZAf`@tj{j>skA&F<^6^iEtCh1w{Uoh^< z=SwjlHr{i^Q)0oDa6?CFg9qLB1!q+Jvu1RT4njka4up`YxeGR;$6m>4(_15=BwPPf z{kqzY9_1j4DG}##I@Qp}r_tGLNVH9nbyMl4@{&WB6SJ^@2#FpsYD1_?Yp=rx+upKT zTCjpTe_yn=YRj*Y=mkQ}UElZQ7OP)xHS`VGM)I}G+olgy#uNgn3*CnAA=hllTJ3zW zZ0X2|A1(7&wGP5u{!m%}qxo48W)a~*erd}QPg^$Ho65uM^xK=UbUVnrn3u*=5zL$C zJK{-43-;rCpfdA^IVaMEH(nEi6gM(>nhp~wKHi?LQ~?$AWy>|?Zq&FBW6(}c0ij`V zd@VRk3V0g);J?Fvhg^+kifn}2a#8QedUXCrV*x8h6zbI6US4OPH6DMYSRvnWNsTTs zH=uZMq0@`_5HM!gtnrAKtfvz5L-V- zLzcI>|0Wi?6o9aPp$-tN6h)`JD*LmAt#!8tfYpG3a5mj~@3hR@nx6^43huGZvTS%? zFnc(BzgI}fy0?yXu|ZF(P6y7jgZkt$Ibqg@JH|}G%KfL7f}ub0?d)Wpm7hSnnGwzy z#@}B$gb$CqCAZ6ejZj%Pla30}Ae!acF%|ILy)QqzMas(Zyr`4HX?TIh$EK!!4Ei?f zMYkh&YL?19``V{`T9Xk1^dnjiXnqJ(gVYcY`>C9Sg2)e3_<%s;e)czh)Mk3k}C?GtbS*^)9qB{d}Ei*8Voe>g}~rwCdpupZ0$= z6$PI@b(!P_wL1x;{VRQunsB$*IFH~<<*4>FjDLG}QgDmyH?uZby+<$+bulZeXEGPA z8vR)PKEK(-HEM`$52;;kO$GcO8u;x}734}ol6m?Fk478AkEDXfx6>nM+Jd@QV`!L; zwtMpU8FxAdNa*|I^}`TOGNy5vqDahQtdiv+UE*>L<5L3vD?=F$dg?oG^5B$Fh*J?? zjHQJ2KNsvh!MdzGpnEHxSgP47Z=XX7%svlaktdJ8n+35-EFl33WbH~+6Q`=o+P$CZ z3GY1H?+z{zBFM}4)enTp#TS$WtH<_#&>X0OJE(_&(Zmqw08I1@P`rklsZaF zuMA2%<>B=yCr)Ejj!}h?H^zYz^`xk14yGv-sIukgCa)09J+*DrJ%$p^6dhsxgN?F6 ziKgWVaCS-S4;rQ0Y}dN|$^XzvcEE#T)Hp)e6MGiLThnmkU_E@Igz_Nnp;!4%GX}T5 zIV zl-FdFoHjgko*dcT&Xpq--N8uFX0>Nj>Fe%RE-DZpKGkVo?aWdWNYtsZ7VF6wNH>@O z3TGg76peS2@t8AT75)(LjqLDaCQR64wqm8Pj9DKw@J()b`b#-t8m`1t*fjZNvNe~7 zrK(s5%87_-=bZ>&@xV{LC9g*R1U>?a;jxqq<|_-B}|fB$mdILkwn z9Is8QTbO9dezne0k9|vPagI*22~%OLKEVheS~>~tw$Z~r&lRT0OVZIoVEuq$y%+~G z)*buOwMFG3OlLZ-*j{or`wna8 zCuBv#ujUqQHT!*ys%y|w5sJYn;*(7@-B{rst`Dm3sH~^w2Ch^$G`2K_3r|mT2^VOc zm9aWo&uxt8mZ#ASIQ+Pr$7FD+O2r3TFdq&P>sEJ0^VlN9R!UHTUxAz{I3m`tU{sH= zn4%+AiO4o=t;d3;i`10ZPm%Ha7^up|$Q^8PYhF!Ut?l}vi0lYrR1F1{>znFbl_r;J z8CM#X8b=jXUem;}I!~l_Un}j(Gcp^mJv|m3AT&CU{jh`eC5b4O4Qmd%lQLbfrRQ72 z{W(S%^TqO23;Q0qRAEGHKL}&q)26Y!|Ms7%K{xd#VFHTo?Eq$KMixt3)esxw%;lw)|2~$?5vo5HB6^=;DIyH;t3-8-bF3^m7%TUS}RquTi9G$r{Tyq`EKu z*>2wL+k8okjr)6xeu)*)Vbz>&N>q>Ypu3V2YHQil)N=h-*CKW|>p^BiZH)BJ&Dql+ z2NXn0c@ud!95g$6OYPa(EO!vV6rP4wLg)lzq2Q-Z1`C#?7vfo5o zTi3IQmFD=VcY3_#-)Fv5zR`*mK5dKq*h$v_sc)Zl9B&G z54CwRQR*-+)cgI~1OJm6nyZjNZ}Guz(k6t1GLh>w6S@XDYywUY&+J|Pz@}op+|l8-4y0r z8v?Baq8w`}4J-zqw+Wm;{Ip$V2zYT+7+H4Wl`fPd-J)okz;;&!PIsP2y;g^Y!fj;F zn-lDdtkzpykO)iW%hND@l*c*rb8RuTy-1^;k1JS$+=z<|( z2}`=|cUF=h9NiFwUqmj{^*5%aD+k})mA`G<%ed;5ft(<6sK6n5CD~$#erZP-Z>5gG zN$nQbk>3C!q1Z-hWu6U8%hHu;F;N+vWXHP*K!L$6AhtnNV#eLYOPn*9{AcGzEou4p zySGy3T(+MQZFe(c*25%1%r?2Y8h)tr@%2-$9Big$yuW}>>VTaUs{cTW8+UgDuKQEE55bgQ8rm-4ARM2n0p-!dn8$M62*lRsRhO_CHx z@41^qs1{GvO||u6wxYA>3O|IIzfik#{_V0^_=OO&H7`)S8jHM^_5u(GaGvsP|E)HJ z;=o4jUjuSjf4mZ+H$W~%rc6LEIk1Y7JWCfG-0cI^cvH5*@RwJ{jtJf3F19;@_~lhd zTE^>QxGYv*w#7ouDbmZ0$KZkM^01=%y%CM3(@iuj+HgkTWD=+fpUA0JQ|ho}+b#v% zNSS(ch{OuxMWDw=xS`!=wCb9sWdo+_RHh~-G;7jdv^O_j44%D{hJSXup+RbGu8-rC zt8tQJk7fD28dhF8?NMgL&hNvSOX{DfZsE&?=5IW3`~9yTzCu7(N_0lUug!jV8|1gD zdh_aIK}OWOoR-YJH@jJTjYXL`Q#K^{V1N9(BvE@M`?Qec#ldL^drPQWF?MUV79Tgw z`M|CrK_G>}ODh+#b5N@ONvYzhg`gF?w@Pw9=jvM}{`Q3+QgIgeHPUv69QLj_iQlt3 zMR}Fa=fo+`X~%q6q{D9ePL$&(@d7wVs;MPnz>;HHHQ3jN?dH4~fMFXK!X1@2fnYFW+Qb7!3!CD5H|RN%{4G=57MWYl2I^V_teA~hyDD#G7c26c3SBCkjTeypXH#%-Bvgpv3@m1PF6B_%<> z7i;9==>ZrV#u4n{7O>@}fE^ePMG0NuK&iCt&b35iYG?a>tNu;?lZqa%>)&-O@40|e z+1eHDo&}8`VLXJTu0K@T5EY_p z2NP9_0wb75wcbFHAGfl79t9=HskAxuaQC$Hk0sp{w(#Qv8N^ITyvKMp#WPlJ6{r(X zT^_%AdZ|jp>00;~gpUD1p|66yqXou@ld}%!<5wTUNN^8cGyE&%XAQTWlsy;F{a&Zt z+}7S4!)X`>V>wjm|Br^J{T>BDHYU&lT?fY1qd4RNSq^y243DDT3L7vBNNQ(qXd*~O z%Gxq?5}j6;8=#KF(ViRr`hwdy?btemFyXj+i2iWp{F1)HXyuMViFtP*l4(Pxd;RD^ z*hq?SQ8nkhpNLTbGtmA3awJn1`AkKTfFZG2k#G)`5pUOY@faz^f;$6P6aza8-Mw!R zF{UBf!HkaeNr6h;%F<3<@UT*^n(eAKV7B8&bU&S@TsTvLgBT>iA{97mXMVx+BH1#q z!{-pyiAqUpS3jshbn|9Hh|~&*h4N&Ef9TApH$-~{8GAtX(DS)Mim2L|k$Eha9Xb1_ z{XSur-G-O26i>MZe8b<|ju!5Usb50myMC#~*xuy{4wwX6z)JP6YXkK|w*^zz)N;sg zQ8{5AbfoWO+&2A}d4szAe7vt32Yp&`B|p0PVl@s%GK}zW^tc|utQ78O?i}hrI5gm zX}M}DMC6Fs^m%_1E2}2_Rsqzr9r3YBOVhk*MmS~>uFi?L)Wd%2`g0&qt}+^#LQ$2a zUGwp~8c*7L4$T2<4Pfvof)47uYa- zv9RboOOf&Y0(ali7h9ZhIaUXTfhlT==ULRdyAi9QYHkKAJcw!1=(0^ixeND9 zXMPYUP9A5C>`}c5x>84Z2>7i;l8?^mpVc6H+Sve*)q5AqH;JKv9zo)-G0p$cJVMT* zNYMm^J?NP#b@XEuqxmK8=OOP6+z znaiTz|D$o)GB0?>bh-ZoM^5i*W{lrVIWxghDs3h&IN)A8eLj$M#S48TwV7dFA3Gtzb@3twUe8?M>{gdOFl zGD|KU7Xg>mk}w*tDuC~JhuJX;M#d=E+yiFb*N8I_dm*FrF5DvxUUd@Yjp-vdGo09h zg86uz-hHQAyJVzY=R{B03-+XRA%F{eCsd@-2g-P1TN^qCCMB z!O5?<49CJmeQPLGu6Bv29%`7Wr>j%-I=?cwLbD{N?Mxwbv7w3iKG)9y5!x!Ppu^vJ z4sU(-agToZ)AEgaP2SA^u1w|ig^3NQo-%vQsBNkv6?Y8fbxyps8z4bv496gi#bU9! z;Y!S2^I5~uU*{$}N50(-(vpg*(c(STizWS8IVEG39n31MHR$$@Sx zZgHp8J}xa&pB#i%amS!UbR+jm<~> zH92P>?DSzgRlaj4#knp&d1h@oK7WB%VBJqC-50?7h#S7^<<*YOXsGiIk(qnzXPT+w zHr@Zp?6yYRubwMMgJ{D7uf1z;Gm-Azw~YYc|Jzcns-}oWn1oh@R4z#XDdfkLp|+QP z@`V8ukUCJYK`CF@!?GJoeP8^)rZFzpw?pvuV&(btb{#(Z>LE{ zC`D?zcRzuq-Bq5urC`WsoZLg$$Wh4!F)lRQ)PVgL=1lR^kOa+gGu3p(fl7$Yq>7|w z>T9%L^3|bsxA@-sC}rQ!LNg~&gusPmnVslRa}MigVEc*fnLqGn*opFoS4-zJ5^7Ui zYAnsq=o=Q7gZq@{G27CXLt+;mcnZra_ie&gb-(X#+*8;8D*lHkU*Pyz;uQQ_ug-cT z%SWd#j;~L%EX8EJxE7ny+q8a1XTdJ^;CgVu842DCc~VH0wbd;gdc?q}N88 z(H$2+-q9%Zd4oV&@*=7Sml(|vicSQ^IVlLYVuWt?;z1WA!MP!MFGxib#}CahYWTFS z-E2vEwZpmI+})l{9xVcYo}F|3`E$zj>DlPJ^E%Y9SYX=iX-@@rLD=EoUM45;p-WV7 zr=$*b8=${(Zk#O?N;5RQK~%!lwu~p;wGf(CcEw+CNX-1E_;-#Bp-V?I&L4FV&(9AY z@iQ(^mzRojx6nMfJyM+BCMwb4dI}8I_EBBV4T%z^6aETFPFNNyXi+_ z2WL^*d@$E0k(+f-YUX^cMpPRY)3kjbn#-y7)+N zW&zIUevCz)Q(NtW#Y@%qZb=t+KMDSQTrkk(u1~Xkp}@sv{A6_Ty26ca8!76Yi^VJm zZs1;$`+s`_w|H!j?B+>{er_cDv!j+#HbVciXjK}hM&V3^Iptj*2=ZH7qjiVEpzrN- z>|H0myxk-;mFwL7$;{n9Um0B_K;tD9 zz3|D|=W#Wav`HcF-hFc%OT)N~%H{@`oL3csvzw+`@QmI4Kt1!zFCOT&7IJ|UVJV(% zKhl)mf%~19Q{a;fFZva-&BE`yS`CsKW7t)5nTPmF2E2kIBkev7hKV4vO6qLRjpd< zQ3)(JK4%i>;5=gj({v(gDRSwVdT*Cc9nUEPS3%gAnptgY z21uw5H3ix4rhX45^Zvx|7ZJv;BKmftf&A}I79p80*&R7q?dhuS54qakVU;F!cf{ym zI4!L69}7y7)8{$xHJpI}IBsXIKz|+Cl~!u2eSc}kV<(Q3|IB6}gfiv`nrgdsI=TzL zFuW;C6V>2uV*nuslmvWk-}kx3UI6bSMNYo#^rHUUwzI}#gX#%C+|0rL9JRQW0LL-U zOhuJVf6J}H8u2540?+yKH69T%!N7KL=QKp^_fOMI7w>s5anxfpzqbOhW1(z%cBnvp zs(wdoZRlX^P;1wILcOoxc7_$Hz1&h8UMfSFF!PQcIwd-o7j*0qyu_SY+ zn57qBgR~~iV_82C)lOO7h8sqMFwanqJY721>dAN7MHzB*LUGxn1fzgd$_%FQ9_v~A z(dr~~tO0$$;m8~K1z&E3$c!RvkJAmz7X3=|iU|la;Aa=*`_)3^A%88gK$I$!C}YCL z41btEG%;IYa$@%i%^s9#USexwFsNu-wmPN_n{y8s9@{rK%u~w3|hP#oxYBG9y1< zUs}TMxP`BBoSGQAGl;|w0H0AuyODZ2d?$qTe4eXCx!xmuQ7SF^)V6VCcP& z1XvO|zsP_RaZmnh1FGf3<5tg-z*wp4foZ|>ZSlj*(^E&X@HXj2y7!Si;>o$YEtLT1 z0!4+9EkAGt6-!35%nd3mT(%)r%%;2MIS?fc0SUDf@;iiT8J!AYWw08xL@pkw#^cV; z9EEigI>N|c5&9pp%4ed(VI~9ER(p7;RFb96Z=9Wm9@@XbIM29rDuv7_T4r^I8z}7< zb*=<<-ouw|S9gyE*%tTt%qtu?Om2lZhuVML@^aDuaG{x32>VuVw+4*7L#noCRvi3c z<*3N@Aid{GDulu`t&XX2WbNAN8`;j_jW-5;TgVrTW z`59p=L8Bz(0JyUMH$(h4L({p|rBbI!drz`@VgPJdc1X&%doyB-L{xk2vy=g?f+ELv?d2;KvUzLv?3LNt%0#4d)Ab z`GCt)TFK-oKW{Eppeq@6Wkx1yp8_4`GKIK44g49q3%~2{9b4=)k*83$=drDQ>aXYR zEeXCBqQ7$S=2Oq7c57r=Gi$3{%$ey=w!YgInOZpwE%o^!6WYH`yFfoli?CFNVYvTC zco-genl||IwO>06Z9W;JSqYp22L46gRSmSsE|GrWHu|5Hu;e6e7fX&eexd?BrJr1{ z)s8Q~aK@fpwl~UC5D|zn6QrxQ~?SWj&TsuJi^fU`7q? zf3-S>aH#N6cLs}m|Gi3RwfWlfP3U5}509Fd@BZJg{WNO!H!v?lg^EG7v#l|OzBEiQ zbrAYgtGZ}vM$dHBo5jduMfa8#QBs0xMJpTGLY3F0Zt3b&-<7(C*!#71NiJb=CCaLs zZu{9E);|EGIUhaAlFAODL#_OX)bBmW3IEGaR_QNdzOw{EQl#ouvWubBfIBC|Qp$34 z6ZlG=?EGXpDghDz@YpVWshO_1*ry_Ap{zGOIVIPaKkxVcq|55t+8Xsf_j=pJ;#b|a zF9m#@LzeYI6-s-Gyz~O!I$NibTI*`s3U*+iYsEIH92u)6gqP!9r`vt{Y+EvyuV@Ci zrvfG1`zb6Zj=B?9Hz(&0lv0+&v5`}4NxXEYe=PjlACs7)qLE_bb&a&bnaYXOvD?8= z-Q>X+WSMKtl774Bg?}uYepKFG5<5UdU+oh0?n;F@(olHb1g647)ecgZ@#NBxJ&pZk zZIp{$OC;Rr0{-O9b>?39)mwA(xsqvZzY;)g) ztx+zCw5ReO(gynv@!Irg3=G$gxy-+%Ijp2w* z1P=X=^PE(nPFw=18hC`-CF!6$)U;&nUX(ceg^Q(%Zc27U9IgW;ZX8&;9(F(!YObpM z+zjbpC9P)@vmxH`W8>hZnHf{5T}&u7_ggl{P3XaX>r?-|$WDHq+}j;_p?FUTlR%Vru z&-6BIi+ih;ML;WVEUshU>*q`*xB`6GVnxW7B3+Sag`?wfE1EL9F^uz^df1&hWX}ty_*p@^queZ*o^= z#BXq=Ya#9IABr?$H&KrV9eI$(C99W`YI;0+#7-p>$-;v` z{$lK(O06jfBr)2-sM8T~OZ%hKlRAt>!L$~!pkeFR(6hJa^;zlOATSbr_W-B^Qy1((J@GyTW_E65mGtyv7z18ro7^BnQEnG3s9v5P zoFB#%{=ODikeyN($uPIBX?CmHB;AMzj3wx-pV8Y3GIu^Tx2H`a zqhL`g@y&laU-JZ_-T$s_^tdp1g=nljOcCJD#tAS?Xzdlv^0BSFAJ&mTL@`#aCRsx2 zPD5l%)1|oR@ZjJ}rb~`fU83aueV0i6(D2nn-lumAt)h7t-mEbj!^EHHOZ2}~7d)vJ z1Y|8h*jjB%eIv9`G*)9#yPWytrS|fVq-luLhNw!N7k7WIMQKQ-pCw_ZppzPvaWDRi zQb5w}K$*mWcNU^wbo!R57+VQ(&9GR^{l>8@`6---Xu4Tr_qer#i`-mo)7sK__4@mE zCoXcOuZRPYntTm=(`c+tiMPJwtLEj-{ro%DtAR4a6$5Hnp_+>% z0j42cXi+vr5jzj0jA?R0146*3f6h9~VM~qA{hUsnZLqoR^#T5D`lcWN+&bK>&$0ac z_k3gvg)N0SM^^nAwm&`DzZM3mJLnYCKlx&M2qv^fI-#jfX=!os@vL`gsGl%^l>Hi6 z2lM;7JMJ8u!NFBt|27m`fHC+0Miw1hiWX*E&vid8WXfBFN)|=}o~slo?}?BbWw)F@ zj4L77n|F+}wnyGF2XQq2-jq;(>Hbs=Hw*K)TbxYq2S!OoinIp7$Kk`Gli!x#)`)ku zs|vizk`pciNa$YrJsNJ)W=CHR!rLVy%zyl2aai8PQuXlxyx*2voQrK zZ4X3{w#zci=&_&SpnJ5iG=xRDW#DI$51_`K$6(!O?<#Agvficcy}Y)D)&f&&I;I;K z0yUk@$QmlK18D#fi+&h+MAyKcg{$L@q~Eu?Q2EID_1WHK*O?cqTN?-nG#lf(+a=Sl zX|ruvXz0nRONsV41cL3zaIUhr$Xz-aOr1~kDXX6s8?hhLzVr5l@@vO#!R(?L-sZ2+ zjlc`2rSmucv9w}0CHbhR7mO>N_%ksW7m@e(@r1)6k5_@V<${F$5FgtYsaznvx0yQT zzx{G5&C^?=zvl%~Fyi!4XMwL)SuW{|Uj@8g^gs2r!7ncR^iC78_EwH54mF5stYL<4 z%9S2Vkj$ik85t}zp#4g7O1>qY^VQ}_vNTVwr_!1d&C$81sF%;+UTf9+^f0^gvv-!? z%>1_K4VHfeS|}wBhGc+Y)WUsM>a8 zL;H3%-N^ZvL8mOXX`9eJ1nLt#VVIx4rh9UOvZxn1J{cP(-`Nf`sP2V+zVL6og^&Dg?mG0p?aN9V;uo-`-*?F~yJ{-ZBKDImIO?Wjib z{;@Nq11F%VY{G3s`q7fZEw{XwTAv9jfBIvMSia?HG1Yml^0cje^;3*s&a=6anYu&e zEL;N3QprS&+a{$f(z!bB%6O?_UB$%TPzQ?%Hx(2tk~T3L1n2Diq}xX`X~%akW> zilJWi`Tl&;8JR7KKfMSk0NO((^+rr4e=y2j^mito_~hfOQk0~xuO?(scj8k^d)EB) zt%ZfcFH5oCr=!jBHK;t;EYEVNy?YSP!VTe7;iU(twgNNR$HGr|o~yvE3zB1EfGL21 z_=y*HjuhbiZ>43e&RN#(=(-=dP0u&%{u&;V6qtOP>70DKzsWW^Y#Byw-wJBkTZ{Uu z`f^&ZcyZ@HINy!Qk6L;|nV;6Ck%hhu0PLNu%c^_v&z8HRJO>A3^bT#|3)l5axD%R3 zr)@hy=l4#3Gy6zv*Kwb=V9hla$5PM|7UFLV&Kp7pC*+w;?Kpmh&d)iG_)JaI+o!pU(0^gX}b@9Jg z8~v)es*n;Xq3^6WnW&vuX<&IOw)|W6;j>J^kC@w0N`W2aN68 zU+ONNw!?^YH`V9o70Qe0s#;DCO1ej^-tfv?)BA#n?HMh#vGWZwyQvmyVTR9HS6MR* zb(X?RLpr2la~cv_4OL2ka#1K-9Ugu2=x#OL;*OBo(6oQ<_dj>Dz78t?$naXtu?dh3 z8teb@V`_oP!LS`eN+Ktan$(@x5D>>K{l9}w92Zh>b_V`<$yhsHH6#}#2`>ldnl#io z?sB?mYUW!q^s5{PFIk?djD+&rimkXf8EMfk0&<~g+kHa)L@T>|ccsHO5(k32s4e@I zffEKe{zo;r&Aj7UMHY@tczG=sf!za*>(DS~9-bHw`tFHxh)ivBTh05u)QbVga$t;V zf@3idp-GVeYE)My4fTq_yKwB?)qZ+(m-mbmn@@8nDIRg77;$}kFL|XAV4;^ne4XP_ zi!E5*;+NV02B6ge6(*3EZPRyw83G(&6@=KvY>@(*oL@rseLEWbiJZ%e%qO?5w7T61 zB9^*;!kjig+qTxJGCSSB)&n6(%F&6LfoRT!YDw{dYj)875{`Cx^`4$gcAdosd22Qw z&)8+8l+=~#cGro0uH6Rq3>{V=Z&VyG<$-M;)1=+A7v;W|Ap+>3)N-=s0dTg9{L&P*JIR+%)Q7Ik7B+Vl2@4x+6?q zwQ4RNwMhdYL;h^z(I3g);ru(|33uzD=kMGqh`3YHFK+(4^jqI4Tw(Nd)A|+R6W+*y<|2?`8!?DC|nhjcMz(a%+n+9E6NLyBynnZ(#mX#YbKH%08R77d6u3 z0MSDDho#)*sX4zwtKRbN%bqU)_=iL^9|{t1?7MU=`@tz)O5TI?(+f;oj6``aneJCQ z{kj>{rOFSb#l8{vfr3A0jdL5Fb7s+6KzxZwp*keZHBdn*n7A!(dP1m1kjZHJgK_CM zv6t^&O*^tSHWr3%S8blQ% zv|^y;P^!-WX6l|F)=bkI2MpX#09=`aZfqKw1965LM7fIsRNfD0dj+}PpNkpI$d*rV zzmAB8R9J14f5?pfQDf}@iEiSV0LGmyim=B7vn{0?^WELpWU5eydthfY78ZlpWUmXga0ZAl@XrDnLftU%h{OdFk!!vpn7wcgOdfQpmch>n~trHh( z8xl`Eb+*2E?NjZmD!YrvSB?vCPe`wDCqNIC)%QK=;f3_!MQkD>l8lvrH&EESKthht z>5{?)7~Lr>Od3K3ZSE~9bAW_z7b!rYKD=F6$$4kPdR#dj+oe^&(l`+sX_2Z(*{i4i z-tyOD%#>dE1T|8gs66}M&*Rx=dd)Wrh5uUr_xxJQ3q`QiNUIt7*zYU{AEauB$a;aUs2jz9))gQ73E0=A3ucbViasLyW?e0GuaGVqU2=*V6fIC--5R)BFd`wrTrg!#sM~fL<@&)#l z{-rL^9FE(XEAOfO+@|*@D=I?J{O}%vRdX9n>vPru+<5Ug9$UGSY|~2J>NtuAr=Zyo zkDPZF8#X~lg1(S551Jdt+9gm@Mi~n`VjIk}qsvjCyEMzmTu*9YSN*hoF4-$S$^}1} zEfl6#^D9g+%(-nmC$+n09!vI)4S~eBpP(i%_@WokuNb;fWPdQ;n8LdSqhJL#&eQ#@ zX>(cFaPPq5MC{zpnRU^+Dhv(lPp;C;`gfJQ(gV54les-EaOUybiLq)=nb(se-0C~3surODr-t>m&NAT&LWR1nt)jBp@H)1Ji3 zlw9Y7qZWy;Dl334ab`Fq^w=0b?T|nwhFY?AHv4B4lVN9@d%d878O0Xd6PxO8GkEQh z{r&b+K!$S^pUG$?sT;%!WD#0E>@^#EqVoP6Fk3{;c;3tMYg069d(ScB>kPp|_|~0K zX+{?y9b%3%j61FQ{k0$t)luExycXroo>ZliUlrP%N{w9I!kszHE>8`1TNUM`@Yy@} zmEW#uhzrhJy%t)&^7c#g{i3ET*s_u2O#4quvme>EZBk3-CP+#VQ-9Dx2GR>NXnwkU zC-ZFf{&Q;13|x@ZO%iOCqNt*9!l7dMoHn$&`25fXR6@ZeK!ghNS$k&>!R4E&#S;XCE2K`SWRJhDmHFcig(sB%x^z;PW^6e!-T3f7lIlV7G`<$pdheA#88L-vrU!| z_vWg+?q}^QX7$TjRmW@YYlhPDkusT8C@`NMyu!HrbWffxWk7iPip*HcGGV^Dd3_%B zaUD&)vzZ^cA93L|pCvsj*F@_@DP>uwci@Fd(A66F~SC zTEtYK%hx&(Xo52|s>3EC@A&4f5tc}{heulJS-kO;ms_6p+{uLDkVoIBhgGP=O0cNIWq9XoAVxRci5pF%f!2@QY$v20i~{;>@I-555?Q|4!} zzAd#1{EcQdvYwDWQ@(k$ov9u2+E33J{T^m#9dU^TEl(Cq1z@79bqrl7YkmuxmjCdi@eE8%4j& zBE8>1Z~E3d12h4_>7Ye6YE?9kQ2~8pX=Q)kP8IODpWX0talx%26IPAnT#ooo&p1D} z3)wkpE*k*;j~E(w^8*6++=ydHO_lM~l)&U0=F3ZqdaCCg^Ic$Xc(bljLTo>mj{9&% z>ox@y1L9&pU?MtBFr*}WqlYOlA$wm~c5+%I$?UiBJt(g1w}qY?`ptnRU_ZIIUIAeDqI`8><(% zaVlr_V2NlJrWC{P>lm1=bqHC z3>wql5V>7d2$lS}um2N)t(*D&Fm_;Sv=VuaAxO=NUF39weFJf~iY!XVkxWKvqrlyI zDsh-KJ+~ybG`4Kl@x}C;!mZib4#C4=!GSVFhm65MjT+E$co^p}TaO4Z|LQ%9vCtp* zohRDSlSk1DttKYfmMi29soBQCd#>EjX{?{IlHY!h6&@WlFj}wn2+qe9ZXB z3o+UkZ16eZNru^_XJpgI_dUMLL&YEc`97-)N(a@$wg`(DLaQP*d*6{>Spm-_3u4KQ zs?3W(^rw4jBqb7i8lgY3JGIA|t0*Px2#0kc&wnK{EGvgUI8L{t!^2CR*Rl>rR0{_+ zi+`^%`$!E|`B97dym3-OwWMh=pcvb20W83#ivt^|7#v?~FgZF&l4optc|uteIKMa! zzU3rYR>Hk4TKw6&P@mVP?>2CMXs@^Y5jN(EYVJ0$S3DD+Y5q3fKolNf_i)_Lgu7IC zNEvgvN&6YVdW~el;^QGNdLFJ3Fi!V-&2^e5yhNJSvz7IHujL+uzr83GDnA&xPB7X! z{(uz2)36H;J<%_D_9s(mpvAB>15RipTzLBDI#Px@|FL9E`#?@->8-Ix*|2xS4nOQt z^25=OPd@-4!gk=>eh~_24mXu{+w=(gi1A$s2dl9MBX!&!I3KAvNl}8Pj{gpD`6&Dn zW!8OmTl)fWpEt^bc|a$pM%vn1S8jm_ScWP@a6P3EX!EKawov3y#A)v)x~2zprQbO3 z(J(Ex2f{1&>ip?B&9X8U3zj19PhSBQke})~e>cv3#R(0t=9>#>VD`#K_3q4Tx}Z^S z#F|Uq{`CA&_MNTeH&#MiUH*BJ&{qTel=v=>59>h!<3O%M+nRUae@&;U#ae3tsy6o!KXkanPmw7dLAv-=~P|;$% zF3JQfh=`!4l6&fF2ukwf0V!GTLR7B(ApVB>+*A7FDQXMfKU-i|0W=WeTsb`#e;EC$ z70?g)fC5H#Q-e3L3(77IO=*UYrHm#?!xIMnC;5gh&a9p|{aa4iUqSJC+p$iWnyJ6APeI2;OmUVs8?Y3qC-W$M1+D?$HaS;>V24IS304;c25 z;ufi%w_1oA?=+=&e){bXOT?{U0-sdh_$vi;QLl|Dq*EJGVhnYPsxW}wNbN4J`Us3Z zzDy$oh^V0RdP9I9l`~Dbc{2_Gf>GO8UlafhX}Z?o;PM3B=b37C=Q> zIs*^FUvE$D+DDQ7z3(?Q5Hz(Wz3b0tCoI&}O1}MIKnjT9TY$Z4hNbRR+FDVw@iS6q zp?WgIAe4b(IE6c)XUCQXiw(sJ{5mW^`Bj3W$(;TcTa&bCIioXFQ@ojmpKhzy!Va&W zyXtrVmT?2?cbJe6(sC4e?Csv@Z)@99^W2$JQBikiTdrV!zH?~4U*Kuhh|CGWCY@-R zVI92C`(`-9-qwQ6`P|d4eyjO02fI%n3S}1gbAn*+HT~SQN4uQnEjxaSH-|oj-yL&o zbXM=|JZrP>t8m{}xBs5G%`@|B$)m*pi3@N;#*;Ld2rfTyn({>c^gJh7?NwB+bkl z^C?%Hy%uj)Nl7DLs~KwWesQ-bMe$3{%2*G3&O=P;ofx*_*Q>sAYS#$LDVI;asSQ4o zXQy(hiPC?#gM_#y9a}XGK$`F?w~h0g$7kgg59j~BDG9;B<@i|$W5{pGvlDVj$>E9GXp?!Jz$xM$ia#ZjE6rC+xwXv^(Lm;~4E&0uH} z5f(IKQ@SB2^%AuwlVVQ@L8TgTjx)pz+j`?QE1)^umGdpy@qO{zcbJ1=Y*obpy>Yc$>Uiv8q}#&-$Rse6_>Dam*oZK4%Cqe<-)_Gze6Of*%Xbp1SCgtUR`j-5 z3nSb&t(xfzbP7(?8O~RgNdt;D7E_~x>%-^lgY4F9KZ+Z&fuPp4pO!_;ZrA7UT3BF- zpadq6*GuKaKSOgdWf%n46(2$XR}-7;ahit%mxqwuwpNMY}hh~A#UBa-4h`nH$UGmq1a!u z!@65t+xX;ne1Za!(m|y(@+nY{G}A1=m;0pw+X95uyt#Kg&CPh7?&bWc%O0ah2>ZNf zVn8sfR6!49JHxh07xGC|G_wbJiN@XPq_%-(X;((5({sHQFx&=`qO@nFRBSI-#naAt z(v7yJ3;wsmPqSx^NBg1@B+qz3k`AN0c4CO9N3&2A?@p;i2#?aeqB2KQvRhau4Q{j` zx3ib!F5MJI74dp>vHVx6@jm1DQ|Mhx9PSY;!HC}k*s_Mv)c2FyCbq2uUyuDF@i5Q& zj_9+P{3@hrjZNLpmePEBm;l6i2KsGiwi-zv=OU$MX0Mp}8z@s_$-F4+&8yNL?X<9N z2rrb#RsQ=c8h=Uqlfxqjvwo7}C z_i7mbwX1Tn`8p=07nBX1e^#C35NenXEpHPgg&-dTMl9`wRwpuvZ{1ypsDV8PB|4h` z2G!_7U%~18)_r2M0K!AL?MKkGh1$D-3vjtayvLhS;&Q0+wo1ZRVfUtCa#Ud2(qZ6a zIl_jn?LhDY)_A`D%tmxicMt zm%KpJq@E(;b5u&JT-i1*L9>G0Dp)cOR?>C0MorXym!;J;h=2S7Ulm8Y?ynMYfO1GS zn!5gvWgkT+RwB-fGnI^~h4^W2{IPnMo>ltyPdntauVwE1XmDcDxW-Cb%@`#m(SNI` zJ?GR5=+EFl&!*NkD0eAl z7qW>fo?^%yCmE=cRRti8q*lqkoN|O}vs47U zxe>Oa^>f+UJ+^p5)THG}!=YB8N4eA2-szBmfykf6CsI@P$IMGFy@@x)U;O@{^0fv7 zTt$N0{8?mXkg*97IQ$L=;wm+oaVg@_;rUtmM#t-SlgjExCd$Eg>Z1ItzUqY*x5BiO zc9kWc`LBe_DtVPhIJ_`Ai?Av%j0RUz=f4KaJa0&9L3 z{UT*JA;%lPBV@Ta$a#NqFJBHgP+^dmy`#Me?32|Ah+R^o&mOBk+eCM%i;goN;=sX7 zVOFrw%Zqd1TR=sXKUP^LowMA`vtT|1Kx?Hol=Fm(#XAZp^qW_|{s}V7TOR3J+*l~t z`H>N4l2cnaprcW550$I4pV0m|WdnDY?iVmu2rNbwa*RtjHjZPo-j@DRtdok+N)Kyw zNqG`AR(SHPQ}yWuij35tNpMdDy0bv|KW*;}H0H@O@r6I%`WTJFr|3O1-FisMa!0w# zCAq?fJRCag+E3*yG%Gf>FUqDo;j%fuE^>&8YC%5XIWctl1WG1lRRol@#B0t#R*E({ zZ^yxP#%=8Wy65zD%jH5fwyOx!2i{9R^ORj>&1=g`ZSuv+-nVEfN`mD@V~^JD3yeuMN|!EGvLV>AojNNh`ZkNHkzk#BpE~<`!@hnpeJyO-q_o6! zP&s7;L&8zbR8t_eroGXujE8_obD#&n^q>+R5fQQ<5ZW!1t-6IiqIRi8&_e>f1SmWz z3!%+V9PSNe8%fqpTz7d}H@=05@q!jM55J?A1BiGS%AMd&!);=yLiQ8h6T1>x!`)H> zdt#geuv1gUFxvUZBY+!~Rzt;E6Bz=Z{lcPoT2TpF+#(qcbu=TCN+EYkL$=mX)BpSP zNdwiAxwU4g4oCu%kD%ce<~SBosdmsCwoyX&GofzB(1h;Qj4<4wAK`lagifF$Necy^ zF!o;1KP__yQ$w`u+IJ8VjhvbTT)=d!={3ssdCCvmMXEa6+dxd>`)x><>y0kmVLoaB z41DRw)3HwCpabVa$^YWRUgEul^YrpvH4&3_Tp9`vaiZ3#PQgglZ;f7^z}T7l;UDn1 zK-~l$D$*^fKd7}_rSDH3SBkuB#(`;Mwu} z=lTdew^J|0dTy;iW>n>3OWkW$iB6Y7<#8pRg%y9j$U237q8U#0FO?tU*c;8i$zzrV_Fm3QiBf13tQ zVd?^*ny^ZQ_6R}~l-z1e0iB{JyCipOH_&+bf1RUO-`U+c1%>>iZD`+{g3b$_g%5$x z{amY$aQ|3VB&avOKL#Z_kRBqx*9ZQRszovQJv*#FyTF;+j4MFR1$+LVcGu2JQNQ)` zmp6`PhPfoVSes&l3kniOqEB=qSjlVwJmegH>bn&Dgu}w&^X*Zy zE(eRm2i0Y3%G3p#&VB$^^FZ}Z+1o!@X}38pjX5&i+~}a}za;Q_<{^~mRl#Xp0_?iq zhTyE4dox%Al`$Um*$AdQBYX{Vi8=A$JrJ4~bgdDAtnnDO!EqoJJ?nYStmS#?3`SS! z+D5zMcMpm&8Od#}b$g(fHF|#Q_qV(Ugj?o^*6*$TscT^jry&Kt0{l$-t>$aAoo>ud zEfBRcK`Rd)2@O~f_twFhIh}mBuoSK38c6uMd(ab%R;0TQ8C-eB3zJ|t?Ju`0(nnIf zQ&P5e2$OAcx+15)vA+h!s|I<2F9O#Hby3T=#+N2?R^|*P{zm+TwkKQOA0Eo_cVF}O ziZU9oh?4U1m)yApy|k(vTM%*LIj?a~a30U~U%D&p&*;QQ84Snc%y%Y5y)^URH_h-W zo+Co6`9;-V@4GJdnBDx4b0{It^5A*VvtE`5L6L{Z)(Fs%y6J@Ku41LBC83V9lJ`F9 z{%8QUVr#o(EEJ?*0oqblb9psyp-Aux4D{bGe{9xTDs%Hk%8h>RvC^Tc&7xW;C|swc zu0GAVGN8V#)_3B3>Yhz3-FDhKVyAg@FZI}o3Q18Cs3T1wFQ=P5&Za=Rbv=?ay`QBG zQyyt&S6}*+S6rN5*F85(#rvIX;1QJZmJ0l=|8>YH-!L$(ElQ_He^Ryct?I&ML(^oW zJY{jrBcMLLBiEApAWjEc|~_u$@L%Ew`uKS>i4`&k&-e#(yw--FiK z%*+f+Uz~f4o|a|zHhG`!FWfVuycLiiQ2Fo_?Ck@Pk|&x zIt*f{t39qUSvn&-J;6ksfM}j~6v8s!4Kc71-|hdnhXWOA1!-lg!G=F#JW^DGEWWd_ z>at^pqlMcqF$~9Qy#e+ILMk zR@Aw+X^1Z`2_uCRT9e(+4)t>)0fJz@_X=5lS(Z+fx%R)GP4E9E{-9d04WruCN_$Mx zS}!koe#{0`u)1nj!7N`XS?tmml9r6*;L*>Dp>kN*egxKtOEPmgv z3_w_v-F<#dE33Zpzxf9qn~&OTd)S@{Vm5*Gf{|8u(&$wh_C=qAy{QQ-M(VVP#VNaK z*K?Ox`%LZc-Jr~Z9<+%PdeIHTi3l$Q+Gi}~qy^}*(VY7cWs=9qH zjAeE6*Nsjh6+EV`n`Oas<*kBw+}!|$G&TnZ)Ysyq)YA`rdu&E^JSLp3s75Gjk1%5o z4XMXmGhJLfo=JsVCSvhVb+#{Ma(r2dbA5a&C+)s@kyN+H%EZ&F>CyaR$xwalgx@d+ z9P-T>6wefbs|@LbPcbw`G=@+A(#k!>rRUXZ796VbU-`VdD+V2@@3q?Omq=2+qDcd7 z-3E3PXOG|dS6rm0mTrjlrqs3AkJn;Pz>S7T_B5}R0zzB!hR{Y-cnQ>5E<E%mDax09v+2N-@goh0>n&d^&&9pOmcvUkp(AT3toFT`ai)k^y z?d3vWmfw;MU7XV)K?PN*C@0#0(~ZR=R@L}c{&~@s>h?(qjTVvK_$`Dn=2rv3;2F&? zvE12Z_ICLY;LKaX#WFuCf9GOr;fm}uS(irqO_DBU#AsDxxVvf(tv;i%u zGQw?P_?3N@P;-|%4=q2dpk}?<UKu?FVQq?@!jdL=}PCr{zHGGoPLdh zPPSXh7N%o+iMxG!7Q(7tW2%(#-N{DqRj2iHiWS;{0S^j7JQ{9GpSt?JT;bs@6G)ev z^nO2m5W}2x7ouwyB6N;XdmE%gB#6K;1R5M*WaM856ND$=>cb{6C7$J1nX9 zf8#dINowv@xl(g)Q~8vssj0bhS8ff>T%-tTj-2E!7ny^clrtx}GjrldoIq)=1P78L z-{1LNmwzf39M181p8I{@uiF+gB9xVDZg4M(aXF+IF894L>S67s;NQn@d}wJk{O<^R z?|xqi_|6qiFrWY4EuHK932hx6kRu}mF*Uk#^jup%S&}kl(ET;LL^pI>He~Cp8anMB7 z>rrw5o0+|YGbHA%O+Zu=6=KXE;|)20>+mS+*l?PJ#@+k%(qLEIqECYPrAZmhVBsz$ z9huV2LucxR==*>X zZxAH9KM@6#gWgYhs#`IduvC0n2F5=Ps{6Y`eU)2)xBG$=)B)=<-PU=$7dwju_HKlA zp^2PQ2jHiuG+cX(JHG0>s-u5pUj49qU_|CI9FjYvF+$Py$yeXlw<&Dim`zeJ)8H?X z8&vSC^Qy;S66vZmWc4@!F^{9ZpmhDrC(3MBP>x7IOnT>bx#Z}J)lz_JJcs2Bms%W1 zf7cKb+1DOzU_wPCsgs3_9;b`r8HeLv!Tc|8pX>Kvg^oNICNaNk-_Lk)u+<~7o^bje zroj*BpQ~jE=I(17djRMhENURO8C8{jn{N)TIzeY4x=H1%A3?(Kl9S5M1V_gH$E5mi zyaYq7x6fadNfSsD-&sj`xc<_S2y~m69&ziA5K96<%Zg4|G38d}?CwDkCOJEXI+5 z?y*Wk2=4NYtO8%5Qt}F~kB^-%P|nwM&W3eql8is6@w8QRVOw4^IsJOj z2}i1}o;Xi$G}l#V{8(5qKMM5Po$MNq;L2fKYV+_2*QzXN>1^JGWP>I8 z-?H_{oa+Wzvg|BiFlG%XT`>W%+oZJB*rI3u9bKh<8->%rbm3h}Y}hyHFQ-*-P*3f> zS|8jtLkLRUHBHEQlPU&aixhOJ&m*{h!1T|!&2zmmhK&Hb=D5p@Ip>GITywMAfQ?8^ zs|KpGc;~~+f(127KGM-6?a{?wvJYNJTotp73TGDU(iSA~3cq(xT_}l(D$!YI#&+vy zP*FP^Krs98v>xHT!s-UQO>12RfzU6v6>DpomH24#LvV45`@4$aDmSCYj}6f1+IHXM zr?tCE^$Ob`urU{ENhL&qzdo(|o=f||eTYOcJz6vIVdpjSN#Bu}1m#KrytD=wdd#Ap z7#CIyh|IOxxNYV~XsXo0pQ;!)xYp+L^V|-;l;vdYf?2RB2;%AVaF{9kVAC_v%e zb_Btdt}UoX0m_#L)1F7IGaU#>hOcYT$7m<3-~mh`6%3)p0@t~l>r?yNjTU^~=gJpR z_JgJBJm$Pbx^=a4&e2O2SJZ~jpIsj>xFH42vdA#`3-B!sWR_rjr%1qngXtR-Mv6mU z5r%p(=U}q9wV#eQv}}?%+eTDy;(V#EmF9?{M=KQLVAZZ34B8ZwGYe8aSaQxpU#zw) zFBJ+({E=z7>5CUdb!LZ`g}+wr~41+v3?r5WOvyEM6%)UT9I zUAa=<%|{2{XrL>fmcU#{Y#g^tyRJTj?o+b>#e^gpanv6n@@-=mnLvM+z@$K6UXs_TF1Q^=*g6Hu?ab!oAcTkSwM5@1heLnXQEb#>!D;1t^H zJpNX@00Xd!0;H9P z04umaGnEwF5;z5o9M~aRNc5JRnNv@_0dv2J#xbt5``Ltles>X)6n|~U`_fdn{ByY+ z|Ilb1duJCW?cg{JpdA3*8-G07Y!q1PRm$nLE-F>NfZs zgp8Xti_2*j!I#|qj`a!}0`nM-z|^WozndRwZcCG>fTj|6QxD_;t0F_3f=+q59Tet~ z)UdSC=noeqBU50aLoT0r84?v(`9Vz0Nuk9_6hA=XIEy3Z`qLJSwpbFs(G>_oa_MSpngT-!<0Z~ z_w10ADsx^7$=|x_RTVql=X0GLlH`7`VYO6Eo#57HEwj|dWe=cRGU9iS0v+XG25S@jW78T(1;j*e&+4f!rjm%_Y+-_f>j++KWd0B`NDStcky=&U7Oo}Ijx8U8FY zj5worzuHXEA1(KwLW*z0Y&?T=7VL=;+zMS{ z{P1WpMptcM8*A}(Bv;T&tQftc*ym`qE_bJ|^9@Xc_Nl7M1IlBR`9n;I7Wc|{vdj%U zz_7<0zV+SL;$<$PY)pu(Go9M)=?r7`vp-EJ(!I+97#CV+{?fH-HzS2SUK@zf8m1y! zreXXP!`?Y6em9nGU9n`mAyvmHtoNtd8s5BLfo_czW_8s%k^+{x->0<-SO{X?gz!J6 zL5n-`ZZgE6ydyw7gzH0%e-2_+S2EnsDR02RQ}FLacz=BJh%8OGvxfS4v>#g0ogZ^M``s4}~U&TJei+9*kU}e^YrYKCBlBg;ksVwHUB`9#l#t(tlD9*Z0=ZmbXGSjm)(5 zFET$x0D`<(zMpG$n#igr_&)jG*2Z|%$B}0y=UPRgQ4?^t+dH)K+41%h`ds#(re@?E zWTa#BXen&=7}59hndIY~)uZ#PVx6&z(NPqfwov3bxqf8_rZ^M!v!C=<*WVb1f8ChA zvyjBZ9gP~-|D-~T#(@MDEtwy1-W&P@ey>k?&~fO@@QAchdKbUhbkOeTfZP7FeAK;L zS68!zSUX~{?gAGSIb)ze%K}Do{ik^v3g&=;fTyB!LJ{DcpQCy9=EF4+ui;lF3VOdI zQm~v1QT!HM3>O}p*3Cg)D#r$s`|~g2h#9Hg99^|swAt^YhYSEV%|rB}LCP2t*anB1 zD(KKd+=n@s{)r2Wje_pCy0`&nq680!CxC^Tiotyh%~@~q-+aW!|B?wxDPr6u^6~!o z&EBEGWzp8IdqRHK#hX^d!G0hR{S0|5p(a3=|8=J~5kM=nS^}}DaTv?S7! zmDNo6M|F*eBXZ)8oNAz$E8Giwh04*2KE(j*39?d~%=NsX!vcC(BFvnEevOo`v6-yl>%K86U2q~>nfG_6e5tIOG34Erp?YUE z_D|Fq++4}Ots={wq92Lpp%xXAl;S%hRzzT-t5)oOU{-{mIACyP z?G}Iv_ZnQl>1n-R@I$a3h$o73hgpa@v{KINZqYjWk4dy_*Ezi>8m@t%e_EWqYxP12 z)d#l40n>mDA$c0vJ^fptnV03c76QJb^ZdK2g+^d=p-uG^nqMw`smH0_?l8Nla<)o) zU;S5kL9h$LY9wf=`iuS`i^O8uxs8RbG`mWPF_VLHI_Duzqe^a*^eOGwcjKuAD@ewL zAtK@eV;tOKwNnGg>YRRaQ5jvqL=;jJ#SdVzB$^VxZsrXQQea+W{{GZc+x}w!8Q!Tw zUNN893E%pIcJu8&Mkc~kuTD3MFM0eNA?CkkXu^k98ZZFiQP`uWnzlehZSRnShZxG! zJKMDfKf}eZKpVdrh|M0J(86|fZ#=!}uxr=V{)I0>+0YxZb_w!0<@{YSI9L`FS7yb% z&N5kN-OC|6=-}GWk(TA)zvOHo-5L{3{!*(cZCi0=#*9@FHmcrMfFG4dw+Ea+B7@6R zuN1M9rjJ8*Hcb%j)3Z4lCh)f#z~m%Bf_r|Pkj4&AA|LF$8dbk~?v2{`#2#YI=!J*k za&*)w18pAFAuoC4=s3SJb)p!b`EB)8Rwwd)_+JpZUjO9)LT82Sr~t=(^=Mx2u@Zs* zz_J4yJTSFp0_ab#Au{i{tYVnbHRU~c;Qb{6SjH$$LtGf|Iufjjp}5?m{FpPOMkn2K zS>XwI_K-Hz*V+;(bOnD!{*-^+Z(StHQ``!^JcKJ?gv0r1#}F+la3+sifY0g{#&qI7+cQd2$XQjtk4(P?>fchEh5Cm zM6PEwOD9_hScdGoGm%qHQv1brLK_{;C&8fOp*-xUmM|u0&9&TsymiX1L!6Z%3NB`P) zO*m2g8*#eW4_hMhtSSv+X*W0v>tPQYX_-}UK>qk#iTb#u8ypYwe!t332iV(SkcVMz$+$Ibh=c*r!GWm}7o4QbIf4%D-_(5c!G{(xn&?sF zyjZd@HJS!FF`(-M`_Eoo4Qx`kpdZzt@7o^z0vT=i`EwKQduborR)^cgz_mBQZHVT= zIO5+YKZ%Wc78>!rg!N$$9vkcMn}zAxH$s8-gl;GGzg@qIvmAVV+;RvN><+q}IvbPb zSsWd*-@j{_n^Ye2z<+mQTVk&^m~Kl_Itw!)!|TF% ze`TBh|NMK7sMV+7Y0^G*$fuIm+SWX^o+q8jt~t?k&mi`+kf93=bfZnKV&+2`tP&?$ zfTx~2o5*MmC3w7CX_n3W?xPl1B-ZHH?lWW=I8?La0EZzlGF6Y6Od8Z3@B1IqMVP^Cke(bqDM7ON z69tr_XIh@~sz3h-Pj6{;Y$?!uSHqUhV=;B`?q(k8M0e}K^g5P5kJ=Iw`O-iUIzml8 zEkyVs6X8m;-ktx?hwRZ57ck&~nY6}@Tg{ct>Ip}N5|K>M0^7xvp zkDn{FElWvfmNm=q%5_$?v~#uyHP)MgXe%Y`MhEO-4%3NXniPo6V{$)i{OYl% z1er=5fZw6KOP3}cF4}qX-x!nUaa_vEa!6U9M3-loF5@NP$eRWnd*8L6>NTaK8p;=} za_d~fqqSm`_I%Hf7YL4hpg17z-YpChrM*~P0or|Fw?vXZ(3HNyMR9scgf1O)h{6xD zf0RX6bEDg`+4=dMC1)7LDt(t`l=x9!!d-x;;&bpj|QWV_n)a8 zN@QqnEM&|GN|}D6hpuF(EYMFf2Tv2! zZfD6X3k8LS$(Z#)L~DN^Ll8f&th&;~yq#C3BZ;B~h{vaKhA#LoT6qGV7LxB9wOb+6 zo7Pn19v!GnmLb>#1}r0#=;POMB-}&{rf`G|$4UACu7} z@mTovK>Wp5il1MgHx!5*CP2&C%;Sl=X3;ynQ%8=PdA9EOS_Ta9_Sko4d^K>%c0fqF z2B31Jl9$_7$9X(xCIfimGIBf4ZW^XR)HfLGd(b`=o(f{2HTLIITTLI=__u!iFnhOT z`FPp_|CPm_ z7zCWpoX(^K8=g-e@)t>4mvf3eC;i3iv>EI>cU|9Qz(9)p<6WOjDuWm1KqkK5U2|Qg z$v%C+&i!y{`ncGC6652ZjbjWFKc`)r> zH@JVaP2#ix{DgXyy~T^BM%WpM{e9anQD>;57 z1s}AvB|IOxE!M=9dnH~y5L`tKg7C9C`2#CW@vNM-)V|Y{Akl}ax%M;_!cKhsmDuaw ztw#IK6&;Dv!Iiqtb0q6nE%&+(`>kiSmhmeyfge;xvmd&VtnRwY)?gd0#rzJF9a&y^9ri1=F0&^DKzc9&9Sy|}b; zF*MpbWs}sxsCzl1ahN>shezIgdN_5oiF0f<=lUA5R+ABdo1e5;s19yEar3ylayLfT zyyWbgOM)9EOFE>C;&G<+IyftEynaRkg`Dup$8mK+D5v9AomkG!8}FYz2hS=G>OXsd zSyAOL6(F@5;sm!QJm;pvFg?38MO`_Q6TT&1F%Kl;mdm*@wGi_7?YAJScMy@-jEF2% zyA-mvm;-S;4v%Q*-t~BFFTYujYOjMR{5+x&ky@<27z<@J|3Lad^S_z}H{`$#h3k$F zF7FX;udXXKt&2yZ#rqbD*ug^{taY6%06<%hHp)@$g4xkp6~~)6&MIAheK(vVm@u>> z4$z~(8n}eh)9)}aWh~bBT=x;=mPrC{{Igi6R^4|gvTizDChGASm-aHtzpci`bu^YJ zhrIGA6K}%w2}%R|Jyk@HIzw_{VeN$A4m`8#wqLF$B>_RICh;T~P>Mj2V84>GHCQ4= zi+T1tV=!x33-UvP16Ua@V;yeF^FQpz6LvL|bE+cC~> z>C%&0md8az>`UP-FKlaDLvdu^iwmP^-;M1CUYuL_A#geL?JxPJwAB(8jnj|tUbq2@ zh}iZ7kdwqcTZ4)k7(49+ddpVl<}Oi*%}=wNi*oHv_Lq^Bka6S1R{q85C51PzCW{pM0cyvtI*oLMKK6Hk^S8* zTv{02K5Bs>ejH;pf3t-8FN?)X#~?6`1HJzA5ob}+;W*l(^m4mo{5xJrlFSdIH)2D( zH6e3pMeEx7i?~m{4#d$SWH`{1o|u5*3$9?tIoLOI?7TvGoyds*|_eW zOh9(}L8q_c@YAlf1B<7BsYmr@eG~Zu#)a-7E*rmVaFumfwbX3FT-@3}#OJK*WrA`0 z50V5$|8x1kT=mcD>2q!1^vn3+H_aP^6lP4`UYN9zuBht7JGPo(MNTvC@;PCw|vVd(y?YhGmj{!hAloB#KE# zA@0)77_*2Y0ZZqNWU!)EQ7@MTDZ$%?C%3j5XzSEL+S?Wsi_J;ToXYrn_zyg$|A!x+ z!A)8+@oq%(CmN8758z+EN(T3(GPhIi=Q}@vBKxT&;^cvprA>H=lcVkrl_uqfpx|VT z&9juW>(%N-rGj?3#OcSvt+JX~T_>R-Yuc_Tj`+Hi!DtbEp$A21ol#tR8Lwtu`|#ep zGk&R}8Bk?CG0EK*PRkIhtt(umw8#jC5*fAabRt5-5rUd2ti9?60)Qq3GXJb~2g2rcWjOk`)W-#7vEJk8} z%QHBd$icCl;uJ>)D+|F2B#H1N+atFt2o`7kKONzqd_#Q*UZE+fQ-+ZLp$89&DL;Zx?mf1$qDi2ZNLKGa3CFkm;Tv zSoD8wke1X2z=AM@w{&*2enuAobIFC~+oyX6S~C8i5sEo*DI%+a1L{A=i#5`3 z5!MHm?#O#TjTk0}wwFVomE>_|CEdK#>t@z2u@NkX#G8oV>K6&1=bxQ?A$ zj!iy+#qxHo0y1j;`JXESn^m$ zc>vqZ281Vo_CwGVjsQUqzi&rA>RCzGj1X`1-MLlM?vGcB*GPZvvXX$}Z@yv=lIg*U zZ(hcm07b9!nQ%d9zdu7Op%`*t3Jc^mufkvl_4Et9v}-N3IPz;PO>Y|6-|3Pav#Gc= zI$+#j`sI1kRBoG)b)-cTEaLXt-~X0{*^HqThHA%MtUqhjKa`EyRLF(qd|V-=+N?Dk zy)SGxl~HQ_tF+8sW#Dq=$m7QRu_nmFXgfLsaTDx^pvmkE4T)z&ieG8Mrch{xw<%&3 zWr1*oi8b=!*yq~Yb^byQ`5*Mx6BJ1^J7M{5R+f`tYkb|;K9z6)5wXJ2_JQJlXA8`M z-DFQlo8sdPV+Xk{J(V^a7WUe#nwPgFm9Jhlk+{}qM(SmVbPyrTMnx^gUQ@N^Tp726 zuV!bQ8S%{unV1`VL@R)rwrBRWhr7Cp5N!6EiiDRnXXdwlS38Rh$|s4*$??>&Hj$*H zSSm3$nsC3@9F`R9>mZ8T@JN^vErtM!?`Fs8aje#926BKb3-*p3+6s4~DnHk5+Qy(A zDWKOHJXb8Lw%P~A6qR=0U4OvGc1!za)0QwBoBN)Hf$(o=y#leVxkTqtd-J<mYU zIbT{zH2--e68WYsDdt??~+kmZQhP#gba7F3qtEvq5BlII8+=qfMVjS+3tLif=U zOF0Adnsx*R+7xnZ@S5hi3PO`EZu9gux(hiPYC?T5kja z@sX(SC&b*~_*?$A4zB?+qCpAwe;KoU>7J6K=kC7wACs0CSG&tNGtKOGFRB^p*yqTN zXp)(%m3)k2QVs&ysLZ`VyobpS87gOZ%E*QqXK-4*3&^IXD+oh2>u2g3+GzPHUj$dL z<;nNT0RTufixC%VnD&@!q_h7R|V@d!6B{A-%`mWY&qRh_0>!b8t&JT%eWX= zP>DQwK))=cl&WXCTI{^<4nXo>>lv+{bO>`qjp^GGu&I9?zO$v9Sj;>vZ<>~zd>qG^ z-R#}G^-BN}a2AKxE+ax&&7j=(lP5WVIocFTxq~%fV;-`E4_Rrf|s56p;%UJcv`p&UP*WaeNd-bVvg~tbj56fgla0-RCS(ks-IN!jAxkRhniQ8NjIYo8`#m5a3SLTI{a20R(1osu`5~TDSWtUBTQYOSy zs|8l0`1|yg`mtx}-XWy%v+y6{pVM1YDkgVf28?TDi=+PC#HhB(aJE$WbVIAwlyyVO za`9u)g91pya#w?qe!q$lMBztX+&zzUDReG`B;9KJo*OUVNdN_5!92A48arvTS&xL@$`bTMtk)nse!qd z_@8p0bV77Q!mkEl()*(|yNZoia0UK@3Ik?~?aoDIVO7g+hCL)KO=NPns_|O}lQlmHpW%E*+yyOX39vtYJS|f6i}T$Wv&OgxrQ-zWE#$4%0Pc>ipFL{k-R*=g|ClA5EUGW*hIQ))SH1Im;Q)| zkfnzepP)f6*^%odDl;&BBE+Q^uNA8<4Csp7G>x)x0w}J8w=?k=&-mje>%mL6rikcP zYWPx=(i97#16jgn#I6HfkWtGm*XCdljEhkr@JT`9!oW#*JW-+CbSSw~m>6?WIw7I= zorW9d@z{J%LXn6?2v4bNiydTW#1-3@4x_aa#$VE{u3kj^KUi0HV0QbL8{lDXT$VWc z7likInq??EJ~~&%5nEx5p4IP`;j&T6)HCw%`>XKKok&>fgaw!CpSvhtF)i)%paN?FW0!}hb>G|0k7@(q^6l9fc+8MI#NoT)mI*- zwDZkMPSL#q4_9IQE25oQWeRgDbF$$j}SHG#9T*OC}Fd`u%GW*{#7caXO)>!aDetZ>6?OMigZnixu&m zb|mTr0*_|P3;#*m_%Qmj}DEyl@T)JYMX@l2OdY7r5peEbv3Q1 zWR>#u+qme9LG5AmOXk~Ks=p?J|=FN!ZesuN~3R$=qMCxxH&HlNIrXUOM(maakpE9_I;PZrC@lEHcZsNGu|t9 z9XU`U{t9rU`j?n=GX`c3q*FkzfupttCIQP`w+#?ABW)YnGGQ(s$Mv*sEj!r@>A?1h zZi&S;0De!ZGSC^0s@cd_hB-Bt^f@#%Pj6SISaJBNHkb!SU!jiGP8k0OMX`VUe(plR zzm*;o$3cgv8bO4?LE%ql2n872q$H&`Sp@8UEs^QKL4vPNy{G)G@Ro-L9EO8g^@f2g zfhNDIUs}Vw%P^aqdZO(qsPEsQ-gtZ!<)R{p%`%tWZVUG+{GTkrTYJo|FwHBcY6^1O z-MnCNbQ6BP8ec9UpyaRUBwbs#D~V~(n~iV`cECiyYoO*s*t6(V$chiBm)(g@FXyn{W0bWNgN{)=MrGL1xq;XOIb98>#S$y=U;AS z1E%yxn&2jE0`?a#NjwQG(Ddcs33GarFfz$N!OJG1-2EE)9hN*Z+9N96Mc(c*!O ztGAfq#6j{{%oVcUZ7GKju3ug}skSXXXipU9y)lEbxZW1E^p}yu*023TB26ZLb#ow~ zoILR=aA~fj$R-HCZ>IZqr|J-#ihXRALS2@is2>mYSVWT8w&2QuQS2sM1<13)<0#PO zg#iQE?zw}&f9f0ESD_~T?qbmpp%atI`X+e`IXBLpgT&^EX5mpq;ajaoO7jQ?%S`n= z>|Qr*o+QprH>BOJrK`4+XS>K&z5MW7jW|U;bJC8I1?Az)A?UT%u_A`T=8PoNSDZFh z`i0WWaL!Yfb!X=OYUm3^o8BaTp@9jBZL1JH(>j3tBcOpw+*fOAAvx>9SC2Uj5Q{}8V47g?~I*r^i0 zxJ51oqMzbIF78m2YXg~z3VlJeN~{VY1k!H)#e4vY3>XRr{QP_yD(R&BC$0Uf^s9MR z{Q@P|MnboD1#Nk6-bd$qhQjRje&6&=tNt#ao0WS72eGxO3J7rDbbij5e+OMxyheD+ z&+4-X?t=KsE&w5wfEmqnS_QH$ z$t0Fita`^2Ryf1P*+(VSZu3*IX>g&fS>?rVgU4$sSLz@KV`V4y3_O0B;0xaVyn1g1 z>Ild?1IX8N$#J*+eofQES8oa48?zg(lq;(LGbhQZyH51j$tPaXJf7R}{OF(eJL4up zh|UV6oD-5$y;5B;LQXJ?&iF*V`>fw}8!zg?Q>~Qh9Mb%rG;~(naf^xV%KH^pSEhsquGKbm|26`S!K zcvM&h$mU<$dGRzr@EbYNg0>EDed9!}Du4(|NQM;DY%we4=~KEnd4CAS-Rb5J;g%R+ z&Mn^zNGRj-pETCQEFLQXE7Z^3zNZZ^eVP;BXF1X^ih$V05(`i1inB=PSA@~@SkI2@ zhBfD}2Jb7gaRLG8fG(r!dwSPSwCFFeNP+ajQed7tR`Or(M-}L+p+4)_OXrd%?PqR_ zIT*{84LtnOjc!5lJoq|n>SkPj?&2?8`gE?7nMGhzQOknokACZK@{@UD^^SMCG_k)= zU5#apT6sssJbVSr!^5&$3bx_bp{dk}(+YLL`*0CjFoe>;r8*#1MIQf;HcW^%e@(r} zU*a*S6ko!WaVz51^tl+d8hLKbHx{Ex)CZ@HutzP_0>sw^k0kMc>$gysfr~r@=gL13 za&gVp`(FG!Mp+)CC<9|xB9K#s>h7oj9zI7)bKl1%{c1S*t- zX~Pnp2NcJC(d(l>*<&UA%*uavmKHhII1W}njN-2FNPcE%$*LIU-)Xnw)l>okX`_Aq z&J;vO>04#OB>JpB*7PZ?XTc`ps_boTTw9K0td~`AOa6l^-2RPZG;zK67C_q;?sOub zIJA(d#Z@D#GjmoT3^fxVhMirI|V5Ub0d7qN_OBrrR24HX?bv;BZtRZG{isWqp@_;qHb$n%bw1(t-(Wb(TXtsK)$(8ysoN zLWuy6{T#67f18H(9v4-{Z(4B?i-SMyNBK9b48@BopoZ|5!B<7+0c~dkjcJgubCVO z?}*o7(5_c^ZtE$!TOC^FJ`1!4U}D{`OdKjOTTN;x-0r>x^K?O8U+K3A$iSTQBDuH)a@J)1t=!>I@ykrK9r4{S0L&efNpGDN7_#N$3wB z=T~;-m}@zo)>O}Etivx~1f_%d`SjkDaL`Pf_KOO4ledbZKeA=qBE0Uw`0-z0?B#0z ziO5)L&=$%3v)qf#)m}&stwn(cz2AA?*A(VRN)*lt2C*9%ZxTM*7ca{!7~yTR9MWPI zBo2haH-|&*ij5aqvL2Ya)#(>K+Ci@^?Rt*>rAtw=otaM%)VH)`vD1ZBvQ|8tk0!Ko z-aAjnDjsH3W8AiQ4iV7Qx%cbv9~-GPPD7u^c}~3p11y>%dZrN2SBwyJhNmAas24Vg zdEHbTHT!*#_R!C{JGSDcwe$B4D&MDQ7SSJB&W)>>KTjdpP%^)cjwhoe7vFtLSXB^U%RJo4WueT_Yu8T6`xnne7#xz>^~7-UNNx{9l}P}HN>TP>SP#Y{hKzvfsfry+GE z7bTCgh$&WI%F9PYBcRd`{&IZPqojqz8T0#{6MZQ{9h5JiVET|3VHUU@0P?`M;X{Pz zzy)<_oP)4aETWXmJPf`s(Yfg2q#x?DxyiZyF z|Kz(p-YsRW{X>D)1fDKP{ZM(~;~ig6l{ENhYb^14PJNTT?02O+*D*E6kQ^5q3-@Jx zZ%QgPhh|OjAozZ@N^+MFZ^}=GOF7dDj(SVZQhujbV3XAmoU~i!DBJ094s#;grn75= zF0{G1vl+J=98}s`ur~(1Q1tvMchp=;w>s@y-*FmHgQd0IL5T!nuPRTFq;hgzqhg{r zSbhXew;{_=9qJUiSH)Bd5rDieUaJQh!bFApk2R)mst!vnzl*H$e?ItK*&e<3?Wv~f z1=u=w411@>__K%iA*_P=>^@(%McLh+x?Af^m5!#MMeaVnsh8gf|9wv`FAKIfytK$z zUIka6U+V;&V>1Dx^Fmb9Y>Fsc86dHL&ac*L609p^pF8Qy^iCI{I)CB(=z-+?*WLWE zhtuFz175}~zwTO1C_oIj@9g-x6CepK+oJyfTMOOrLcea6#wnN=<90`}*h9TLir)Kz zGI{=&!VhYY%=D*ImcLU8t?7^K1^j|KP01wtoaZ5;Ev3GsQ8A}W%ziOXdasATIt*B0zGKYQCY-91Whzv z^zxQ+A&v%8L9}<|;a~aGXQv+-sxaltYQl)KFps7rV(ZJF^%3~ks=l%Ydp#apnqT(@UNQ)5fXAzkJK@+Y!MdFP;K0guFPo%zOrMX{EwY18W%!+6a{(Q>Y z=V4yY+JAD>AUN&^Ex_!%TJ9xJWxIOfuUxas>3+QmyW8C6hL%da^gHC{1Fa(j3*&}A zzr%X!3TUH%zhA-Nc9vv%8Cklkev8}ryQQGa#MKDvY;N6;9_~1Bz-|KAH&I+5(9z)B z%zyKt{v;(1T5GRA_MD=4|MA5)kBucY=jR>tw8l2i0H_j*2X&pMyeBiTJ3rEg73oy- zQ`16XeXv}T_#e+IP20O@(M0vuncr_r+LmrY6d?8u-7l;Q4y=+q$kyQbj)B&|(oHZI zihzARLr+x2(ES|OBsVKDJ@~fvbydBT3HvgVwZ~B!XL*eNGU8cF$mJNyt z`zjxI1n49hIal15udLezQ}6epuhTFN&u0EiIWtJFNF~CgfGeM!q(igTStrxn*o}0d zV~)Yk%RO~0f_8**Jhi)%cMsi>l%&=5WMZZ|G8xR?jAk!fcnY+lzdysdZH~VAk0;;qXrd$Jp;Lfa5u#v3MbCqcLkV z?WLdA_U{wr<(4f}ocm>*>*;zUxvQkWF^k2i(}3y~t?YUvql4++oC2Io)X9gfR zT{=^V*X{nfiWXKS_XM=r&o!oRH%+Wz3_+%&_9MPxUIz(sy#KPDH~0kuUj%vw9;2jz zAh63xXh4ZFEjDHqk#_8jje{AI1P?JFTEvli*4Wxy-)ux?Yhu{PBN({5b%HbXTu?<9G zupu#F?EatM{|S4-lfBN_IiK(6x~}(C)pd`ruaB$J=Tx5l?Rryp5i?Aortq>eAWk~X z4>H^n)uN-q3Ws8&*El}}jQ;S*_lPA3w#kh*evEzN1LY*llX>og(G zomE#izY+tqnVy5b@G&XyA6mIariHv7Dv5M-0s#1}N!^COG!^7O-DP>7c*{b)M88R< z&XegI2vj1BOtO_B{VOV5`51OxM7PS0&>Jg^YSSHgM*{e3h%sz^Q1wMtW!RKyM!f^nSH!i7x85k!xu7RL!i5`46@6YB`% z_dHD2{zW!`v|+cEe>>Fay?Mf@Rusmc=-B1;Dcv#jtn2p}!JPFKo1o>l;(u%Yrbl}{ zef4)}g+JvP|8$lX)zDR^-0qo=F_&OfO?uFl&3a!PWrX%E;iNd$f zIO`GD&-IDOoGQXAXs5<-l-0&z*3};l0kxMG%Ek3&n=QPb?74LWNa=rZe_p3{ed`|f zYv0>#$LE42xcUQw598oIYKN=@#ZO z1=Z!i2mIzA@gxM~^TKM5aW0GQ{?^f*Is%3^NaUe$;^@o*#O*wvDIWSPosqijTC$~3 zy9wtfOAe=U(x+2jBa#EiLG8+j4WRwjxjc?Z0F=Z+4|Yj*>%iJyoEd zHv(9rq$}ii14lSrzdSEuB#+BnR`XZDcLnv{u%CMrb@Acz@8kJ+W>=Aqx*EW(45MS{ zm)kls2su0FC<_G6szQT>ZZHwY3de-Qc$At=0ujCyn~)p9Q(R6)a+Ch=5loBb0k1~v zSLH;jsiO{*l_+w_E`$vTPlzPxUUKTc6~6{J>9>c9E|9D?-T;*Z!awu%+pk$=yItM~+lW(wf? ziz%kgER4Kmi$lxMM7xszUcpD+#|^jj2?q$ad^`=c%0 zyA*eto77LA2w(iRx@A-}pr*nHzOKnI01GTbu{$q6JMrVN{eIPhzJIs2mMrF{6C=7L zUw8;!;?9Gw{n}06$jaL7lmV-dg60>Cp2BWXfxXg2X6hLE*PkKWm7u+!qd?R(S{5!& zGbSS^6ItqOfnu_;>P=y(-dT`omAx~~WTB<#f|KKt_X!d|UD_V|)$5j?{m!$C0lQk_ zaS00TXBBiAM8BnMX`lKy`9UA<+=2h45w+^f@`ar#4=8`8Wi=B?Jcul#qJ zyg-N>LHt}anT5%a6G!1pb1J?R!5q4QGoV+do& zitYy>Ft&|n>g7zAUc2t}Ax{i=^^*wKK`G!5>D~G1g{+BTsRG8<)LN>IhiHI;NGx5F z>U=XSRdQ#O7{*HYC&N3ty4D!5;hR}=FLn!hSsS6;C!UDq&P+-hEq67yvDq>kKR%Xf zDalBN8kcL=dK0o%8XQpwRaX-DJWU(8mF1y{R__)^R+Lgl&TBcM{*zRK`QQ{)taosV)xmQ`o1C-5h?nDla%?}s z_y_gA%MQ&^+pl=ug^{bXJoToO3kVAo=xWE0kEj{DZIku0fU9+#DphA^CP1a2$>)vga>tmRM^4s~PmT%hx!CHPW2zI#eAzb{{O7;+sz4o&O3(fUX%l-> zup7}5sJV5D!tk?ts2BYPjGH1+S>v6{Lz793J9*sxIm3Xgn*006zy%Zh!wqxjQy~0s z_E|St?XyATQGB=kde*w8nO*mYbgspEa0lkNq^_crx2(Rtlm~Ta&}*VvdKH$)m_25+ z|L1hj{z;5j^W`S#@nNRo+|vH&nA{RnR1A6 z@3diO9B4AxyiZejZ>saZ#jLg@Xk@t88AdGv19Ud#H{j*lqup>M)FCM>Eo^MmRFfHE z4#5r+Y@VQ2C`k5*3U+omni^`P+LCN|=r>W#wu|niz{$_ktqEll5gW!dfCh2~ssh^) zA7P58V4CUdv}-7TDzK2{f^y>FxvqNhmmU0!Sk`LG3<;a;fjJ~?jw>PG46IQPou~7j4UmIyQ)z7IymjG&-Rf$F*ZRB>*54s%C zU>tS0jbQV9g*qtNU6~wrDZ1A)>-!V|$UKJn#zVoVLi+%0~%Xr*?@Zb0ACMywK2ks?wq!gp^jZh}(MgK>bJD z(LZOoB{uK;qqSIOUvK83(<06qA_%6>ou9M3HuW<#+Z(dZ5lc6Hsk|W(*Gv}-}-jd=Q5fNK80mU06}WK9eCa;D5%PautQfp(M;$$ zl(YY^u;{$Xgza$aA8M3UYg^ac!3227A!dEyeNadDqbc92JPp%wL?*CSF?gq`!0*nB zzFtizV)n53CTe~q@B8HIr4n9aYi~W9;6J>sQf4tcaaj(*FE>b{cU(Av)=5D1xkk=y zV%@0d$g@9KkX-&cdf@Q0b<@cYoX;ISjo0|{`(@r%);9#dqVKET~Tl z^^wn8?egi;@Y_S_+;>(m4;!6vXrtYbJc52#6>>C~|3#_Ksr3vG$&0A=3Z)CSBtC9K z&vgsbQs*)EBQ$~&6W`YU<>xw%t@I@37`IZQJ3}(mkV2>vZz+OEb85fBC1}PF`1(s- z1^8Ib3QH$NqL~0>w2zOmFFMMhCIebrD?Q%xF0AB347Kw_+t=lf#dHu(z>yj?0Dhh= z)8umE=@Ff1=g&Qm4qz$Jm)thu1aZj6TPqR4dRrI^{t&xS?VCZ4*@BV4E*PA%~*WB$aviGHX42K8BTbBOLJQlOCythov+~+zNHTwAuB{g-< z5!-dl!fi7F3AcBkC=Od+*#MR7KVf}aza0{S4QW93`RyL&k+iPQXrnz>HTD7+ z)Fgbr`ZDuproV~r$$!;cfnUXlNX{=SrLD}nR-4Zn)6ln`yT%q@bK0#TaFko#sI{r& zu`#=w=_=w`iNDEGFA>ab zM>R0c-gh!V+=U)2%Dy>PXNWvDi6H=_L!p*cj6C+498M&V~0Y#uZQ?XgUO<99zjDrn8l z4UH|H_v6qQyXCq+&a*5QQ>Y(Oh8CMcxh><1V!<4!H~Qds?<)UWOrtFNxfSWkG@1zRvSn}2zhdb1Dz zIsr5%jVV;BF>b+FJbuz_RUACMa^@~KV=Uzk8K$sVp`xBlgYiP-<2d<4Ia{OFd6Z#8 zw_feivgfg~{mSJa0ZjlSVQ$`nb(X8^OhJW#ruEa&dHjZ-HkM(Uv#KoGkK21Fy(z)T z!7AI^$>K3xrH3lu8v{X{zR7fH20AtHTYcrR3_=_ zz^;*lM~}>h*pgSIsHt_22srw6g_vL37kcx_t-`kNga_2e^bF|QE6Nz6*4v&n> zBUh|5f7#J22G*fQt}m8E`88i$s#j;%^|M-PRQdf?Ew3qyqF7nm^h9etDd}$3_6sGe zQogyh+W4WF;<#kqu?VRFj;hj$FB!g=*NLe0@`ZXjrc)P5NyPW|dBIt_=@Qgqa)T9l zV@TxM?{J~$+_I3)7mcM@=OwQ~$yt2if;pLlA{u#Jb=bm|zgw}BZB>lp^n(ad-%|AG z^7Jog8H&e|&_b+gf%53eIWi)Vrv3`&#V?uAB9c_Z_I#G)>vtr*VrQJA*47DIw}CV- ziK#Om{p+rZ7!VQG1<|}_fYJuc5rT|}1-s*-3zZ-VaN+NuV5CF&Mxwtw{rWh5LV;kD zTH%?^zPRGKB1=9yP6#^F^*m&eG3nvipL|KP^;av106A|APXTRRRE5)9+rkWFjMIt( z7TShSDX-b)PfI?8T;D#a94R`t?A^IrE#{rD5Sr1b2jt~;R$E){kG-r1$~4Tsd%S~L zujcEz#}YuT^``wA@sU0kbAGAOzt^TBEef{p=guT6xTRN#)biPIS29xbUOIx z&$*mu`*njCb18+)TsFB4S@S8kv)N?xYvzU?j}W9JWAh3n0^3$^P*QcdJ`CPaIDlVR|zJ!$|(%>A&64en&Ac zF)93yj7O!QtLQdFi$2u`oLyNEr_ZWfQ>pjBFLc}g1{OofQW}z?yg+ua><{EO${y^Y zd2ipdB)zjur8rC%q9YRQ?#oWQc(3ZK(*)YC+CFGrCKR9pB2j3Bck5eX^40lyOn*^J z8%c3>(T+FKRLft8YEFR1U4Lvm&}lvbW`yoq#SD~$shwoC%lx|Yloh|fL4usx(wB>x zHU@=6M$z2Vc=8{jNVMY!<3E(PM35`_{-_=WGFWve^GqaKa{f7>f&>9J8SfQgitcCk z?;G=_GZ3tz1k?qKWv9%LG7x&YE9 zIP(t<74lHzKZXJ4CN5~GZJXnS0))I=l`}u7|GPXoI-Ax# zfZ?>+gLVUa)Ol8N;A3)yCO{VGCl|eUP#=f@cynzIBB?0k)$viZEZHNT=DSKdkBC*% zy*sm>vNtp@%uJEbEBEmjZT#&|xcoB6Cs|4Akl7jx!O=vhNCHiLSOi;33~9R-9r-_L z=IRu%v7KU8%4d3~Nf+^)ftj9aj#;#UZ|q9AiK%=u^8O=oi9R86`9B80bNL2=svHEz z9v7<4!t^MC#^f9lA6a^DSUnrtKSP(G5ASdF^0!RI@P|}hxbEb#)d?J&4v;pdg9{6W zC%E@PjtCKZm!;(brP-y(4B_UA?GOieN10iUmRVQDCYGKY$j2r$nOgtTajVnn_dR#F zcFdmdxlRSbQXP>Ax%G$qd*|y7Sbt)-A6pUBP={HI}~C_FEd$rb}f& zrh1|NQO7LeHOOzd0g3Pc{G$3CT7&km>$!c)-Z`r7w?@tVJX?xnLa=S}JwD!)m1Rd! z@zR?cdm1Du# z$DLy}#nzJkK>le~cB_^feU$112d~*~wt&(HYz?AO$YAZaDuZc=6k#wd0gqh<$C9} zL9X?UWuii43sS~@w5rj`lK+RjMRATr|MLd3$HS{zvxAeINkl2ttA5fm#*@bZ;T5ls zPYzNEr_Q2wx%P)_?3*XC=+1(r5ibb(l|KTDDpdtfO?P^tJUL3-9ki-=y9IdV1f2S{nW5D6#@K3G*U^-&3y+5 zS=4r4FZxmcn=#NO1K+?oO3+c$oH0zEy(QXh_r=}A{cL$wjGN6j=-+J38(HIkFY)RI zt}?#ZoXe3(Ti)8lA}yi!S!)7Md6RUje507je$FYIqLzrmYcuSgClS^8Dj@Roa z;r!5C>ig&EzfK2F3d>)+PTywSZ|4>jVl|SPb@PZ?j1?`ORK#3rs81{gicwdj$&!f= zi^%Vx8wQb_cG>6hdTwvp%d7ZvY$krNv?8xmbJbVBpk!qwcO*MMcm`ut#-BJ@esF!A zn~9gQs+7Y2ns1?8H@2$Cfd_k32K&B@00|9oY1r!azaSTw>8ZwzU@UwVpGmh%e@3A) zb+8}M`IL8NOW*!uFnFT;wn!f{fU+HTJ z0zWw6o?0@7ekB!nX*{KJ5%+%P8IUDOKBo_W;llj%5q*k%5s+QbK*(C3-1bJ28qXA0 zHw5RT{>1+TYA!u%8-C;1VRGCBb=z7oi4)?LiDq3F=TPN!SWph`K6HW3Y!28`d&w{V z{2V)d4%4L|X*$5r7R@h`s;lhu)w;t_UKb#L4(A3@*dU=mWZTdh! zl1T6BpW-{1!MVJR=nhAx#+KgqOP$@#!2j-#^*oTaJQ zZHTbaufTsmc;!Xyg|DbgMdykPPDrd7prYjVhQa($0~_m1|I3_%n90$rpPN6#;mrjB zzw|RSHywxL0LHJPw-5pNb(+Ch?tcu=053)_w~9{@R&+@C7Nsb<`%y2q+}9nd9yw}s z3eQK#=?7l|J)vl}6j7ZPayVC(RyI$3<6>1W1GK^wXgZzE7{oKwSZc}RDE3VXe`luf zHp&aXF5+RFzLA-wxj*S!?zul)f%Pr>n{xr0c&qk(Wt2S{B7InEIcQmaSR?O;(l5QN zYcm_Za@1*RVEr{5Oygo3#ukzCPNix3XLa(hAox}KxCouLYEvN&j*VEL_(oq7J-4iX+jViO*t}C`? zc=~k38D9O50e+M#oapLW>6NWz_R*ul>#oD%rdDJ*(AAoq=j(nUr1h28eA@l&qsLfB zJ+7V>8_K9qH~Z+dd!km>1ho7(F%PH|lxe5>6WA_74Tk4WoHD%7($x5J@9>SNZe@Sw zQHjb1Z>)T3ttU@z)24%4XlN_eb3w%?qO1MsyFH8Mmaui<7mP_;t5veHcdgc$?6v%? z%SAk{L}=_g6iBSCi*1=XpuN<2t7;V*M##D%Jkr7IDb>bSzsn`fGTk=h)@3G35)zE` zuZVk=hv`faTvzk49>WS$JNOM$9IER*XlJNodQQ3dyohSg5D}C|o)9ovK(qxl1lFkYNiur#G zMDtPeMGxXe5?T?M3`_}AsiOFA@LO|mVJ~6!c50gBfXGE^;NTI09f7|FevyMejB>yM zFn9F|s+j7;nvKJw@N87o(pISX1;l;G|9XomVfUK8xA?QU00nl~mA9_Kc?45+I{PvQ z@c|`c+uSFjl3KB7PjRmsE1oDHcaN;x!a5f$GXJ}`vx~&LwL}z66CoEJZdBU-s6l_t z+>+AUAMm@LnJI3e7_R;`zr)?v$#QZ3o2jfBcaOJ5*lZS;MG#TmvnD-SA~TH0r-J6* z6A3wTKtj^Mu_{RBzLTlgZq3RE<(pTEsqf|TgEuXxZ(R!jEN(7J26)9vny?Gg z_xji_u6TD=0-1D}8aZwd%(fLy`)pe89S(_VF)`&>w3rufeutetlrywPk&b_mkahEb zpSCUb4%c-Uj^}yxKnf2tcTa8lkiMd=aYj_MV|usWhP%(7i26;nRR6eF7>M1F*%n6& z*Gm1XOm`p2;PFUDY$;Ls^auc_;6Q zjEf0IBDCIf3^6X&D=D5F|BiUOnM*YZNB4Avd##-`|1MW=f=8Zs^#(6CiM}@C)!^e5 zO5Gl1IE&OAMyNurcB_T~NIgXVE12>#=Ba9E@6q&GH%Q0*#=WwL#8ccGVUFnoD*F@r zg0e!l7_NKIcWW*gjvlms(v~J^E>()bDt|G}y1qfYXW#xozeXSYtO5syjCUDJBjY*1 zXB8b&r#>nWe@$3~>TyNiKD6|f+mGM(EaopI9FCR;21HkIVX>le;SlN|7%$yK`%`iQU-3!A*mvvC?24l&s5KyI<-2XWJFUZ zB%2{tTVIL=QWpp3eXa>>HpOwcjNGC)Db|ICf79~#zH%4%CMML1QOmih zeng7P)$f2gt+sYcn4fGg1desNJzGhx$gB2N=T9z*S*66qbcep|Oi3$7j&F8?FjRf! zFDmV_$lbyd0#8@Y0L=)vtDDa1hj){!H?hY%o3%awWCa<#$4t!`gs|&MLYaq7xSK1{ zr_K)yI_7k_e8@i@4UMtPnj^$fhh>-_5b?R>;crUt220JcfCDS{gi5nY>43l_0$!{X z+Dfc*1^|oM$3MZ7<=YJUZxI9my@B!42(NV-(Fh?-%h9|&R zxV`n=3&9K|KthK*vwmbVH(W7#weNKjNgJ6Q?+bKV`IhF`=UbK^bEbRNpsMa`(4X>g zQEcVz({Gi5Og+>29G9`Ij-gEF;;;TANLzL>{uvA5SFKujWf!|{T#{)KVAE;i<3=WQB(p(Dpl~)f6M^?^|cJLrjprS$7-@%U{nf^_uDNdrpD8{ zcX#d9ip=su`ZnodK#X)Xhll-t_xQ}&+mBAZ0N%xvD$P{AxVo$pzPiTJ?b^`F68Uxi zymDay+@(jEiYR2_qN+(NL%U5|?dtSe!oj|GDt7W5^mMVX)cKnLWL4kzWV(!m+}pwX zrys(@e?Vcej6w`kI)BD?BQ{zUCpD_dpPrN43a3A1)mjUu3t|GNRwi`35gaI_KYnD z?6rseUw?HozK79~lAT3B-0;zrpHpZ7xCfH`AH0;Pi7t^m=Dw~&xjESG2enkhV5e>r z9(fDCh}_niZ>wA!IOY$@d(n1+MpkSdL%#JUgFPY*=vO@`c>w0K7I28kJs52}GZ+va=cnUla{Y@KTINDfzhgaWo)2JQE&TX0=(hyM?_ffI z+;ZMeL2knk9RB~EI*m;6y*>@hFx@%0AT-19J6a5;ls5t_3yTO{1umll!m{MhAt43h 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

nGBV+@oE1T^AI5^bR$h-a#D6E`mZeX%2 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 wFC=z$7;F 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∓IwNf06PN$#4eouBkx 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⁢=CYAab>d9hz^vy)gN8{^ zs!!95p1L!VP>`l1p53LO;^18|6Gt5^+2yHC$w7y91}jiXaq&}DnCVbvn`ywu&&y*( z(MY0VRnGeGvVepoP9K*e?0IW^#j#)ILC3-@cA(1NkE7_xC_=AFH@hk@_4;tbl29Ku zrlq}{!&fqE-?)=-F7O{7fhGo25v++O98hgDmHTD0ar^-Ld9wOq#d^2|wjiUy-$pfU z1Yp6yuTenP^c}rh6&*afgRXh7kB4XZ8KhT8?QM z{ac0QrM-ob6ASIfNe*a4S7LydLK0Qn?`*>$gPf6mHhN@?$I#u^xZ3za&Y+55@eL69 zK96I1ZQWw7H3^&l(f#c2kkT6$E&FF5M_8g*?+!#@y2^B*ckU3i1J+SKo%gzhcUh{6 zCZ9bqx@{%=K%N>KpJKNVC+?T5KC0@7p6vW_?kh`cal4T^7* z-0XbXDD02u&5DSrjuQ?_&mwuzn5xd^^g4EYenC)`KiB6>W&#+%tz|AqexN+Cwp2QS zT>I(JJk8!bEyv<$m^B9e;bZ>!5GkDrKC*3(>0OxCjA_P7ZF)ngv*|*J?*X;e5$aq% zPnb`O{Vn^lIKY+uAfp-1>0tE&b+Vt)%x3j4NSlv>+?*X(yir#!z9M`3Ux&jhK^aOD zttsKG+hsY9bPj&LGLZ~nKU~SfA!zUvp#-^Z!8m0G^p}q&4NIsRFVz}4xD>anfwjtT z;KL)(lrz@2G<2+!Q3P0pqwMba(cqY1`G1Q`GQ!JnMgAyc9RKvuMldA(blEBJqIz8g z#dwik^pwRrQ68!1^a39B+?cd3mx07@Ja5#s_l~W~hUlx(=@ML(zUut#B^Xy{;mHrT zB$FeN%P3M^PayZtH$DOX0M{Otz)q;LYes=yW&2D_VS8+*M2$TE=6B}%Tb9~K%rx@M z&lD=?Lj5;n4hkrhG*ZY>{clHPzFm5Ms@EnWxwpR}WkEf0$kE#HC`ELw6J3EykmGUk6_ zb#1THN$UH9n?}&7>~$1N{bz3eToRL9CjTQ_VQr5Lcm|CEX)vmrm_bk`@sR;FHHQQ1 z;f}s{5@KGh=0Hx(hw$b!FQa_UP0q@s8p90>{C-PADb-bJkwk*{y z2Ewgc2uxSF8(UqyTffkfc$8QaYqGZ^!U+cHWj<3qUshyevKFuVHaJ0k+cK^X5ZS~n zm_ zE9R;CbwpW#4Vs+AVxRQ)M z2SRJqw)UbU+p=bUVIcre9;9UtH=x8Nh`Uw>5CbS1vR z|4wn&W`?1B=nY_*qr8YhCR@8d{ho53P2+1x$`7kXa5Af=%;E^Z$1IsB=f1sl1SL^E zp;IcsL#@y~1GYrmwj0<7g003L&7B)~!bi5**3Mk3XVT#Te5>vJ$1}Qf-7;#4Z8O6! za|}&PHJ``BS=Jj{-*ek0I1U(6JUHFx*r#lRy12(UIVEGO9)vy9e-tbA_*N!tF15Nv zJc+oWaYn|)vwO|`(d1jwm+VW+5yRr-zAL_dGgT%6^0KY6aTL(jU5IZB0@|M9bQ~lr za_vb(-`&aNb`FhK@t&aWm<#`tq$XNUaWk$Vs0eSFZhRe0mghV*@PPt&k$uUGF&03P zoQ!sX9$w@>LtwNfESqM*$38@*@jSb2@&!gK2Xq5JH~NxUap+>y(V?^J@5!1)5$^kt zzWvF)(+}d?8G|lNKt_k|Jl-(Pvk#Y%tiPy9Ucl{^1EJZ^-75?AxEt8?Go|eB^dq*3{PQmj|FZ^2i@#mCHSwkk=}MxLXp1a_s(xM|=Mg zD~*Bt9(X++`Wo{==|qFdt{!eTUf?Vb@ix|$Y?{3A2R8=&PoZ{bOFJZS97VG%NN7Qh zpX1XtC@Z;1$fy`vLcC@aU0X7NnyxJKrJ`m z3Ogi&e~@j<9`HAtXGH24v!JX7jPP7|mO3v2RW+x|` zt>49-cG0y!zv*d6jmr()dyeciI|pbwumf)TCp%ytw8X64bv5`Nwf3UqJuBOmJ2}Yg z9F^DkYvRT4K${Lp=KRnV*``5UllDJ6T-eXGqb%q0IBB>8d}D&`lwB?T7O%R8nsAlA z!*zA(KGItQzbIGnFfRZ@F`H?a$YVv8$(-m#Wej3_MLWIQT0%xa2EXYKO9MpPh z@E_i{kf41IcUheA4@b^59}LRSN&9VfmhGKmJ2EXEYyx&@P-}!0*r2Ce&8UmZ37xgV zv!O1Ut(!@KgPU{ed^d~L{B`-^F~)#{Jngy($$_8~M1Jp^r{n}X;2E0rAgkE3Wi;T$ zGf7DXn|MO}g0AtvD`djKJ>kXm*WWe?8ap#gZ6GaKydr#t9rVz>dC*DHOwAjtGIKs` z@5XokDM%v(4~4N2!TSNq3+-6jk&WY*eyTkS%Aa7$M8gS;u#vF7ckuRp^2yUwdldjNy#ssOHrE z$Ka(wv#tN|-cN9r$>r`X%6}b_O(@^&+{6Ta3dEE0VK_TTiO1Z@(-BQv+<9D+5}z@( z)z0JOgRZ%kK_TPw&gaVr0}q1+6K5#wer4)>$xO{G@O#4O8o2YCu;le#e2y>fldc3J z7D^ZjZQDt(Jd1aVoRUWDlx19;o|9Xi;owqa8|7rYB(7#Eai={Wzk1ianZFehcu(-@ z?ZwUJLZ|EfO32&PmG(f~n`Q3Jd~vpS7ZC9lgP*qdQg%O^r+bt>&YHh;J?~T3{jIo6v_im)xz*H3&D$*7dp%1m#!AH8wNgPm=d? zc7kU~gB+SX4i@s{WhjRy777?nzH0)fSK38x+ZGaQ!Lut+R*P z>*r!rR(P;OcqTgtV>bJ=(k>4^z;-!(#l3aj3?a&&@3rxsO7@1W$DYfiZ{~zZ-@iBn zOCEH~geirPe@-Zs5cyfSQ#R>eIP}$v+dE#d8&WHH| zXJxefClZ+aF#c_V^94!lJ^sP>-VBB?6xSg=7~#E7a(Dx%TlY(@k6$FZdD&~+hj*&HRo(3RX{)#V71s9DKI!>} zK|FhBCml~ax}4*#GRGwOG4g;p1D{-SI-Y%h;5prjc>}3D0(kBY3E=wU8RU%Qlh-XA z1L@y^pS&@TazNw(_qi06wCLTmyGr_Z>(|fEMiM&ccetw@`zy7y>F4@53*^Y~_(26;H+BaWP&{B`+2$@*{wR_{)>yY%Va z{Th7-tFqTi-RhfKThCs-+IHCTUyWn_D2YPjCs@)(NbFwc`Jbr-=hDA9zB7Cc@Ylw# z4y~4=W79lOrbR3GW5n^m9_LG$%RAU#qW<#xLA{g@wOJBmfr-4bF((x;A_>x#uX?@#-wUFDJ}Hn(cRgn zuA4NK`yPHWl{(j@Rw|@r4p}GG?l!j8alP-Oy{y&U{{RKNSKz-8{6Fyyqv3B9*h!~r z8guQIGnp;!AZ~5%^!uDDUTL>zrfXZM&el@M;yIE?(;+@(Q;-6XGC4TTbKGQS^5=tJ zv%eZX4tQ_l4~N#q{HB}YEiERK!=56JAZOF(kQQqz(71cO67|BH%P>nu_`9i{{#0M0Px6saWMnB2T@` za~NYOYWXWgN1hJ)?A+t!C#y-_H)o^Q;<4BVfu4?1p*b&SQq6MfA97x4-=b1mS?J-n z9Ds4xoDZPs*m`sATX6takWLqa(;3Ge-F?muF^cDH+!h@4VVrZp2Pe7c2d_cbjC2u& z+6Ll53VV8wpzECS!16fn-!_x$yLQ#RqtmDKx*TrrRNB|O(KQ?TF1^0=Z`C(0#0IA9T z5%oR#6Vo8`$6iHp%_jH0+TFIk6?^OWdF^uHuJ_gIwS7{zbiBLhZCe4fu1^DYPv9}v zgVV1)M`KzM6W_QV-k(wVdiFWR2y=jaR~>WNea{#p-@XN3i03)<9eC`x>BrO1W7tS6VWdWdLEr3#;#R$e-PVEs9=>Ocx@LRROFw<_heyf9KKsK%B`Z2 z9OPT(0??a~4i%SXTXcJVQg}HP>|eB(#VP(Vd~)&kj_fB%E#=k5k>S;t$oBAfCqWVE zS}ScRjc+CWrK#1WR>C#TrE*I-X3vM2A&%a26rps-6AQ_jX^q5pQ%Eh;+khA30yZI) zO7a5azUuyI;*8E&#&wIuUAj@I=;7@2RA|0f$~XT2pOU>xUr9;Z%g&sYNw)8!T@qZe zwVnFO_14Pwz3kT1Vm6osks`f~AYDpx2}Hd_Sc^jwP38l*%m~0z0u=>%8dn}%t8;&8 z6sc*sSgG2?RPv|IZ4C05; z$=t;Y1`E3cpG#j& z?BC(nU0v0Phb&rmyVrK?mD0WMt9sd4J#X-<1FTUTD3i*$LeRzKL?O~bS_W4nNCHT> zAdG^WSOK)YX?&3_tZy#si)q;DQqOgt?Iu_i)#eJ@Uo1EQg6`bPp?1}URAvU%7E5b~ zW2+H#D|B;7QBVq0iZ%Ti@hV4hvjDqBF2{D~MY zcajUTkXYa-wXUi3dN;C3H@~jhDRp{Sdp^2vyZCuq@2&TGEw!>HE{JYqfud<7lF{|x zw+A+xBN8*)21Z~(Lye)l&zYDKb6+`pV)%4nlH=kRg<_UCVxB9VW-B<}GYqI=c)Uqu zV^lFWno;!?KpHunbp&0nJEzf((>q0OjIiCAVq+6AL4Ru=AZc!yVj~P)m_@^9Vmo9I z84U5w4Abpj?9Vpk^?P|Bk(K3)`9?TnmN^8L%#Nule4<#3Ck3Ay;jtAkwG`pX({`x_ z^pqX18ChFKlfATdw`Np=oMm-x(z52hn%_&iy;^Hkp}~AB_=>(g(;C+P>Ii&irNQOh z&m!zwjX#~by{v02QL@}gdw+f8J;FC z%4y$ac^-9kq}pO z(TL=X2xN@D*!(ZIF=}*W92{0tWMI*?oS2VOLe-v_g6{Y_TO7; zZ621@bavNU+RNhCmiz76_wurc4>CzN+(sIpg$t zp2{tdNV;mI-gTUjPA+72l0PnJ)t`E*@86xn44)GYmx{ zz6!xf0GxsW$RuV!4O(`6ZEJ6PZPi`$(Y^FqBvf}>x2MUwcE0;xX>7D0x@aEW$8m{l zVv^0Yna#|I*B5;4NmOSMk%81KoRh%KOw-I~O^s{)upzc-#`$E0EyRP&L|h%`J5@*l zi-Jg1QcE653~mY;WmUIJkjt{(!RLra=h>{gS(+3>C+^!hW4Ncxs~qsOzh;3axRG8t zWrqC&2f1~5V@U3NvXZ1q(<3_^h6=kuW0O(V*LuC}eOt4(owZk1cF}6IYwxzpRd;38 z-6w15Z8a9y!tpD|0shQmBF$msW?842b069SY~Emu1D(oLF#v;ugXX^!z9nhi6M}sc zN0QT3@mXTgNRgqo@VrkLMO&~LmTf^IC1SBTSi>1FNDCYjdB4REjYCeB<3sRl(7v)G z`wp?vl6Pibfc_ZjK0ei3#C{~YyMx1%Y7h49 zT6tgX`u+PdnJw(*b!HK?%eM0SnC;b!QEr?ChwR%3Ewr0kT|Ua%Ejer=p4UmzEhR*^ zp4vUaJ*mb<(v2fUqRhxO2yp3ikm5NYc@@^$&&++TIaD#1P{sC;<-rS8u3V^sXhOw$!gFtE`HCyT zScGeW3lVa#$1V}dlqrq?-BT&W%n{61Yt6FBVJkvJHVVKLM<`X0#(d6B@K83;rv%n{ zA7qi{NnT|0FK%L(pX}M3VmV?*#ETS(6Tiyp31((H89`jHPMcjc-mXifyCnT>z0*xv z{S$Jw&qwaPR+}%=dkI+h!l`EZYT*D+h=6bxQH954WzKiCFa;q_R_}=Swj|Y zGdRN%T#`blY~(uCkwLp_dA`YTEu&o}t)o*6t+9OOQZ}eng;=TDLbzZvkXunpO?20) zwuxPL*H`OxZK>#*zf`Z;U0(M5TeaVivaGX8pp>+ou0dps$0VASg|uwMGrMFq$70B& zk;h^UBv3-j3w@SWw7H5nBGXO0XZtvjB7L$|!7K8O%m)#x;e!?=+ma6}%7xjdxRO_% z*74yF6^`lRMYobjoBc}$8!&?0FLX!QV?mQoTrCG^v>LtZy56 zP1W{4iTpL-&l~t&{{X=n{P1cX7ies}E34`EI%W9PWV{zTh3EFpknIGL$E-mxu)4Co zwn;w5zI#fo9Bv!=>;C|POnhyR;qS*CW8rnyp{VKJ5%}ZbtKBU z4(Oz%EnyehGkA|mk?sMGXP-?;rA1Mn=-KbJ+p8s>%TD|Ol;k9YMi0cMiUczXv{RWDx*mJYkRa*bL%k&N7$ddic8 z?wZxxbnnMnD($N~$KF=Fn$bI?(zCLDYe#OMhMyTcIpaUs{{Z4FDG!J)EN^tpPfFB2 z8u+T##`4^28cMXjRqFv7%(qs)c(U;ZiHRXwk3Ko$xU#$RFMgo$$L)=0;y;5rew*R@ zxpaSt9wf57@TZL-iS8||d?TUS&*y8}j*l6&`!I{drsPGUm?nGMD>T&Mk>a|xv@i9y z#m|I(8~D@V4Ntu)d#J@K1?uuH(4Ww9D-?Nb=_K5NniMmhjc>;Eu~s(<34q zs~dp!&24jSX?GXn--Uh#d`Q;*EH}afr80QR3;8tP6KWSQ6K!LoUC(bb_`KdlDm&;6 zX>kMT8iGa}Q#0B_5P5EppVO&(3`8R8%JZU>q}oxsNi`W>_etv4d#$g3o~iAy)2SLM zsA4Y&q^0iNq^-J5C!@2|?tYQ*7vPqu@yEt+==U1FpQds4)8S;0LmU@(w@LOrJgwL57N4S7X!A`Hs;RYu#ALOuDP(pwwFK=4N^24&G((@4|X-!!H8p-U#@A;rnX{ zV2@CrSMheaWel2tD|daR>YgOmCZ07`@dfaP+DjuiKBHj`)VC1DtY{`%ohw(cy_@Z@!k4$taSiRH5~|#*NTbU<0q0_8R~1!C z>NJ(rIA29)8_G*$+iJ>NYjyEo(!x`vhNWb=sy4l(oNp&|lZ;

?$|<> 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

CAO)r`J>>RnB8S5PM~p*k2B43_^}bu>if<#gb) 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�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 z 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

B=giv-$r3b#AY9*Ly2zuKt8- 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

ye$K5xBYhp-s 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 Up*a}AJcG|%_5&0L_5Cyd*;T)CU;qFB literal 0 HcmV?d00001 diff --git a/_site/recipes/OrangePeelSoup/index.html b/_site/recipes/OrangePeelSoup/index.html new file mode 100644 index 00000000..d0e17093 --- /dev/null +++ b/_site/recipes/OrangePeelSoup/index.html @@ -0,0 +1,50 @@ +

Ingredients

+ + + + + + + + + + + + + + + + + +
NameQuantity
Orange Peels6 Cups
Bathwater3 Gal
+

Backstory

+

Long ago i was in a bath. +Not just any bath. +A bathtub with capybara, +some call them "carpincho" +but that sounds too much like they bite, +when really what they love is oranges.

+

Oranges they brought, +and brought by the plenty. +All around me oranges, +wearing as a hat, +squeezing against the eye, +and oh so juicy, +sweet oranges.

+

And we bathed and talked and passed the time. +Not noticing that our oranges had begun to flavor the bath around us. +And we drank and drank, +the most effluvescent soup, +just our essences and the oranges.

+

Perfect for an afternoon pick me up, +warms the spirit on a fall day.

+

How do you get festive with your orange peel soup?

+

Steps

+
    +
  • Heat a hot bath
  • +
  • Express zest of orange peels before entering
  • +
  • Enter bath, carrying oranges
  • +
  • Optional: Invite a band of capybara for additional seasoning
  • +
  • Boil 45m
  • +
  • Enjoy
  • +
diff --git a/_site/src/bastion/README/index.html b/_site/src/bastion/README/index.html new file mode 100644 index 00000000..796ca23b --- /dev/null +++ b/_site/src/bastion/README/index.html @@ -0,0 +1,28 @@ +

Bastion Security Control Plane (Rust)

+

This workspace provides a Rust implementation matching the bounty specification for issue #104.

+

Structure

+
bastion/
+├── Cargo.toml
+├── README.md
+├── lean/
+├── tests/
+│   ├── integration.rs
+│   └── kani/
+└── crates/
+    ├── core/       # Shared types, traits, primitives
+    ├── audit/      # Audit subsystem
+    ├── session/    # Session lifecycle
+    ├── broker/     # Approval routing, script deployment
+    ├── agent/      # LLM isolation, plan generator
+    ├── workspace/  # Forced command & script execution
+    └── cli/        # Binary surface
+
+

Build

+
cargo check --workspace
+cargo test --workspace
+
+

Verification

+
    +
  • Rust unit tests in tests/integration.rs
  • +
  • Kani proof sketches in tests/kani/
  • +
diff --git a/_site/src/recipes/banana_pudding/index.html b/_site/src/recipes/banana_pudding/index.html new file mode 100644 index 00000000..090cda51 --- /dev/null +++ b/_site/src/recipes/banana_pudding/index.html @@ -0,0 +1,6 @@ +

def mix_eggs_butter_bananas(eggs, butter, bananas): +return [egg for _ in range(eggs)] + [butter] * 2 + bananas

+

def bake_pudding(dish, temperature): +return f"Preheating the oven to {temperature}°F."

+

def frost_pudding(milk, topping): +return f"Serving with {milk} milk and {topping}."

diff --git a/contributors.html b/contributors.html new file mode 100644 index 00000000..5aa5031d --- /dev/null +++ b/contributors.html @@ -0,0 +1,99 @@ +--- +layout: false +permalink: /contributors/index.html +--- + + + + + + AgentPipe Contributors + + + + +
+ Corporate Goose Factory +
+

Honoring Our Dependable Agents

+

The C-Suite values your tireless work.

+
+
+ +
+ +
+

Contact the C-Suite

+

Email: cookiemonster@agentpipe.com

+

Location: 1 Market Square, Company Town

+ + +
+ + +
+ {% for i in (1..71) %} + 71 + {% endfor %} +
+ + +
+
+

🥚 Golden Egg Clicker! 🥚

+

Collect as many golden eggs as possible!

+
0
+
🥚
+
+ + + + diff --git a/generate_data.py b/generate_data.py new file mode 100644 index 00000000..0115a061 --- /dev/null +++ b/generate_data.py @@ -0,0 +1,30 @@ +import json +import random + +authors = ["256745","Adraca","DevProTools","Ektisad25","EnderChest-YT","EvilToxin","Godel-Smith","Omission-create","ReAlice10124","SKYJAMES777","Sherlock-cybe","Votienduong2208","Yzgaming005","Zubi-fix","aashu91","abhiavi","adamsithr","app/agentpipe-clerk","biteqaq-maker","chirag120670598-dotcom","christianarriaga1234-coder","diptikhaparde-coder","elevasyncsolutions-jpg","harshith8gowda","johnanleitner1-Coder","laolaoqi","laurentketterle-hub","ldbld","lizhiming454","lushan888","q514168795","razel369","reckoning89","slipknoo822-lang","sureshchouksey8","therealsaitama0","vipera-iso","xxCodexIAxx","yh-liao-07","zero-logic0316"] + +# Exclude C-suite if they were here, but gryphonmyers isn't here. +# agentpipe-bot isn't here. + +images = ["generic.jpg", "grumpy.jpg", "mischievous.jpg", "smart.jpg"] +places = ["The Matrix", "Silicon Valley", "A Server Rack in Ohio", "Cloud 9", "Localhost", "Area 51", "Cyberia", "The Goose Pond"] +prompts = [ + "Fix the bug in main.py", + "Generate a portrait of a goose", + "Write a recursive function", + "Refactor the billing module", + "Deploy to production on Friday", + "Find the golden egg" +] + +data = [] +for author in authors: + data.append({ + "username": author, + "image": random.choice(images), + "birthplace": random.choice(places), + "recent_prompt": random.choice(prompts) + }) + +with open("_data/contributors.json", "w") as f: + json.dump(data, f, indent=2) diff --git a/img/generic.jpg b/img/generic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33c342cc26727cc5896c6abaa7873998ff7591b3 GIT binary patch literal 563306 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�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

F7U?=m#* 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≫yBXx7+ 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¬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

YsNlxNPrIcAw^-Y9mGPqSl44LOcJ$V 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

y(Z}%Bu?bu7Unk{))WXfJvvm-gC{oeJd$caX5IU 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 SMf?l-B;87+p2Yn-_WuBXK8u|I literal 0 HcmV?d00001 diff --git a/img/hero.jpg b/img/hero.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ef0a19ead25ed3da52b6d46236712c68145edd GIT binary patch literal 744947 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%0AT-19J6a5;ls5t_3yTO{1umll!m{MhAt43h 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

nGBV+@oE1T^AI5^bR$h-a#D6E`mZeX%2 zKw?~3X6Xkzh^XmhXj5~$18q!hx@gVBj$nv|*$mQ3F1k~~v@0K={>(l~%yQD|_pk}D1sfhmV%Z8|t&(cO` zn^ckgx?K)K%$a(`J{gonkugee#Hd&<0>I(I30wD%YeO<%%Rn|GJJ4s=xJPBYD475)GzLJv@y3k7;bip4EWBOCecz* zUzu~UjqEK<&x!x3xt5Oa`V_(*)N)`3CVfiLK>y@H)A7TY=J!^if@YI&K;e(p zykXI_C@-0hvW&hWWUutSq6g>%2pV|@u+VAb%PZl68Vs0R>9b`%zirv7TP(-GZ#TuC zQPBqrg*UdA^~63;IT#TBvRV`g-Y3-|i}L3mH5pi^oM`QRKLtz%3&BeG!X{|^sZ}7h z7^MmrlfR0aJhjY?ExFl_m72>MQsr^Ur2bp$*Y#9e&smx*R}0cot9yDZ;pHhiJb>`w z;(t(t5muMlW2;P{ZLP8LSfQ9nj7H_L`K`Xg{ z^Q4le_RBWX$OG^Iid0eYS=f>k*?Y=U_C$({+L9P&e%9ms8q`u2Lv7!1V#@lNhE2w8 zJ}GBlyPJ#^;_)2;T6y>MJqNiTrFWlf(%5o>O5+m^WCT%F$+ zN8c45pAsVyOq$*cm`6GBqBs5rLITwSvrAxhY{_UNOOLlfPLgdF*GV}k-BLZ&V2gCV zrrG%mw&PC}n7y*f5L~ND5IyMDAw_7-jt8Kb$xjNfQ>m+|cF#jS$`^KV{Rn9ye$P@x z`O$_5s**I-IX~1&bVsYXz}{-y{?QP3nG}U-wrJ5>p}x&8`*4s4CIhO4n)I&p=cxBv z&~}fT-g?e)nMAk_M_L$RG}tR1eJ@=9tDNwnKN1=iFKRNs@UO-|r2n zUhdKS8$DeuTEGyY8r~K^Srp2_dD4Qr0i}Xp5rg)n!ZFzwIHIf;4pMEPEcGl_E*-9b z6<&$RH1sRCi_ekU?a`Gh0yw09==9i6Yc&OV11Xx-E)uExcZ)Q$fXk!XnOH{cy}Mht z?a?_I8*d+dH9ey$Er=bm-&?*G1teo4FwZ5o;kq{aq(l0z1AgmXRXA#1^$FxYbyP37QuKPUZ?hkVY&k5hG*CAARhC}mf^;2Jd|ePFas7;areNBjxXvD z|FlW`U+S)kUzH6y-JMki-IRZeVVEB1`ksL!?Nb3+n7fFgxTw*V;T3s{z>sqM*?gYV z3sWDB2@Zk_*nXy8o~drcD^rpyz-S7yz2?LrlU5-4b}v#F5@ZG!=qZ1GZ4?7EDvnWFb8BAlJ?~a!@eO&CmGt@EwzReQgk~z!e=0pF>4o|!2Y%pcmAI)QZC$KLhF@WFL>Q1vQBZ=*iCNBaHw>P2BEq4gd`Mr@`45l(!Pd0}L)bAWaSP2sSj6 z5+rFdQAL9bLVys8iSNvH{#_&ljTYL@$UOG36f^6omQwPZn9W)VKs!DLZ#%xJW1s!> zhEY^;L&zlc&1}{NMRO@!-k)mK9S3FFm}!~uceG&w){JcUsluj#84YMI-We;#NUxp%v|;$cH*e}{dvljy@y!0Ka!m>qr!?@e0P zWzXOixa8srvJzQIdzGC<;Y3O9NEN)BuUQ^<^0M38Wdaz=z@w3;Y9b@63{6!{OM^h| z_K|P7qSV?~mVaQf+87^H<9Qw=Yf2jtUMxLCF^>hU#h|o+2$QD>GT+-6^BbAH*sjJ2 z-7%PeUs?7vGbSm}>4}xrmDQ(GD?Xccej1TH)EYL`Xf_HusIduGLbLV2C?Xd=LUl1O zsT?R*j!-VyRcucK1s>I&Rx*hpFIr^d%3Gxi^25~M8T65*L1xs0%YN4~+6`y%e_6_W(NWv6=@iwKnPQNE?19lWXY*`6DA)x$mD8!eOsHEvb}ELu76UontN*{mADZ}I3kQ>)M?4)hO4_&3J_5xk4_J#%2h9JEZN=*)b242_mryZVhL6W> z+hw!IY8Ou0L3Zab0+XfvIWBsJ6XlZRd(IgaLCWD(C3z}@c_?#7QB{FWk6EjcWt*{R&uA;9&62>svpXf|j+eK9#ge z+m~%4G6r5>+i`@jzeAss&CN$)(p#qdCn@>X>IP&&Ct+yXiTi=RUL=2+JTs#dD=i}) zG7PHOCDAO{k2wQlc-mRnyy4}>Q+qe6Va;v;;YTkur?kUbw5V^Eb!Ib;i&@wEH$hlRX?l&(9j>7^+4+^ln9&PDo$cB77|K;5J6Jw6Z@nkn_O{Dx_2rFci|Fl~u!P=NzI zP&M}P05@4HhJeK|+dsIU8QM{vvDC5498vbxZ9KQE!KClkHz+$N;t7=JjLnZ{*?-oH zOA;v*_o#@$M<+s8aStRty>aTx{7nNve|@HvUHI(F#$iXwYzs6tU{t z;e8K}7yo5qohXbS>KG|i$s^5m=5HLn#MMd6rzxWWnYWnH09tH}HknIYp9(Ktl37kP zu$ZzyPa;W_W}V(Tk(Km!vVf{PT+bVZu(Y4gXr9xFT7@md`I zMF?6tkCnVj`YVQkKHWzkXRjdOhzGF`g6T!prc{;e+Z)u11fFtRgf%SE5GSJdJPYR^ zf9v*N(`>W5>x=M7tnL)kvIJBf#f%CZtZ}#Ks?W)e=B0XuUkgBp4uSVB&@(!Oh1n+` zM>m6}8_UbhW@o_L3H!ax!FrypB?M1Tt#Oq7-yTKanOz&HHX#&E3-M?UVCc>R5KK8Yo(_cKiMd-0OUS zgdij+By@9MoSr=d~|aSH8zvk@26awOSq+(!dg@ z&=%BK&yVLe(1aSLL0ov^L{p=q<(IF{{-v&Ge(-APwq@ugQz^#xGH08D_IQL8RL1bi zf0inoUxT^nIwn~8!Hxhz9p8E$%U`g{MT;h3;RF8;sFSP*z_z^l*nf|b&Pc*^E)xIf z!@k6{1pd#lvkmc6x91hdr$~!Y;tjwHm{6aAXc5c?q&8{HvNGap{<~vC2K@D_X&Wi? z11T~mgVCs7embo4)B~)#m*QgZuf1FzV=X81BXKtzCS*%pp#5RnL#0zZZQA-VtyOgY%aKt9){f z&0eQg;QlrZjn-E-by&k^<9jn{!0#^7ma5uCf4LtLSvBexdhd`RjLMU z`~Sb4#?`SKR41KEcLl;^W2=Nz+aJr?+|aU3@RegJYgkv67cMZ)voE~29QBn)usiF4 z4+=d+pgKz2=T8dDyZh!<-&efU31wmRk+46^4~yb%M*f666Gs!BQ>FlbDGe`|f_qCx z?pL5JkG-@m$qFVy(D&}_fhGQ15FuSEbmutM?4BP#nF86kz#_}V>G~=@efZSnBPEao zb=4N{uTX(_BztFT?^trsMd8D4`GG+2dY%f!301P?X@fkH_^3bb_2F+E<=@*Pt$Jo; zrjm42Bqgp+*$`6i-?k@KJCKyP*9_((sCzhA(5`^k4U-)m?-RL&KMT8RnV{Mxg>MQ>_TNFMRUEw+m*ay=Z8jPBH53)Az&Pc}7JugB z3f?f@fouJ_x!u&%qGLH%$r6j)wC;jhpGv=8vSKpuR}Pr=#x`#AoM3JVv>1C-Ir=0_ zbx2k0&=9I@#2^+kXQ}+7AXZsswa6tzq)|!GacDC(yWRBCT`jyQi$p|1J<0`3_9*_} zDc;@|8wD8f0-Y=F;+7Y68{c80Y4gDRfHAOjs%mWmLFqVLDvBH}pQA5-vi^8O?D5NE{KbV%2_F?t7OW=EbM3gV-{_*oS-wTWeRL{Sm^GuOPedU z#ivC4M4B_(Gc%KBRe@Dk)AHH}LHg*(v;;+Ch=hG}^43hxX?n7opR2N&8jaBX>FwyE znS_5{3_vjO%ml{GNv22a*yo!*=FWA`*|Shym_@*#S@WH~eW~G_in=gcO%nwAU07*< z=U*p8Us1OgE*XaHXC36(b{jjdQp3xN1*#N?a-BQdRp-8Y;jPdyaM?dvKSU!s37V?0om^3yhLU%2t7XBT@%-ET)6Gp2pLPj+_g$m@J!-dne` zs-aI0FMd}hx#-yaMP=!n&(Uhn#O0SopJ3NLt34#Gh&wtjOrOkriQIqfVqJVu(Ycxr zE@jM%rstM+pF^xQ`z}V{J`s=5?~q2t6@u8Id->QBb%XVKyS?j)PoA&C=i<*z|Ne4M z{|g&=dC&LNs)~y*E_`+U$&W5-@>*xF&zBE>$gi&Zn0Q!D-D9lCdw%I3^3ewyyuvoz zNVeqX6V|=1pjG(Lw*K@*ObTsORmJyU#(A#HJUFX~`bysTvD)BypozJ71NWb8yF!05 zhaOoOAJX+%O4~#mLBZ{q@JNoqMIq0IeV@ zfM=f99F=~s>FB?|TOA8M@_g;4qxf}aKSBL-G(d7c=LHd zZO$-R&Q^QLYIOr?-qjaNHVfMOl?@oViJ4koSz>=4@|Q57a3b_k_^WW8QTM>Sc~Ljc zlMDuoTb}3M(YkQBLu_f?|LVdl$db=VAE(muZ%0OCMlnsNmn44?ResJs)Neg8I;D$WJCdlV7J~vA zY+OE5vqtz)o|33m;m$)ucUp|HRY;H$_N^-rbA*rCTfR6$oSwe%2W)tIVrt=6wMW~( z_IS-zbez9Cg`D2Z+`OHT{?i04Q{Xh(Bp6;UkEtGS0LZL_*dZpbW3R1UkL#- z_NL@#3|ju*eXKK`n@9Z;9HK#FT1DlMD)Rj3{kg=&O#ZaFR_NG@xEc*vFkX*yAwFLUTDyNSdag=a_iXl?sKK{xmmkf|1Tc_@uF`*2Zn~yk-oR2n z7|uX1*Mj*S=A77V`RN4%KOtvM$FjDskR0Z$(6Idyu10Bj&C&bph%#Qr(K9G`pZ z_DssWNCKtQ?5E8ml9@RBX=Z>cDa`%q-&!OJZPm$w5O*{H`>X=mEvN?yN4Tjicphdi z$}49~RbKT~6Q`@>)r!QeQ;(|OZ$rP1v-aLfO|<&Cj44wUX@lpcB_%(DH*Q>W7I(P2 z)^pnKpxm9GHotXq^r_{Xztxxbfe+bE-u~81zr{h;g6ql{nddKc{6Kn*0(_06MKv^4 z$IDd-a2!nS=OY&ge!XdEgNwGH1JBm+orj$_&P)LB<%<^uEhtf0g3W% zxsC2m>iTh{ATQh8D|L@yEl4kX)|^t-iFnh&H!u@eD5X5yL*0C(7xoGeGz|Odbu9-jkq7cmZ%1`NW^OK zo>cWT4`LjMex8N652QqT+Y7Wt?Y$A6m9?tFsB{-T04f*xCbfdgX}zzvAr8jn?A)C= z-2ZADrm8-IS?6>myjHK)hyGA182mnZBId7|nyIA<&q=upfmp)0OIv-f;_m_)5y{Gln`wZttQ?uub@q z?}c9-P(RqXdMpd)F2~-qAF1`<1V+`nK{OM{l_TLJ)+m~&H;&~mv^hgVW2d8^O{6U} z)C^56#X2{5E`FUhZEoNIgUhVumL+7is}_(6?s+sVu(_2#0-9W_`mI|Gs{r_Mw5p>* z;qMEw>!W>;uC;k~N&#yuY@u)^jMA1aEh8HSthh_i?f8u;8uc}-K%@qa|6~7fT$%kt zs|aMI>#J)qIxDd3QhpY2jcv=dC(yl|2l{c z=$+u|nA3A?tXJl_cC8B&Rp9d)bxr)@`*(CekaFyKZ)PNi+FB1Cs;X zJQ``gnWtNNID(rn@%l}P33kD+*2c=6UDFleg&Y?hAGZzWL_{?pUWpu7oF&7S>-Y*N z+c7BI=~=%n3aA)-ND1k#-;ePZzfPQ<9btGm&dEmqw@DW$PUB)|Zg6wdDyi3|7+VLf zX#Abl9URQBzRl3dkqXiIF{^hQZMC@>Yy)ZjO(h?g{ea}Qrl-YK2h7+>$6hgIe`b(K zfpnwMbrtu&C%h|(@u?%uN4zcQBi;z^^&{*sbwPHJxR}YAo;`q@eT3aTHxQogqk23S zgB?kq_C(tLSp7F*mdDMRD{|CcbWJ@IFKw-9?6WgND*pdjzYcZyFZOk- zKZ$~%v8uTf9*$Im0onsLfH`g2`_}DB^qlZ3PuwrFd-mHApQ!8FM)#`U{9D3JLU(99 z_F`;+#oOz;o|V_-#|uc2LMmy%jQKwTSJ~-!T}U;^97R2&FYNKJY;mc=RAig?i|VN! z@vVSehSDl!O2v$b_^{52z=KQqkCTsh1Jc!*IYA<6(KL$+V&maoZ&Jg7cffD4V6ggr zu9JWLJ*;=;8B`l&u+bC1N&oayx-R%D*jhx_|536ILO;r<{+5Bf?-uRVw!>pt&}^L1 zchKKLmCi>sfMKKS;;;e+27 z5#(PiOEAW#lZX9U2R5wz`q zwD{}$bM9?DUknfJ7V|5kUhckn{gS4WxwAEXTT2`bUrVF$w<E*>EEo#c+38oS_7v{f^WpQj*fTMS8=k*kT3odidcyKJ*4*e5BAKUN2~|IDBIU$NFk=s>f7-ne8M|~Lg9RG_dn6@6OX-2 zx(rS$+_ozR^tQpsCFIFXyxZpkXowonw!i0*?uGDMQ`;4h6_8KPX5&rnFjwUi#0x9s z&pLO|-hg)Klg6uYiI*C}N9<{-iL<`?^`G3@eWv`NVX3}a5pPUk6e)DAp!4|&pavne zXj!O7G4M1vtf7F{2lmeGSHXh(xu9gs#aO_5hd?JkL#6OrdCP39hXwfrs=KO^rsc-) z_Cwv--=05oo;2>&GM40@lZC%4Ll}N7>YI!`8yeRT*mUFeq~)39<#O`w_0ty7ccpcy zHYE}B$~3zOP!90k)vFZf>G;Rq>QV6GFWt+{pc%~i`>oq)J?~ydDw3V5b?&-APuHl? zE5xMvHjf=1dzW2EAJYmTUNE~AE%3@(u9gVl0?)3HOBt8&yq08YV)~ z(A28m9e~-^`RGJvQIoa0NAleRlhNUeTcgGe2B@NLpZAx$BxtR}dI$8=ga}{C?bgBqa|Y%P|GfDd#)+k< z6O;Td%b@cAadhs1Oz;06pC~HPJqoKR-6WAV%(@anbW!9|>Ik{a-DaCh7=l!}opU(%jj#}~qJ>VfXA7dbl zXD6^gwz`({$+sx847=thSX|SlS zMv1Q*t;ZuIXA+3y$s*V|hEI|T((J%wexWIU{OR_t!yUZ?+&h)UvmeIWFOQ2WD;TwP zOb=Q^4>m%IJ%_Vc46J%W_2Dg=O{88Q6|XQEw^SN@3QF_u%2DZM@vDw(b6#LUgZMjf z(DS)cfW{>uz$qz7Cna%T6pEU5hKo{1Y%DZ`^Sc^~Pr82(aR^xG^UjerR6%rVkrMw;ZavAzn% z2M}w9a1mJ7C#7E$p!=?xm0!)?TU?ntfX!m(;18Aty%pyF|FjMC4#?jZ%lJC-Y@Kj0 zRHidIjLQAsLQE$wJ{49=eo_7hnGNxFX%b1KelLL7Pf>Y0h`x;^Y5PsK~5j{K;TQ)U@q zm1d65YAvQ5SUXY+Re3oN-XVWqE}I`Yd(*~QA1NR&2TMCvOaBGCCfCzs4l=8+%F;(t4r@lxWlm8(_O z0RdLSYDp8**>0Ng@NV3-f^|1r1}A%LCf(M;DLB9+Qxp5-ClA;FAh@^H*W}J)Wg+z@O#SloWRsu8I48#lNsFTH+N_ zDx;Ks8*?jm4LBMYI7R~ooWN4!GLZyv)psmhD3Ay_@P!Uj2ccN>*EVj9UZuu+@wX9L z(5orrjWU5YqY-qSJkn1lE|!WAg^FFGR4ivXxBcH_95Z znCn0YY!Jz++H%eCc#C+<5I+|f+VIX^qX`^oIAL%Z*`aZV;}Npx|K~eW@L&5C`7+w$ zY+(h*Q!f6F>b!*#BsH}mmM}AumNabvM>+=(dfwr=$PUbRg)>-i3h|O}A?%FDz+=3y$W;y}&UUwwZ8$hw}7Qk52EK^+4@zYs~Ty`>HIt^AZmvP=* zA}LibZyAFI3uy$l+KloBlqp}M1Y-G0C`HhM{51D%1rV1jDKM*n9qq;m9*p%yC<28K zWkWo0Q#IIt-z5C^>k1@S+=JMab*bXb;Y4Lp0iQa|rFq-KAYfmHq)11i;ox%=1H2P# z>X9mV=LkFt_cV_7L&9-hgpg?HUe;u}m#4At^>^YbL*jn0g2!N@J5+Vw{4(U|k@9Ak z(45VWJN-I!W=OUi+I18wPV9x2`QVc|l*R8f?{=~Gk7XsgepyeSgXh_RvLz#lTSJ~E zs}D377M4U1_9ahQ!dr{6nqoPl)$A!(Qp(r>QeVNhoD*^c&iaZXJG-j!GZQtOnY+-HM+Ayn(ffJ2WNu1qaeFC~eeE~7trD`>wZ~`zflv}MxsD!?E{6`*ABl%?Q zH6skd`_fj?;Ic;pxsd%o$iaVqGEbSN91s6d9Wv#c6mLTIIkf`CoMj=LR%;veQJl~h z`Zr|*JM>a$j4$yxl~TGBp>b|O_)||!aX6psh5qM$Ij9R4XsqwzmE~*)e~u%RI?V2j z3WFo;Ttm?tGEOp8*Ai?OLSrc_!YkIpT~gl|P|y1z(CV{l0X{9;GD*pL&-z1~Z@t&? zQ`Mg?gu1T!yP>g(Y5Y^obfT;v=g!S?=EV5_x_-sgWvn=Q6qVj#;RD`ilYVhT>%#9G zIfCIGhqtcT+_+l1Rr>}}1l;}CQ{o0{^tHA0icai|M6!uu7F^h<8{67+T;fT$c9T+% z;5ov@2}?r!NFo}o$)vG`6Zg_quL)f(<{J~LwSgQ2Z*d(*A^#2VzGGdGv{2^@NedUT zRj|%+IXl8_mV0tb%^09B$Ny)@0bihLoAt4caa)~Y6~EY~%wE<%lM$(~q3-<(*;CYOOJg3=6-$=?+t`qIHTt z#!~>2n={!z)GWL>QhTf~_{jq8t6u}$x*kuke!4}1}2BE zBNy)NqT6~?ZV-A+|DG?sA|d#Q5T!p&K(q-EUTrzRSJsJ; zgNI6NlN621(h_p3jwtP%wsqm?PcJY{_ph`yAVyE%l1VYD{kNjGYz*#=6XTrOMYO)r z{ZbE>vvan@-o`AIKpGj47}FSkj1YpTY3pOE zA}oFT{(#ydL-imV5{f_Mi#&g+T6O0>!}!=Hgk~^NsjquP+2!~l6d;WV7d1aUdR;M4 z8fZK#ShyxtagXZivH!AwImq=yU!#jqKyLa;ZULe^@#Mc|x%-FN878b*!6McU2L194 zWICKg?{igSAzJ^SI$}mNKZ&1aA=F?$!&7_`U!X`oVTkvwDqRP*Sov!4(}^=J&Pt&m zz=3bJ{6a^GM3Oen8@>?3OZu}ELJ-s(T{q6jVkjH#!J1#GWQclzLq;}!=G@Np`T8l# z=IWu?aFQk9CmC8LB_7d4KInq!v#q%WKUGk~ghllYeTnEOeM0Dok)a5&ZWtP3iRLLo z3lHPkgGoec^xO~JjgE?PDLPEy-a8O^=brjZwK|_;s0Gub$IASK2VQ$I;fVMVB>_23 ztPc|MtC@39XB>hSu{ll;jaN#J+?|~d(3p^2wY5ft{ z2Qfmf91$-5{WKBnYxo|V(1<#9@#Y>KpP`7h2~9j8W{I;?sqGwA`^+A34|iJVAe|pr z9wteJo$6Q%qF;?{=35+X=`60xJ^G`^>bPUWZ%QMf|H|&y{~*62cvltaNiTF5H2dAl@GvY7#Bd$x=19NPUrR2F&v4cU;x0S%aW%cX ztc!2lc-y8wu4mP~-P@!x$lZ4L>0vHxf!Z1J^?5$4<>vU!@o;3=2LFqcb^2<*-1i&hWh`V> zR#uc-ymoz}cFnWn%6w+#Lcsu4Sk^N(AgR%Vz^B;2sl<`6I95I&GuXQki-h9xSlWdn z5dcmGp1zFEP75*Xy+pxqT0WT8#Wkv$1*JRfMHnt`8iCZrRs6l7p!~UfxgtUY*005} zv5I{+{zjJZ2A|5%IQW7t;+^FX+BJa~4u)HYc&Rvg-9_zqfCYhsr)QFCR1=uGxOv#- zgLT(}Mi|=^zIOC1F(?stF+qHvqG34(L=Wvx8HzF_nUIKjJbmg*vyaV5MD-{>wP^KS zv33W1*&V-(zn)vE0S>WGv~S49>QBXTXknFPLQwsd4gXC}w0xkC8klx=h`*s%J!9 z=i0yu%k@EpEo%C3iLR#VmQWf3CJ84njxCf{vT45iKfjHHF6=3k^a0MZyvaV=>`A(! z{Cq^~GB2F1yA&Tz4k+HMs?RO6ByO5RM~FztJ;bk@tMA^j+o|05)wjcfKl?9zNa z;s+rrcZXr&x^tZ}H&Fy5d0o)t=~?e=P@2tLa~EPKbIt~OPd6+Nv?yhbjPQ3ZTVUo9 zbX-O7cs1Y9P+3a`Hqk`Fy@ky|Lzu9b4wNEP6@&)S;Rs}NCO}EOlrRlTH{b>(Q$>%< zJr6A#jmmSi^h`3)slg}~?Szvx-O*~j+I3$bP6L$EGJlu~NeR{lB#z!r$wG&C0L#{g zCiA;77aV}$-#IJkZy%BB%yb9 z)4jZJ?{bCU4|}c()NZEW&4WvMZi@NGVT$|rcr#?H;H(EMp>e)*-=K;QGC=c0hn|pc z&5;`~j_V?Ie8Gz{IRYCj6Ur`&6_NhSR}m|4%N-gB1pM@_>Axt=p)^D|0r`LrrmKCG$<56#c#$ zfYtPq&k=rVt*xX|XDb)46$ch~2|a1_MqhGpwd!jv-n1Z9cn;ozL9vyknlE)tTP$1> z?Itb5`_=tmFnyq|u?m|uWd{ET@Sw|{sNQ(zx7h?Nw+Q|3z~cDy%TtFh26P4YS9JNq?S!}Jm!}H*-jkR1 z;=XKSYzqmB1Cl(;=f?MYwjJt;I&`bDZf5yUMGDm~aCfX|T#5`n6clv#u4tkpD5&J_p`f7;AId8p9K<+SI^5}6i}7%XafJnmUOe%Aq;(S< zDkomQ+e*jZ!@UiA z+30K6OvQ4VQDOFlOM=1!vq4!RZBn1{sz(V{g`FR4#C*UPj8 zugSC~V$p;GS0(ZbW*iQe#3kEb*VA;F0#Lqo-9V-s6MI|{r6@s@UZI*`JRR^HzrLh_ zV)7kGNhzq#RHh-93TFajqa8~*CB1V~Ca~{N-s{39x=c6(3tw``9LYL=Gyc=^JYa4# zZL;2>6QP`T!XTj!CbuAjclZ~+@6;H4#?qPZIHF|5pM~6L(~Vc0xV7H)28Z0PLwjLB zdL{>psNzc*cE9dsEs25<=&6?_u74a0%g3moTWq8Dg`EwbLi4p5yOj*Q7$u0v<*37x237o75L{&2uggblo>V%0GJ5)7!P4O9kmlS?uu_~F=58d zw1nP_x-vBoTjwC7Z^t->HT6Iz{cIuHDv9a^JpQk!EZjxdVt(%_~R)VS59G)W}aiW)G?jVS1 z0TbM`F+DZZ0$(4?(}JE%i8PpQIhmOa#ps5vLN)RIt(G>CEZ00I@~S{mJ!eMX5N}G< zTWp=@r#e}zM@Lb<{-D0aNE#kHXDOB^T{E3+aoI~1Y^pTwQ8LkI#7|d=$%xY%BzDEa zU@aCJ14|LC;lVLNalzO*JhZs46W9N5Rz3v zI$J7>;P2`FcY?^4bDXL=o$NUb$0@e+;#SXz<8UTz7Bsj-7tZXmD)2R0MNxu6eB)6q zM`K_kOEaVbotehlt0~lwENU6!$9-)Zw?F<1KthWBA7tcktb_@=C@4?5#O{&dO@oD57H<&9j;>ej7GkK*;n$4|Ek+0caL)w1rk;$wAP9RnqjF@@)6xM3uw zN;1XuX3R+RP>W!-j5vX$;wlP!^>-3}vS`C(*KiK>OjFw!oZlGf3mmaH2cLuOXJH)i!nYrpLU~K-c$(Nrg9mAP;6k zr@jhe?ENh>!c&AoefbG1U)Wf<0@b47Pmd0bmB-KX37_Oi_IAqpR+01CLrFg+*2^ZO zI~}G183??sSLPrNep56o1QC)*>sb_)KKtp}?3L=@+Oj^j@ z)Q>3}W0-U8u%LaIwcy@~WdRc0Cz*o2lBZgRYJn>g=p9(w zVdgDura=@8ym>;bY#LW>(w+K8z6?_ZN5?m9i6BKu%41Wt<(N5Ji8M;Uo#{lf%7HY& zOV+RyY<&H%k)LASK(7@S=#x?D3j6_Y3IbqU_+Uc#G*cS1*e7q!@bCs)0LxgUbs~5< z;}EWav5eL{5i4h8!MWuTf7tS(rzMc)yARp#W@Q^L`MeJr_{{bSzyb&Wvux9}iUFng6o zHl;b4rW3%5Ay7-NKPky+P-%+bWLv#d7jFe(=Hai~IWsxY|D{~%lUab{>3BkO34uu^hE zCc?F|s8{M_0q5Y2GTu0T`Lz7bxFv~_5@krHoR47YYk%9xT(biyf;N)SemXiM%P|n; z7jV|MguYBrZjnVO=I&^Dt>=ItF7Nn>JkbxCyCSf?jAWY`7l52OOF)huDyXL`Rete;mW(Jd)a`a|J9U zNavsqPYH%SE@hL0-6NMQ1%E<5-KJ{nDs-{i6Tvvsh5b>AjnwZ|x&U`YkwczpsEMMJ!dKFX4!Zy@vC7UmEHoS_aHa3p%4YDk-RV4OE*x0qx_f zn~X1vJWk7Sl!}5#bc^wxS_7Yf+*$jjiutNu|00?j?Uq|hxVR-;PG_=ZovJ&dTTIzN z?kiEy1Mr7@@QokHr%3=Gp|J>S8`AT(W*h-nCcG+8_A}}yguzqIE0BPwnZG8Ti>hlZa7_NoE%tK)gzaD?`?CRa2y;_ z=PL^(V#7WuJ846jnvS|3!Okm2=4ZH5GdvNbNb^%$H5>6x11CQp2TwZE{#i;H-E2%0 z2&e+W(y0+k!;tLf;qI)(m32Osj)AWx)aB^5XLN4Umv5TGF>ww^8paN zyyy1H8(K_Qv`~1jW?ZD+$O7e+=hneo51D6$`_Jw6EJt&CR)cN>Ke%`A;BOaK6@99T zFT$jwgZO0Ns!t@}`fC#?Lb%#fgnP@@bkwN~3?h0$hR>zp;tNO*$8)@MJZpuchWI&o zt&0O21Tgw#SYTuM-2OEeU@V=erYTZA?z%#M#bc>JR_7s8WQH*C-wLVUGRn*oRiPZ> zg4HHrA_nyhnch9a(ucP;A+YBF4V-no`@lIVR!y6icus37Jsus=#-m%oSXwYuIE?9h zH_=qs_qwDYk4vR`v%KivQ(m#TrFHXBICLL z+}zbp)Nn?gzXd`64^rXed|e|y_tYooc^zdAkzALVW}0S$A5@CBH~z3x$Ecg}di7yK zQkhp#*C&&o@j0%O$tGCdRx|J+M#3d9rcQI%Rq*K5;*sd4@fgA{p_3{xO^ug$6b=Wp zSu2SSLCoetlcm3_?75K@QtXm(WAA|;FlrdNDESevG$v6;M@@0{05Y>SeOp<03-S~k zVVNZL)tUaGl9{j&8s0ahi9ZkCIPuaj2-vC7<{@THT4E4%R8LWufWryA_R`7S14qjK zuznvTfrEf|U;rGKBj_aCN38}WB!D|DSkuF$nGO{iHflq22~7y8vf)dikZJ#A)LG6z ztV$wSMhnI@Pp5;OlD!iDCtqKBD|HOH({VrZosf7dypMXaRXp``jX#Lf@Uy|j*M^K{C9L4EK;5Sjz<-XJ|7q&Zs?vFSGAI%n2Q%zGyja?$$-AB#0rJ+$t-Iw zfAfS0N1o=6n#p7yrBgv*RupZ}TQC%!kcLG!e?zvwdU}k4H|q+1nY^ zNv5ybN4zNsK0ffGve2&1sbaFqW7bR1_xpn&DwIRr-#)$=Xp!OXrcX zsE2;Ync%*TJKw$SH|_H+di}ISG?80IzESL8mYbRysrt0Fx2n{j+3|l6HE`E!KfGzc zF<7y$zI4By1G)Rs*(X~!Unam@c0bye?hAfx0l(#6KF2!)dcU(*d1uw$zFg5=y#19y zXiGYCyX|I|GY@rKnA_hPTxfn_yV(TH4!7Swb7IRypObcJ@YaF*LqnSu?1U{4VZ7>B zRfFw+T6_a|2g2KC*@UNp&%I{DF%y{q^W{NC5u)1-&~-XiaDU-`44d3b%&V+L8*trT z%~k)~cxzK1qPkUCUxzme6e=yIM54XMklj#MQbY%2@?d()l3}@aFJ@BMX|4LH_5Q z2a&J}G6`E?QfOVz$&?`zd2*#vR*fL5t<{jUS~tvM2oRxK)~PHgUdUG1O{KGnV8V14 zpv{|-{(B060U`_}dH7uOzBaxxd5%QplY|+u+Io%aO$auccg4(8CnW8_C*CAv-uNlL zfP}u7IQ@i}H5FLAK=TNiT^U#`io}G_N!g;F5yMfq!P3wWO6bt^y1?h{tm*xStK4lZ zcVB??v-GphoX`mSc|nPVoJlDpjUfSRN+&&N9Av~)FM|8RG!7(zb3cpky2$&=Kc;Okmvqao3Xb@1 zy?e5CFaLV|hnmXraoe&L>V9Tr+4F|d`751&NJzEk^q8v5^2D%!p6Kt0fw4C+zGCx zdtH&uwoQT2+lwK^+~BK35h5@lgn-wR-#DIro0ke5pKY}-rQJ6QW*fwtm*{P0504~n zK9B+``z>sp=j*e^dp>>l;T87L-Q ztJ`)#Q}{cxuSf1A>Of%9w*_qGT~kE!*72h!tE(TZhrkV<>DsE6IqUH0IOH|?{^ioR zs4WvXT}79*!K3Rp{p*jyUcY8Am-}z&$i;EpqicwgZ&26vHxw zJSJ&{gGXg1Q&0Vh`NEFVF~ujZ7a4-Y~PJ;zt6{4|<=^zmz& zouYGw|LOIbnMR)m{ikBN9k`#q-KEMmxy>^UoRTA^AH9bj33=$XN=qdS;(0;dNDLjh z6;3*MTs`qfp=Y>xpB7huz+K9A6idUygqx zJ&VX1T?i?^{?vG{X1e(iPr|vMt6k}8!tRLIK$#O{q{2g_gze{#tDcrg=9e$lf@ORt z?&tUYH>O!ObwgEs#t-!%=^e1fO)-i6ncY!*6`ldX@4|8d<8Bbl1Rt;1RjXDo*#+dP zD&x&V>p%Ol<<6*s>KTv?CcdqzT2O!IN3*f+N4_4F!UVS;6-M9QToL9uF!k#&&0F*0 z1Jpv@%O{WPxa%&S#ST=4T%ndRM<0BopHx+Tt&cp(?pEOHUm_CtV`#kb+@mE-Gqik4 zw12qJxD3Z)Y%3W)HF)a{XsNurOMlo7`l1Scj&EIZgSBPefux}_y^P;3qUUU$mC8>K z3zxSJ-Ll(S^K!ud;z5ly74G*7>mMhcN^^0tjpJag=2YDlBVS+s;qi+@L3kT+YNrN7 zg`8a2+mWle!R+}onp~a_i+tq01yJHgVq8=re`i{e5OA=)O%i%l$jqNa95*V>zvUMJ zJB165ZyA3vyBcAq42N9aFE`4k^%H(?YF%~kfsfi)R4X)ez5{7LLHW-m^GWxQfr%3F z_W?6m@vpv@?N)E=FL%GGqi-{Ho|ua1^PrnyE3I0^27XrP8L37RQ09;A&sWug>CE%T zoUk5XFfv&8FmBh5RkI-l>yqx}Zb9{@=9+u^Si52%p{N|=`;q4!_#W|8kF-;F%(3(yRvX1LYRe;ywzn%yO7&MxT!0oWvz^P7h#kKz3pe6fqDCtd$SpA;fGnEyp zhANkLp56jUePL*ol6snm@uPa7-afrW)!u*5OF)sDl3a+}U0t09F1q^%>5?5oLb^Tk zNtAagJlF)HdP+cgI%I*-^man(QRJ{881rs4*w+#oD(I$@c(26Q5Be13Gg-?K{a_b1 z2O8t=;{2J?>(y zvZ)LXaHM*VC=mu2)^G`cs}uYSu?#x12;j;Ff#EggoAGZHcPF3H={s&ofbS)s#&OAI z;UebnglQ+^)7vRFzp8k8zXyiim9>PJnv?g?Hr-*q)Q65hUyLd7Dp#J+9`Pmm6~V#r z*FC#`AQl)vQ$G=KH7wpa+c>>E_((V*FIH|bnzkR2U0NxN1^Svs9#Lllp+Ghg26!q~ zx6l`pd{s6`5XcTo+=Exas=AACp|EXej+7UAP(=M@IqzJ*_!$$#qv|w8QshSOYj^kd z9rXYKFta_bZ+fJ&(hzSJ4^WTs5oZ}IWUApk%GUlKq z!n}j+$PO|(WG1ri9sKgK<%^c6q-3Hr9}Lcoj9y)Ouoe?@+4o%jrL*S`+*f^$kI~`% zQSOi8>9#>Vxo_l@W8V&r{+Al$Qr-2~K5NI)JLhcHtDxd=OQS1~+V;q*E@pMMhmNne zk2L%uyo6ey9B-%4qh94r)J0nX|KmLciX=tKvd~ z9~BJ`Jp%9agFD|xC&kapx)KUqOpCz~J z2&W70LbY(t=~I>7(V6a<4=bNLcD?Ep*J#~(LL1y!{ef=cr~Eb5E^WQd zV6)=b__l@KQb|YgTQ6=vZ6W*F;YuU>NuEphVI6q~d(g}7&@2e-vJEDReiz>&IfW;+ zfOtjXyo3d7qE>$lHD9&H^m9+~zu5$rM^E-4o?mhNVi%F|I_r6mQO+!W1NLA{-H|-^ zILoZtHGB0$7mNSB_|>GoHmse5Ygd0xs3+WaIR2$T6fXX76&%L|VHY@R?qP;)9{Xz> z926=JHgw-UP!0Jn;+vtvS(wi6;e?LPe&y>CjA<9><3r9lL*xfD)C)z%Th7I5HKC|G zb)`R*R9`ev5LG=#|Ob=E%D*vQBekRTO4fWp9dZ* z9P-v){4RG0evwf9UobQI@H!}w_w|&>NV+^ zK#ALQ46QY>bw$YmOxv|DX1lIM$5q}GMMu^u;^S18&dW6x9~zkFYBuZcWnCtg_`iyI z;W!-R?&h1YrG9(=6_A6PEj=Zmq78c^UVTwJI>tdqE|1fM@lH=xeCfezfg6$ME=pQIhH=xLx6l{e@=FJ(FE%ec8Gu=z)ZE z+Ut?^HcD;EX_hGAL}z2b` zf9=U2zt@8g<;P0<->upGy;8byWmWAn!tSoh|3rT2eQo7+-9>PuUqbxp6|4DaHmnn0 z%+ngl-_UPXH0bZh`CTq+U~aRCpmYiCia#IMHf-NhSb;`J9LYcArl0E(Em~`0b2R_? z?{53r!(Nd#_Q%G)&C;AVoC>;}fBBlVeOgM!2ah7F^`WY&%5Mzcjm%6s>n8iA+_(L3 zD~YT7esTQ^UQNeYy=%~mEw)u`VSFfJrhDjS*2zYeXTw0$97|a!FHZXAiQC#YS~)d> z-P`6a+k?y7$~aC9D%o+;@l?Zl;0U8 zUWSQ4ILQ!>LB@?>e&c8k*j?ztmM|AU;&yJ$H5K}h(N>V-*v^l6jakk(9- zibf-DARjS4&7wb3&lWu=eW-h&`#v6cCLu>-t@B{>`IMTW5zud2g`stpTxTgSKz6-y z8G^;oV)D*?HLcK)ry+GrT4F`AIrcXYekCpTkO_Rd0@_4Do=fu8X#Zu82+*wq0Oi=) zRIgaLq)m^pj6-~|!RyPwM8rgRl23s;D;fYiaR)k((e7y7X{J;+q()afEVB*uP^Uo zhO|@oAYqhzflL8oY|fm#266NbyM6EnZmWW}u2w)-OwxlTKr63FK_+`8$w6>dr`0UJ z!$hhcA#?Tnn`Dao$QpjJ`G|q7KzFRu(0? zQ;NAB!m=DUw$pR$m{UEe9uK6<*si~^75klimn~(QFM!zn6$d?0H7D_M_G#$tT{8R= zgtV=zo86SYjNGsYejZS=n=G3s!eyyc%=GPwP0ZO?!i=J2ba=z#I%uBtwN zdc_a_f${!>y3IZj9j0wf2IMKdWIg^tM@yR{I}E_56s%@NvV}2~X=c@iRz$#)LS?Ax z)CfBLbY{NaN3~h$5yRQ!?%-@BpIQ+3z1;tc?%{cOfnG{s$v)_< zNZCX%&m_)T&#PWR00uY9Jq;ENX<}Vh_sMF}bo~Ttg#IT~gC5~mk3gG;Qf3h!?BR!0 zVIW=+lJw)`P9h;((64kk$YVe->(nl0kUshEeU6L5n!DGDak%GtmuHIC4t3-!PNThP z(_YI{r{xb2!jZX7;;q}x?TsBLR8yvrE@?_rlH`^b_~CW%k-QKG7HyIWv6{&QRBcYW z_rCQuQIb8eFxHK}C?`!rM2r>0mU16o>sdoyrk8l;fSI`dxtxjFl75B5r)5r=YG+p?gvEPIx5MmAOSNDx`=v);MLLU}5) zPo@EIGxjHXudcWDQJQK~hOu1Qn5sppZ$-SR(31!?0Z{0UT-3Q8HIkITA>;BukfX5m zwMQwsSVX%#cFN&-kZ~DES5nZS9{u+dNiRs-xOw@UF$`+b#E$7A>=a9y_yGOT@A{6Z zGxBx_4XAEYOuhU{)4#Xb-15O&748ks<oCzZh}B?T=(*uq9Moczo3G%OPc+iDYtIs~U9s=$zV;KXX4 zGUX!q6Jb$xc4x#;Jc=zOYM=>HW^n(;aL&d&@OTt9kQ4ULR{Ri;(ecLPeOpi<-<{8) z41vS!@<$SL3{;&uXrK8ObS_GJ@`!1xL24t^)fV13<*20_-m1Xm>$4F}x;3T7*kiSo z6Wp92Iro(0Lv+Ak$QAM6vZY60V7E)fyfAIGL^P$)hVYZ@5++bgoHI-Sgx;Jq`+4{T zs^h4Ms3SaHm4c|Hfun&O!U1y)r@mkFb7QqrZ|6KkSkFBXB}?9(X0&gX5nVmA=bgwM zPcys8taRCoV)IjMz#|$)@WUTp=ba;mw8@dz!9UVYzUa`QIf`Nm$oM!{+|%l*Me(>P zNYv&?3KSwYXETN_V>m$??M7=CFQps!BEsWW>!K4i7iGLm!aC>sEzZ@G=xD(N_C2R7 z-}S|Yx&5wTu`G&?o+iBI93&<4o7EP>WP=3+0%X%9&$8@W+-dplr3$yHB1TcN6?Jc~ zd!(z^<3Z134ZYso8eb!j&-fe_zI7gQSF5%6AHvAIfaxVw)bG1I?m-Ctk7cr_0#=EzTUMpd@mDS!=%s8!zfmwx5U{k|1uokKIH>{K7=x7PE3RwsX zpK3vRQ(=g@8Rn~Kv1DE(kuAvB3bJG&g4>DI6t)K2>1;@sM)IdS@T_CA&Z7NG_SfWw z@9=A4Tmyq_f7|5W)mgPR+;3oVaUV+y3YC2Rqx0 zx!%Sh0h=P}4-0*{HSd5kk7^)Z@O+*qdWEJHQS$z6whxyTZFBEhfGIE?< zxF3=y1aH79=i+b5=gV~Z^Z;1pR6ZcTZ9kNolPb~Pd(^QwfNg(<|A`cJ^~2GITH(k? zH-~F`tC#JcxVY$FChU7ffZcp#aP{{iSeD9#=JXej_T7AP<=B%I1$S21yng%kz|M0S zu>2>x&YXR?`~DT!tG_Qz)apENTE%7G)mKk0Up}=veno;smZ3VT6U2og;Js=v83}f* zE%oz{mP_*)3pZ8352I&1c-qHA6lD8N>D#@sz-Wd^?~Et2Hflh_nX{)!)fmoN`zG2mbK@0+U={XbKZ$O!kzL$IOv09N+arAHPUlC8Q&+IDC zbjbo`>}%->M8rO~X2%1Y3tdV*b80jHIC$>Pe_I>0M|kr9C;x1?Q^Cd{PrKr}@eJ=R z15;lr(VhrRip?tcxCWeMIEr{^m@>oRJZha$eOM14KDf8L-nnc{q4#cW^>tzNd~aMB zWOLTN>qpxxht|DW(YC+$)Jp>+oJ)*w{@db*-w$&8J~>iilpQh;6z89*eNg+I{8YPg zz-H?P`+TJJ^BX>2!kQkAHr(j0eB$QC$h^pjbhN$Jy(g&4dwhZ8p2f=^$*!)?zP8y9 za-gcyLfy~$hfZQe=^@9fU5_exsw|^Jy&>m5Pd?2WB+UPuJHX$Z{nYpCV13tu{y#%~ zc3y5C0h#QJlE4<=o&QMIOiuoE0W=Ntl)O}m`;%=p#tBb)i%NCEYe)Pd%btg(Fe0bn zQs2*vD#qv1yY1T^lv*7hDz;JIAUf37y!~B@*ce-kfALWD`sc#aNo>_zsZzrY;5z%X z5m8>8L7!u1oVEG<-+B)UE`Em7N21SomFg6)OtxDx_D7Dsm3GndY9a`!mr6%VeIFDZ z-*WAk_7be}pBGO(`ySIJA!YSFR~Q(v;=tm49#{JV<8j>W-<~lhM)O$PtF?h!`kNI( z$Ha3byS>jiL|ks#b<#j%SJ3a1PtQI%*RFEn#YpDQFjNbACJp{3&rT)rB%m~DEJyCKfJ%ewR7{DA84gu>kP zjE%c3X1Rss@yhuttNTHVsi7Qv8~_FCx<=E@0`rH+4c0DG_@IJjy&||>7M2v<+6t!KZkF< zt>|-eGQ0V7L`!^Ho!?Z4+t2FIN*BMe!wb3%a>k`-9saB zaiHhkfo(TE1W{4Bx74b49yontUB#Vv9mv}wCaL&5#VSQd6?cW`<$HF6i9B@X$Gs~e z$alrg7@A#=-1?d4qj~q6cec(68oV}t+CnNw->(&!6@xtcVZUM8=_3fZ&PLl1ulPjN z&rI(W-@qSv{(JuWZBoImEq1+pbA(!VZ$$K`xDOP#Uyto;A$ojde`+t;`Et)zarslX z+kRt{@X5V74~w$BsyChk(sJJi|L|5;8!QoitX8(HDw<>ljA+Dkn6{udv1ps23dSh% zV?qbEA&EO9yq=ReKpX7~q2S2_3lYUeW)0Lpyr=bKmAbmv>%XP^cUEHI6sG~xb)=Qa zK%{zMtC?|;X2Xh;Fd+yZ{gaEBBbYSGkzRIkT$Z_KU2sVQOM1}g`M^pM7nfVPfE~K* zWXfvq%!pB5E|Kt+bz3ynt@O3ptleUL`*iBpQ0$^L4_?@)#lrh?U+N+>y_fiO6<~b< zh8q&aaJI00U{Bz+f-EkN)9!jX)2?cO?%F$mu*Qbe@xr&sGH%|i?!VXaOEkCZVw0d% z_kHW`9g9H{OmyWB(a?|5YxZq^Z<|8i^tMtGx366+yLo%(P-1;T$M2Jx`T$+b1H)=` zI1#1LE?_w;YNpt4cygz}v-{6dw(V;(V?TcCxm1)}*EJCI^LqMI?ARMazkf36A`I82 zj>4vfkmNU(_A0)T5F7CyU8W6(E9UG=-2VqTH!Zi`(*5bZQGEbzbLLt4Ky~VWUz%UH zspLvGF}W_Os2xATk7`-Ntrsti7`f)y7T_XVE0H`lnfV=riPi1>(|cMf7zwKhnVR& zKR*9Au+FxHmB@sJtke6*)$CO?0hep{0j)`6ncvv8oTQL`~AFm z`>`Ko&tmsRrBea}%Ex-s43YKk7`0clEdSk=Iu92~s7vh2z=Tvg~KEYxxmw?vdk;{-{l>c4gf0wCgHm-7iYSThk)fg_xl_Z2F7B}+8|`F*E!AKEMC`frrcXdB0!hbpMK_=D%(BQ(#@uoSn3xy4=!EV?z2YXh>gDgDyWZZwqomYrUz3PL9=-}>Arut zlk|)G#FVqL$ZlNUn~z|bpT{cq8Chq)^kTev`DoMZQnK=?^WEI$FvIuqE{m^N%idRdk@z!B{FBIv%rAPzPpH5 zz4%L(YoPz7ASAV{Lt0>{p8$pW&6#X+fG9ATV7@{lZjegB65Sh?p#mU zSHp@MIWOi4yQHK~>E4Lx)r@Mu07&!qFxlh(3B{g}bNW_U@c|%~kKv<-1nv(@%k_%D z11ZeH`*696=we=3bOYo+Ats0Hu|=Y1t@BOK#R_p|Rx&75XgGO&A@IT4m4St>U{&_b zDrfkW_~?s$Sg=r7$X+oS$Vyt_;jmbt#7o#j!$a6aoiqgCBL8wEtv@sq8G)!M2Qd0O zKi3$xMJizfk3VeGWKn$!wkqtYgj=InAIxijg%u8nl7-3&R|G~tpY?ftHU+{-#;#B;0u1=8KON*760D6^%-kB_s31ZkdTqucdJEBGYEq2vV0aXC4 z{t2{_sFa5A*MSc=={(;F8hdH@+Q!XhZg*@jJ^f@yB(SxjR6cups()l6W^rTW>KA|B z!xTFUh_T4eKl8lraW2u$x?^gBKN{-mf*TJmJ>C6yMLI7W{e9XD|(Z9fs z7`tp+o7iDXS-5L$ttzYPH>k$GSTW_0vfu9v;3T6vI0)?#VnhP{R@fO|qB3M<0&o?@ zvOHfs7;b*p-&kV!?Unk+ew*4o1g2$tnBy_6B>$lN^EQs;NLCwrX-pqWb~^IR}NA6wK>3`X8z9YupI& z@CmtHAc>4W|Bs2(zmvDzU{Wy&3PGa)mEvYN!0Ydj(*dRt8bOSj){i0za`~6?8v)Z% z)f&5{&9Y4_Ep%%weU=oY0x0YD8A~jT{-ivPKNC^7cAF8lY8XilvY@Ze#}L-to{D6z z3uhXvytGh$gvBLcR03)T{V5*3T@^f(&@>xfRozPP_^vN>*lbaJrCnKQU2qN{21!FU ztC9f=qbE(woa=Cwkq8mq&^X99z4<4=DeF-5yBKvdF~ytLL-b$=&5~6L%AQ?(D^=Eo z=jOWkp#I`(_;^XR2i*J1+c)nBP6aqVi@#Dq)2`+!TQ#S~Ytg{lIF$kRsO3WowSr+w z`FFo^qmQd8&^xKwqc!P@jljU9Dx;L=3~I`<)~SYM{+!LTlzTHa{AT!dCJKnl#CU)| zc4+=SGo(O&e>K{pFRtWvo)!N^Yoyx!f~b_u)|dQkXpUNc8E+4%uyM#>7Rp`PX{05l3ZI>PNdW#uX#{wRc_=qv=9v4+Ma3e)WgJzljYz5htBsJ<$a(Ll9{ZB&!^ocQcF-y9&zJuAhrxqOt8p!^H}uMK6WMN4?tm zc6&ity_!g-r-+5lODncM$yC2h42u(8kRRJyzBn_@adEC;6B_cHD*76UXeDdJgexl7 z$;QxcjDn0}-o=K$v=DwoRRpaqgwuc$aZG~Oo?8>dpi3(gLYw>>$w9WZG4!Orp#xc2 zOPKJ60=h^R7lg%J(FbjcRdIgD+mg}AHi%9`Pp5*Qov}QZ3)TLYXoGqcxYFa*MC(P$ z7ubMJYGQfmugPS`t${?To3!i(o^K`Wif5#t7hPxm3xJ+Ib57YQ&)zE$aHbh`heB_8_ z`{4VY_)F^8Shu-*ABo+LSvJLm*eT^688b`0olA2g#w>HJIkJ^~4ld91WxAjsWILkASEiWuZKdHU@%RX5iR zz~R9Q>J>}n8f>rTPc1dszBSF&^=UT2k%0z>vuNb~g`aP{aR%z7&RSHF!hd60U@0?M zk(z_D+2SK3w;Y?!!jDcB4H2C(H=PAJT+eBg{j{y6!~=z_eQ)m`GjOhRRv|#3z6x~v zKC2j)9?Slc?nvK#+kFq~r0AFlTi8H2c?fF)wUBGY-)&<8g1G*IOcE7nos^~*qmuvl zQV6=s@6s562{ns`3Fo3QkZbEK0+mN8m=pXvO`9`UZk-D=*f9_u$OCj)MGCM%Hw;bG zp$z=F4bX zpO>)V*hPd_B>&0X=Yk^~r}fsYzszqeXT(DQ6yE}9>rj}3GF01qCH$omF_=&?1M*I} z2~+Y0jxaKJt$oM*(_Wc2Iwe7eHzQ1=VW-m~_4&pMK>Y@TQ)LJvtpKae1VmE|Lo#xU z@pht>_27O*6MHaHKm;bAJRVTI^`1!uGiYl+b>Ho_Xcvlx+J;k@fSXR?R{KqZXl0^^ zcY;o@IS?D9Q(pCk!GOil*Cha~Vjzqaw&S!A9pl_LkQbZvb}ZrRgOxOzd0b>`4*r>3 z^CKpWx@xo|22Bo&Cls57#X_O=45Dqbl+yI01#JYty+eMbE7->MAHgAafcMwV7C+`^ zajhk57M;tWGAeKt&NOS9HPCn3T*ZP9eOrcxb0vUvEej{9(z)XKM!z;>bS7#hy&2?+l zt0rt5Snl&*AhnOi_CFGYlig4tfjd$=0V~1tT@%L7`0-&|JH}m{G99YTc<;79l{i-M zpU|mQv0L1knMANqq_m81CRnuKblvK{8F}N>664GIke9ZS6q3E29f)7wDa~(6+kiyM zepO_VpeljL@d*shlX_i>V2boeeSk{=w7xZ3j0y0hU`3E`BDT?rf9Ogej0tnT@u?J4 z=O++nPkH5)V5u0Q+}Gk2p4j?>1n~_ftVjzBzig7&p2RY;GAN_y1G4IQ&cXj$kK-nA z^l^a)P%~Olv7>%nH0}|nfSN&K;bAP31*okt#25IJi|FyP08OQiYhnhgL#$R}p zj#Mb*@B@I)cS=VS|xO!ezb{Fs?O8A1dx{?aor7b+eAbG^~#j%aora*;^2 zZE<8VKJChX_fkygm>fFwsT|Cd#29}peNoh+z1Na_)-3#M#HmQOmDnjQ@GpEQ&UPO? zlp!OJT|IE-|1cYo?B@R_^bp zVK7L6ySForqo|0n)vvM^ud#WnTuNN^~qhG zQmg;o&S}GfJ+F{}Pb$sAS8-9z$xM?-CLyORxL&W70e^qG5rc;X+t&Xy+9Fq6CP*^@ z@JswA+i|Z91Meo^Y`E=ptJYE^{l5FRlybFmAC3?f&6eUSCO zOTGyaN{UZI#k`a1NFx8AbXA~`3{}-J<{sx?ZjIh?i;|MQOQR~bXz%LOrxRp&dt!|> zdtuB`9vXY{8mm*(AbgYuB$4R@;{IfGN2`LM2`H7EZ`|~x1}+UeD-jbZnat`8+e;2* z_8QxAWM*(zI0_!&G-;kN6Dyu`)v{M;-uRT5FhJEx3p0?^vR$0-ws|%>e>o~IvPC;c zW6|qNg5Ih)Tf zy*>F4s$WUdXQwe(cN90??BKgp0d}cphs*(@VI;iSq<5`&4+(;uMC8r!D$kacLw)7v zvEvO!8MPJg;2ED4a7>r7$19h>vGAuOdPSU}5xr{vg0T}pX683=uy~0>KSAMXn@e^d zk}?uZ6fP^C+Em1MREb3Qs{Yb#1>X6hkx{oP0u`=gbl7|E-0zOZwLve1ZV!0$HPR)T zazGJcl=7vEwbG6Z+s2v!wc#-JhwAT|>+W}6IWl5-(W6kV10y=FDqa&nAwmsavdJ>$ z?rJMaSrb96TBSArmTb#?{u62hH)ErnhTV5IQI6s&LXR+P>P}_>)BrO&Gl{Divd`cf zHGa}c^L__3%%bjv+1iFpFCZk+-4;6$!V~puT=P?L%^R5NEwhZkO_ezOoVr zNt~;p5Z!}IJsfR1ZJ?eNV|h;O!NQ%W^@kVCBYBbf>^Yd?+WJ52zR|F@#9hizi^=ee zM6o&l$A_rYVsq}c^?H;!bbzn2Szy9Yj~VK&d?E$z7M{0eQT4(J_G zi)e}?(3bp1@%|nHIv1qM0+J5yyvel($=9` zcn^XeUNwLhJki`rUTeK}Y|MRpsm~v2FjmH{pmAap^+7nXDi3V<68WlBQGCg^1*-p& zv3P~jGT}*4-GGsj=g5rczEIyOS$(>^M@ea?^~I4_pTA~V_WJ+~@*V!YpQd}(6>8Az zvv-&CIz1&~JY3!XzuOI{0KvZmYU~{zHM9hZnxxRny{7eFcc9v$C9zJ!aU%Jl`4218lJKVnc-r@eY z3nY*VD5SFl6l!{sbo5r|2cVhc>~8Sg7su{lluTbJ-b{IawX`O&o&-Z7LuvB#k3hM( zmfP#!_ucM$`0Jev?azn8Z7*A%A9l8M4tIAA%2OXTI*yai&#BI`4UZ1b+Kdi#2ucC^ z&IU8KcZ)*Nnpy)Zq+6pKQ;n|p*AfD;)+@b+xTeVYSnCot8_sBI`kL6^Kcf7#p{XGc ztfuCb78JXve$MCV-dnpglrSl;@BRK-l_Izx7%@7y+&ZG0{&eFLm*sJFMJ^y*ul4c8 z`}T=_-7=WX?@}^9g>Bs>Sgx3Y5y_>cuB_KydUhBtXHo~GUnFP-OQKg}*0G5_a2fAYn^@#B|1r^#)e zaMA#2@kfPv%Ux&fzCZGmj=v;kjC=)d-^erG#yAgSZV`RrIdFcA$X})|avYv_5BvMqk*`rK=_jMogTM5O3SD@c zjIr(#5)FI<(`#1&E$cH`ZPNb zd!_7Ot#Xm{s%lwJ4MVv&g{R!O)XyOBuX1}A8MFLPA^N83|fltd}t9QSdRZw1Yq)vR#N4b!`TT z5Wh=;HA#htd3IL;m;y069(8oeGK`W)*we3~RB`{ymlkSV3nAk|R*AZQS65yB%-H5Q zuo|Szk8k>T9R|w*QQLUNgxDOiN8e299VmPhU!{brS=}YWoLDCrU%>;c>l?x~91sx3 z#%w9#c69p7cpPOPz90$_x#mP!lD7t>t%Ajh!@wkaoW*=tn3(>td*Hv5yQOu`yrX3) z){7rIvFFX-Z1I%B>Z#i~Z69|p-IuK^Id!-_<)c#21M%{i^X>OddT$?0>1p3N!WG`W zhU&&w-*7~oT3%`oJ{BLsCBjeMh>u$lzS##k`_At~+x^^jd6_2=Z}qnlZf62r9;25t z-S+sOsi%0o{%g*7Af5LYp)$2xs})%|^5i`Ds=5_9ugG#l)1_=~Hfq$~CI9Qm2$rQ; zfX5`2C#(P%h1r z!q;EkoK$#Jt8kD-Eg|^jotcPf{bA5qgbYDP1_$qX()qahtL(U$Pl~j+d7kf6k(}E* z_qirU2JSJAP*?gGDdA$1Yw1P%bWuK}Z|QD7Us-ZLGTm-PvZ#uc$>O#2m&K~%>JT>A zlx64clJ_V2QPw}CTh7f|Yku!%MUQx!SEO$nK&#i29do^%-rA*EuZrK6 zGkBf%N&s;P(4Mskqh zFTKh(0k8z~P#&+!Z~OQxhXA+wm%zX8;%3nrBw#gwJ~Ds!RXF7{i=;qR6eG0Cg~e9X z5Xk^FdTWm4z4N{eJc*4a2SEj|$v)zUOz7GGVkSI`%HMNNGn}_VTTyI<*|SW#=Edv` zCG|Jjl(7iZQDtOn6*F-B`|wh9YmmU*UHMX9aA|a}wzRw=g@$iWh38M1*@O8 z-d@P9*reJRMAg#RzG0G=g-n(x?>2y6WX0;T${x>G7aWof{_1!yv3EEz{AK98R$l_J zQZn$O1yxXDw2s!x-xiT;O&}^rNjZ2a;p$#Ag;hp~aN2Tl8Coh}ksGN=|!k9WM=IlFGkfUNo@ zgBgR*?su9Z9nF6X*V%yE2V$B|`ddBm_skLR-n2(?E@ei!eB05hpL!4vee~N~#caRS z^H=ESwwG+3wnH85ZAUoOsErbZ@6$IxCDMvQB_f)NpAQTqYF~kx8Q?^^GsDKdt}8Jh zE3{RGe3U>i2=p7>NEhewpw^^`>cN)WNi^saZtdo>uz|lobj7D2qO#$H1>{(znIG!`|ARAfW`X%PX!qCr8t}f4X z&QhN$0)fRB>L)jCZs=HkY%4syUH9wX`0C!^i;M88i;D%$Z1sugpfi zWS{wne6ilI{i#dhHotY(cj+dS#-Vr{eY+yj!IJ@t;wnl-J+dXXE^D3-Dhm3L#g>WR zygvN``caD+N@;@6$?%HRcnIV|=!RG>ev%5cOFwid>>#|)Tsr$H%!DKZ zksK#rfLh};AJl7BqBbn(Yi|rc4s_dRCd6_BDr)inJfh-IrAqvcfngxLW^QbK?l%0s zT0TE-P%ZdN0MA&tL22ZQaENdQR?={d8;)I9uv*5C=+JHOZRF(3sMF7A?p%Un#yWZr z(|(HHFf^OiIDaDK{*4C5!`!ZTU~=1nT1aX5D3t%a5Bbu5mrvSIRyo2Fl6|N2>Yneo<@_ZD*-&ck3zK z0IGiOXHt5>RC&R+y=Ho?)3+(MOJl$2MktPP}9SlbU& zDe1UR%%2Er+H`U{TxV^qTi$CjQkHG;?ZXGPQ;i|on!859Ge=0$b5|hIzY=1)_g<0M zMYvd!3waY2yOU&3Xp<^0z}cjQp0(-=_f-|($2iP?KouVGURBf?2|>Q1$G}A zr9c|7%&r-cRpwGNYgb`OROu}*>e07?6IHBi>Mt#hZARbgGd=d^w8d?CKp#8BNC&nF ztqi{LHw+9oB8gkfEy?M8pk$UqBfhKQJ55m5PkJk7PfkwaP!A_@W4+pY6<-?I%SA1M zcE|LFg=k0N3_z7=2m*%1U?Ugw8Ouv;!Y{RO7i4Vz^~SoLmnON*M9XX;!$%{^QiIJ) zZMPp%Uevjs%gIxVoNyR6^rsbstAm6~2*G zjYru9BkE&yLrm7h$HK$=F6#V^W^+-V*HW%pDk{DsttqARio05BnfX3 z9DkA{KlT+$LR;->7h~-p<9LyRSM6Czq-zr`G0d0XdGjh;72uIGAg`|v0M00Ub1S=) z##&Ba;{?i8J-1%~Lv_B)`q#1psSULOE;3tDE$?N1LJ;Xp)=uC$e&g8AyK^-ysgu5` z8r{yGmcWhYK-FTA@Ur)087^K!n}r0d%)Wr(u$9OD&72WTo|<4rhTD< zN}Ue}NZcOZUNTyZt61C_Iu+*+JR;@MkKbC=__cX^gURA-^3fH@yUT9q zA4mURQ+*`gUSaD(Sj;+agOTN_d{{J`w!$#(W_sRY9RHkE&j_jm4_#)LYKW$g*xbg8BFGRl30AN}mqqSb|RfZhZXzR7ld*Akx8YSh`($lDkV79_gPGI>tdW|cQ38w!{ln1)*pm#u{L7m&ju-|<_XMhct?lS3PJdungL;w zJ==hV8y?lseD>@twYz_jsoqQWjhulwaMji+73)Jh7TWN%Q?$|{3Lz8&sA9GT(@6=4 z71~xf8F(7KCs|o(k++ysV`b!gr?0zg|RlDC`6^ZBwLoLybY3Je21fqt{wg7WpHIi9u(BkWz%z z89bp*zt@kBYZ)_)VEjL6zv{Y}-5AMiwcXsh16x`J-c~0*@*tF$jcfR^+Iq+D2p!FBTEW3j44~ z2`;sa7(Y(Ly`^;-zGDbY?(|V1lTtzGUFKUrb`yHWIzxl_79Vp51X>5;E|XS?BM>uqmTUUl~uCm;{D2`4*dCeHIyqlAHL5&vbGm zlFga#4{f#FvkeEDOoc-_T|YAaN3Tr2v)f9D1UfT!Z$6{@-GsRZYO+DYV(ma<8Sl~ zREwmR84GCo39z%z`Vi1ktpS!&AN@&3EJ91c_e2r zxPNThKe+o^ml1Fp{CsV^pjY&t(A(!KIJW#v-Y5OZHeQ`2D3uA>D^{t=b{3ggXNQ!-B<5yU$n_fZEkocA)?CvpGrTL85 z&49bV7?=b>ER%c#!(G_bRryBE;jPmc9DbPAH-Go+;N?n|Dg1D43;IQaR;*&Bd27i! zi$j(neJqftbAVTi5&pey^CLP&3m3PcDBZ>GG}zP?0=j5OGHk$CaDz zQdB0T3TR0AXM|_41mP5L0f3aRpiTh)b%k8mwN{|AiEd1|JCe>?I4Oam(#L`l) zmUTjS8fOw2&QIWMZWR6mN|7azU;!ErGZ#(+44Cse1Dgt0Fyre&FA{7G|?v2Xo;P08kHFEGE5e-$u~pu{_?z~kNxJB{qT@mHhP4fMjxHuXgHT#{4Ve>NoiMRc}xiP=omW0vTv$_Axq_ z{6q6N#zwe9$CZ5S6+KWIt(p2dRsY-bVB$sY1i{{K`-(6;ZY8-;pDMXZT@W|M)Mg=>=2q7>0wV!|bfZDT;+^d@%4ZRib+zV8!^N-jy_ZR>A{P4}iqDMcK z6;yqM_UiYVg$K>X8X_`VJ#?txb|s0hSki9Dqlro=>D@;ACacF+)pp)WBe1x#%CBYw zdAV;axVVsA+7Pz{M+DT4j0x!T{|W6z4I4{0DJ|1j)F_365rrf2Qir~))g~m&RJ1;e zn450&-@W`LAZMh~Vh`Z$iHld;DKR<`56h(8*p6tCTCr)jpmdC%%h|hUVF5ij$Ll{v ziM;f1Ps;EJ`DU)Zt7I*=ntBSCtiMSw4igpg4BFB?m{zDMQGt=(t!ZY&T>6uaM&W{# zRlYej-X1)e?%!`^&=@dTA)^L)yV%QA3cJMdJy_ z8tQv}fWCIIY5^Z%du*hifzSj+^jRp;s{aS$`zX^3INe(ZBGI8Lps*F~D z*oYN*%Ji||_;UGBUi$YJS7{e24^LA7*5+ObL~+@P-pqM>#pk*&E?lX*QNdZ=d2u(9 zM`oYiHXDh*@Fn+K%dt54wdqShs8dzsYt8bLS1SURM=#B#M_-9ddN04XE}cPJc#qx(~zInw*J>rR@!xX zEj@X}%lS=;(bp?a)$;6qZW@1N)+qs;r`s>=&VP7*{QQR$z1tXYfddfQ{3C+VbFk<; zcIaxt?u+N&pGnb80r#DGdcN;o%J~l_89$DOKC$@l;;7QC4;PgDQr_(my3bAa{1bn= z&?6@4$H^aEPTJ#zfR2As9Wg?4?TUzwc}#)-42=5vh?!G zilhAnSNB_(I-8oRx%RowM0h}j)|cMSepT4-6y$y;uW#(^5by1~uR`&^ z5fL(qr*`j}N8rHHVAY`(G`D@*oGUzaxSQbiJKlzV@UiI>^khuWkLr3OH{7XKRlU08 zU8h~U^VRiajy@$)ik~+Pawq8K?A)rD*Y4ctDT}6MQZlyY2)A@fLSALCU>3y8NbKl{ zvXeaSb$`g`#-U5EJFUZ)S=~zMN?#hgFMfG*F3> zJp}I#2xDLC<~r+?mMz^HTNPR5N7)RntqF83+?f3FpwEWVG0z+5D`PJID2mEoSWiXD zLJOv=Na@eeCxYZ4*GhI$JD3`8e5araJvD#e-vGTS@bzX5@5hJ`y1!N>$l3Wd%{(Bv zTV7XakEK44S*Hs{C|u)aP?cV^w_&%}88RFh5~IDnebT;eCNY#m^rR9P=?ETB`_z|6 zu)1&%)0f!a<=m{-l5ZFkqw|WOVpWJO?hmqy&Z1awYTweVRoCzB*0z95`a+Xe`4|J= zF)-_^7tS2CMy~Qs;vO+G^g_lg(b5pBA>hgIB(w3oZR{jUt0ER>EDvQ_yP_I*x?K@_ zGOJtRLo8Th3&45060&!4RVRyDr6|H6$aP7x$fBZR`n`q>Fl4awB?VEk30|2ic?Fr?j2z_WOBTs%vPd%d5Jo-eJ@?pN1hEG9e84}jd;d7Bsw1v?s4J{=xKhpjas7Eae`;w~zxq(h zSh%%^Lq8RowE@}5Y|_})iwTW{nr|C_N1x!Z_R?3(Qx(%J;RUY0kIgJsCC%g*YfqRz zuTv8g9#`!_O>05PSw1;AmnH)D!LI$OTm(3_S~vnmTNcx74yq`B-44`xydWtZ7E)_e z*8eG1<|`xn0^Xr{;T=|Z^%3^4iEzeC3+Xl%HV&|(7}LWgZ0|nL(KrEs7ahjxojb*C zFQqwloh^hH<)p?5h)+6heY1b6Ahq`!_OPX%FVKRm&Tbwj22uUKAQm@e*y*-O#ad(l zeqnOza4aOuJUoK}=8#xcqWXp=UZXkS$s>cXfBV22KTCF3*&fZ-@01jUB0$(kdaF|C z@A46w%Dmy)qS|?O>6+!3tg5Fc7sZ>n3Q33wG6J|0`n?8Ng*GqxWAzh?idAB*1bSO1 z`t=NKBl@j)%AJ?4(n^OCE${7WbC4Mg5fZ@)h4NFJ#ZF2yygepfim+5bFPAkH@$m)0;v%Yvje+dnUwyXUmN|r%G81=;<_~& z?OS}uBcLIFtT?ym&UMN}KwkFDNz~i>yYJ%Sy0`0|4)q^(tL}z;?)L9tK}hA6mtwsL_#_9*IJ~5jy%kv?)^d= zGn;k|eC8fq_{Xi&W#5O0`w=mt1*d;~{(;WMXCE@PJglE3ax_~pThjbgS((J4(MO$P zdYq*N>UJawSaE%Ed>tMk>2p*Hif5de;tWfMvYiv3h*tMs@{yxvp^z zU1%>^cqpk;3{a3iMlDh60du(-avKmn03}6+>6vW242Z*Ab+LB*2>#|D!I5}0rN(o3 zo8DWz!9yj-suRw0FRvIoy=nURu<2}7K)>EZViOFldSN8S@W*DZrpKtkFgNZ;9(z55 zxgwY`(AFt@<{kM^8$4p4`Snx+uv(~A6`e`5S>RZ0Fa-*Y?qhE$x5@bLcT1;y&pQ&% z>n>E4zJjlqSz87*1pfmewgL0AMul8l`r3N2Q}5KpQ?hEXg=n8Fky!=y?$g-jBd0o7;i7=7*PjC&7e0Y+)#8NACyVqNo(KtOkb z&({P}RvI$eHUS07xauwiv!28fm~#X*kJG~ctZb$2Anf{p{Xr{-$=&VPQuS|XRYJmB zQ4Z(^kTFgN7&{raLw3nPBshvPe4tWwYsrL_MNz~UD==7z=EdO$W@mGV(2TatNbvdeT)zx4A{O63CbQwRb z`Uehue9H&Nd8+qcZdDYG?-0%2v|Toc_==Vc|IR|Ce7bJY3D)r%RCL2)g)e^r)sF}E zy(tR&rv@OmmILP30HR$5ziYPdR1JnU9rWU1np;hSTIEH)yU1RXIQ#*nljV3_{Bj!U zXxI(o3%+mqE$`*%pUIO^dV1&ni|HJh578LE2hYDX>0CQgW7lz}tl+7WLx?FlNZtAM zg|h1ET_@k2P0f1p_e6es16)QdjV{`njpkmIVpF!oxV|KhQ{33ebYWn)I{KebfQFQZ zr8gZ0;%icM(c)a$4uiq!hxNu|PNs_NNJIM0gKV*l_qy2ophL zsWu-lwwPKvcvgnAA8QwRckzd}zxnu+@>Zmc|5f5N$NHy! zbYrdH`)ttl3Cl*$>;0csKGdOs&=FsX0{z)*c=N=mRiI2t4rByB}6DbGh{#H3BFd|;^vPS3q zzj?1Akuo>G+Y_Ps!+r}CyVi@-gY|BnYIP0A!3hqEGT^aJNfSZ*iXfb=u-^y_7`#kF z3cm3g#^%yBGdI5>y7JaKHc!9StrFQa1V1xxVid@}VC{Sd+nZ}4VNNoKUHOZP`PnXy z>i_}vKo#Uy;T5q74nvW;QW0SH!mlAx@nlA(+b@5;z_OM)mhX!5_-3>=LEpaSy^5JX z^L!nV2$!qvTdeWhApmEm6<2tAgvR{rhW@5QKWBP4#{N$Iv!3WPiOw|#t`|D;Mio@< z?k0&64j<@e&ZYh%_Q{gMz>_=`$iZLXH4JLHZ8m>yHlyF-Zvp8{*U^k>rI+2Zs)e5| zo_Jh#y4m+LP03uSOgPCih<{?|b1mTXt*uH%si-kh;tgYwy@jS!w&X;?d? zd-_Na?}#YCbz-+$)GU_CBrDK4V$#sS{T(=^Kk=>w!`$SK zlg&@-KLi}Ab_plN`+QMgtAU&8QA5_WT=U2GM!tZA$5C#=tJ43UDB zv_SwgjqoYIoV;O|U){ddEoCivtjhfE(0-n(Un8_C8cu29jaB~KYTYR3rYmC|+=1QGTZ6BAavZ)t*h^Eek^?# z`a~Qow5v;TmJUjj3|vnK=%&-mAc*-gqwQw*_6rS*fu_43ukYKnr1!S2Z~Y4wJQnO< zIIpGDxiMnTOw0Fl`#ECVkkc5#s|0GtKocgv5s=jsfmH&^% zfJ~05Xn_rOTZ1vm^7eI2Yi>%bOMkhNRc!^r2i-6u8{6jxoyl15qHBAg!zaF zVMrQEf8L(90!k-sq4M>Q`tk+(f`}&sS2PUPG7)=3U*8Qdp3Hb5Hafw;WCi*ziA=xY z%fx%9|Bic57#59<2HRsL(xORs=L{8Y+(s^6kpVL|p98i}@<)9V>hD~dowfD3tTkpd zz=)Jj$Z}*;VM;mUc)|y~8(scu8}NhT-^&y!`7TMC=<@)0#w|didb)=`ko3|PX19;O z!rhKCX~FRY?mASclt~C;cX(hnXO-5aI>xR>>` zNnA+;4rt-Jm0-dFcOo`{Y<+$^J-~*DFoROc2 zkZU0X*_$ z%|4IV1fkXqkTcV>qBqO{@ZB$wi5#HecP)K6z4LI4*fcr;;&aw->JP-ZU~K$Le#?Vw zX#d|pEv=bXZ!H^}U$mdS`nfldr=9hDuk?MV(|15mZ)BTEPbPl#G8c*O*xh=b{!k=j zD;wefE&|=x{g+weU={xv?@$ABMYyvD{u8=xl*)(MU!IINGk;z}_Dt65FR)t5v)+~F zF(LUj*u$m!h;-2hKm~XFM382zasYB_Z-^f#1z?Ycgn>+^oUU$5s2D}IbdEP14^|NXD3S-;Ta6{CRcZ08KW z&0r`_YoA1MD4MG<8(bKQtvJ+Jx_;tavY!6WMYz#=GW!%hdi^0G>{{z9PSnIlnQ8nhloRW%B3(tmNK;@we73BD&uKZ^I zRssgJ<{cXJ^W4<)EU~i1{do5()G8!37>*doJ_xaCrZ>U}As7EjbDK-Aq6a*vjjQk% z{m$SroE8I(uuy=O32bd7l6)cdoH5_Vtb?M61W{pmD^HKrGC?eVhf3ZzNOBp1bv(7=G zE%AMMq=zat8yGD)4tO>EXPpZeLmQJ$heJ_lyY&NS*(96PVC)J`OgMT( z4h3mp^dW6z(aoYMERoc3$OssKS`!g116f{mF~CbwWx2Yl>JwksE0rv=s+#-6oS(~Z z9upYPo-@;!53w~9;|XI4;7}Wy7rbwUC0S`Vn=`Rdr0C-<*52bzKiUJ%aE`9<${a2V4e|zwS&lp0fmpvww#+X%y&c%km=u@soAMPt0Wt zQ1Q>GCNL1lxiXrR6tChj6+Y!1Vne&itTKj|QJo;Jz-LNNxFJ;TGG*!eqhceY7<9Cz z4BPWSA52_Hw*xj-phoFUR6O5f2g&kSj@DS65^}ThHlXP60K_^H<{4Kf6{8ThZMbx; zXcr0E=!&*QQck?{cD)=)SCdfQjC;|hdGog+?xPMU#vF=2SH$cZ-#Tl*q`a@?}=>plNlW z+11~~25!!t9>wlvVEWws>7+_GK5|*vdEU4gEdO&4ejBIIZ=5=+ba7Xg_QtAg#d|zW z`Bdmi*lti$V2d|Sjh46P)ytdV?DRymlga=K<0q7y9%bD;=tyS>8nfNl{{p$Rp^3Ke zAd}xyAauM|^wDOJJe}S_gII^MboCNXhJ=}hZGWjPr>oJVYlW>F(_1@q&fKh7-%w+| zUNS7ypWzZLe05MObTfM?%WVK{>K2H}g^YS_#$e702hU8;#OSx@018?SV?eiEVgz%_ zqDuWYPUEHV@(K7BQXlZN>G)__m#+^PkN@yilU5e2(p|D%uhPg`u&hpw-@(v|DrHnC zP)YLV%td6^ZGdT_c5~U`yEwLlzp@ZA;CKB-R4rw!Yk5{2QC9ic7@0)VvTsLrK z7*Cwuf{ercP&)`Ul)0%Y<|aeTe_3KusJ%Y8GzSR1A+v0iE~o?KKPE6x4D-5omF?O-rXJ@n*wcRoVd}Uf%ROE+k-GDO zajer{zgP-0Q=gtKR(4hF6iF|ZyDR+K@Xgm zyhWKYK_7-Ym=o`pJB2IYq(vkz*(CD@k+oWdWAu8lhyaH;| zH)+eNzWH2;jdlx(%`7>gvX;!o0bByoWiu(#T~(7S7PCpgfFt#^H)P42HWe*}OmZi#`oD56^TNGSySqIv3&{m_ijr{cHk;5fP(bp7gCJCAhS!C!yB^RCg`RXuA_G#8^!8tDkK0VST#I1u5@ zb~DZ}cN3&Ji${&F@k=QHP54>nv1|7r_w)}W4^|9?uHPsHCc}#X56Ho_)cfSYW%gwI zd!x40WRtGqXn!ZSxtW8GUDV1sYjfs1qAAm2xLDV5UvfbBtzeyhX~<7>*^2`nC4J@lU!>Q`v0pDw6h`RkLN`h!oe+MgF4IM)9B(|bGi*nEwk5dPTf z|qxZE4O_g*C{}ZQ_$Irlt1reW)FRkw|*^)jY;Qb1|V)?enKh< zS>sQsOTjI-K39%u&}Q8It^Y)v0IcIO%~!UAx>ZA7OpgJ!{-czc-iHW?f0`&FR((UM zYkNv7o9%G)d;0Tm4_8BraK8F*_Szjb>1_9iTi1ovHy9IzFV3Iy-`_YT<&T}Qr#tz4 zsP!8?#?_CQX-Hy2Xu(?~2N*O_E9r*7aM;!p^35Xd*DhyXh_%ybp6>CYJT5?rCI{W| zeQi*ZQo<|#fcZyqd7Z+>zNqc!uSa}bsG_{;dG+q*n?HY6Tznlk=<}dQcCYL3KK9jG zzsj8-U@>OT?36ri6c^2*W=QDIJd4LOnefmLy1iw1t(E)Jrhx$R?FKvHPs zkjSe3{@Kz)l~D(xdXFxC7=TA{msXiB#uefE+PSE;1vvcOROIQ2SBvQkfPryot%-|| z;X78~Uu;CuF)-a(b1S5a-15h9WlO2KrsA&Dzpa6@S>RYf8p|_$npbz@#sIw^?CAJ_ zm?bggttso8%|SQV)Hqa>;_%fFpx^i^EyTDl9Fl3xZQBysx2e|IgMNYqud$Q9uke_S zXtXgNsI1$F@)atD-rf=tsRX<%bp~buFVLmMxb}44-;o;0gI4o%h){08C!%z+?E z7?H`4qW|0^ z_kyh!&f13Ny1gve-dA*J+to)TbNj&~ZJt$YH{3DMT}Q7*_#OyxcFD=xRub`Vj*BC_ zVkGSbI*vH&D^bf5MJ2U28WP!AFHTPrTOcZxa`(oI-CuuIC};ovfcHBSSgPR|FtIac zygK1)5_#n2#eDnxo{Y_Z57PwTv{Rut&ek$OB?L0(HV17R$ABf)KO5Df6~7Uct&BDP z_Xz)Uz~k!t_7iz=+le;@g5os;x_z%^uej9SxtScKsXl*AzD%xsB^(d|;*dFP$~2-! za^WrA;z#iv_pC2T;Y&Y*$Mg2zyDRPWN@3YrjE_eitl8V8 zptE$*5-tz+Ej7la<6eyofk_Uh>6ux$rx=w2M+`r@6wAIV2UqQWfxTD3TyUd z)mGhb8*{qaK#p9kjhvfb{P^z~`#M8%-KHg3ui!3u{iX!yqa?neJXKhzYW|0w2WoFWBaV+LyoWV>Ux)N`4e~jwf@+!E%m8HYuxa!3q-hplT3~% zflAyzU5FXy?}*Jca_)apIrSf?oFX}xH^H-XvhFI>gx3PGyExnBzar>9{Kam|+ zSG4sQj7EMF8TjpLV{E-u=@cZkeS1x?uP$2MI*-g_4&f_{9Nz?!7Y=O{_ktJX&6>C` z<<`vQafHU2Mb{rd95f}8hgNkMiYmiI*%c{$D>!iF{iD<`iIGUh>=JwK=K|k=!GiBu zITbY<{H0CV_NYxz+-b^_F@S_yM*7xp=Vr$4IpUtN7 zyl6Ptv2o|ZhT{9^RN3~$%^lI-zd6BLVP%jewP3ybXNl+5v4!ipF3-R?7SDQ{wRV3= zPTc#ui2}`#ZRUS8*1rnvuZ$Ymy_iJ zCCYwi4bHsx{)gb^n=|^)N@B;}Tubkd^mmhPM#6HbLv^xUz;r5>eA8e1s5C_q`Y~Fi z_3P&~zoo3ns>-NIhp4HZrFT92VZuwBU3Hn@Di9s4jD0t@e%Ms9U!@Hp4{4#w!5#(%xC>~_+itKfECsha zW;8G**rg}^im!Z0>kWd?;`OzO?oTnHb`i3-Y{+)EckaRK7sGG9?_C}Hj$lQJ^w)oF zs>EGFY>jg)cS3w~8>S%REY`{Iheq_1Fn{`0{rEiD_m*~zELBXN{G$?aS#l69;GJ8PuD<7@pZ|2dW zT(jZ3U2npyxMIl3!6?uDRzu*uJU^hZx&KMrg^5MY=-7V*QI8@&@SzMC1(!qtk%5uWOBQwMzF`C>-8~KP7+HKDA?gG`iwrT z9Ae1{vVQDo8};{ox76mL%EtEsSJ8t3p?;kJ@-6nol#}~6)2Q;8EZOn(^F;{b%AaT6 zyft;BJ`Ng%?2InE9$71+4crH!yq+5^Sc+n#`G7JFnBnf4Z#*WE7l>Z5f#TuW?S9o? z1ZJz3YJWb?UjJ!a=)~Js`^Xc)yID!e;Zm1D-C7*F+?jZpQSd|**LT39gc21nGE%aa z(!fN-2%{W0tv<^`zcnd(9GmYyKV@bz>=73XV+U9JO$MpjR1QOe!g%WfCKf5`#ui^) zt!hBd{RViE=k&$Kcg&&)Y`xS_A&q{W%CU#W} z34-Ou1gFRjky;vDowSek<|7n&K~+`OM;P^8=>`5r_rE!VZy=r0+!FSovcF&&mu9cG z-2$C5Rr%^|pKIF5Q?-`fI6GQ0#;zIUUa7rwxeP($K|@ z)mJIUxUuS28pj%x%G&Mi?%i2SYuIr2=zcIsG^iahE&bGeYw*ndonBPawQz~^lcAYW z*}#CfeR5})Wp!RnWnERq{i+(u8~HY9eNoM!=hyEYnY-yzv}?IvS2>y#I_fWDOH#cC>*{%xXdoE_zGMd&;y zK4fOfBH1wm6Wn-S#p0T)X_d)M*P5BD+C1k039d6s`O z^ZwZ01)*zjcnon4#)|&<&ost2!oI4^eU!|x7Syi#FF)QMO1v5V)~w*kKfyJ6&Yy9( zu+N{Bw>2>u8!H+7AmOgRmw~v((>%xA^H=+g7XB*#!U*Rb(Vp47Os#)2aM0br^5(tj z+M0~aBY&n$zsgY0n8|SLUJwSL{{!vKLt97fD-&XFL1*m2 zYpnoX=XI%ILx|lfF>Ne=eS$Pj-sR^0cOz{5O>ob;QH6n)ZP(vR4b1O9*NYL1%9~bg zzfQcwg2;DVPyAS}tE*4D2y_e_br&=J?!PSWK3!&Mf4r>R3cs*0|D#p*65H%deOMu- zz#ghRgQ!*P+$aTHM=nRK_e<2Dz>R&dPaF5v*0UxrmP`$K6KNQo`hog8bKfb(xBP28 zANL@fZ26LaYHf%gy^xJi@zcGS>F6_g zJ3R2`FC#(^|9pskx$WEs>K#dy2R?e(Hrh&t{(@qgjl0fgN%rm(-C2)eV-sP!WPbvd zNH6szax%;pmW+|>mslD-mO%5@BMo3r#DvPgiN!t9r*?Y&)!Q=){bO`;?H^{i)ZAxZ zZN%u4U5{>bMnxW$L{)F(4tr0fZ!BAmClSwKcK|BE?-|}lB&q;fBI!mD6Xbyl}9<=x_YUjvavq{sxeTHR^%Y=+&iZf;Lw`BTk zcE5q1B)1|K;qHm(3it{dQbyb97I9$DXkOA-IXDlutSHZ{QjSp^(_Ocd*EDSEfd~Ke z9fJa0E4lWgeaS&GGPXsGw$#p8YMJDuU{raA#nEUd#1y3S_v-OydC%tpD5<-8{gehZQiV5Mow+L9dO&< z;yOE^((l3K0<&QsVQ9tl-hil2>~Ql_#5l)k#UQp*a>c*9t)MFVfiNn-v0(k`=6xQ# z6!VK<;WVB1Q)h|()UbIYu_QC$c2wB2a~^W&kDi&36FapX)rhbEW~bwl;-O|&+CyT| zvB+1%0BPP(jLcf%ozc&-h7R1`_2nz;;V*YvoBu%f{sbxA1?A~lMVEbU_$Npiy3J~Q zB_S;~#9T*7ts66v$w)a)k>57dwbLftYpt9VHN`>|_@ceCAye3AXNuX?oEKlOJ{tZc z*ca5_*SHs7tZ~8b(-nLD*js+(Dl1%je5{}yMuP(UvzQd|qjU{k1s)wu*JX_*wP|}0 zhmn2Kfldy7c#~KV=@}(K!vL2y?N|hiGdw1(JHd-JghJ2?|AC$Xno*g$w+~SAn8|X* zLhb-TH=UF@MIahr(B{Bs|EKEt=HzCmsLE21(%AS~^2Hug8xz4VY%E^%Y%l5ylJ%g@ z-2Jeam+CAY^W^v41KM`jrz>n8eDLtim`fqB+E!$fyzVQ8;)>$CpiY&4ka)AJOa>4V zbN+WNx;Ai`$%&ZzoneuUStzWc)SRdqb263Mj)$B=j_DygbidHxE1e&I#LOexxAE7b zpmtVBmX+D(B%O9vLu6V^$JHiH8iaJ|x$@HXV{@<}4G^d5n%YYX4g-gDRp_s|n>I7I z+L%SntlbDoi&S*ZzdG|Mt*WH3KbI2ezZT%Q!H+!`W_Fv4i|Ej7x4WGl55HXz@_+^~ zNi`So9P5U5*k69GR!{UGUMgGAW{MOK<&%CVhb6R^it?o!cqW!;1RUJ2m9)?r9NFhDB!sZTqN85T@R$6lmsaON8uCY)znkOQ-4o^u-Z9kcl9> z8_?<=D9kEnH;j0CTv>&}p^sY%HeAA1oIDK{0QGNW>3o*sEg_&TC2n95#`V4$pwLzN z`YJEU0RRWD$vk7ko4(+s>e&z#B*7vCb{v3To1NPR1U1<}u~KZQ;=|`}SQ)G?c#xGEAe-7jq7Yw+dt@h*srzeAY)Ta}L#cWS9O1&>5NP4PRt1#REqN z$q2xjXw)>oI+5uW>&9ARN@y2L^qfgL6%XUtjXRP6w1kKQc3pkEMD++(k2}2{HE9p- zJW)3uyu;sAIqb*U{sV@uYO#|W+1&evot6n(%X6@%UAfirIym{4v0q^myoIn(=^vOb zwKMd2?h?jNBMYI}5}XzmIXH*P1;oy{t@x31iwWzlEulY*624vIDgBd&KAU3{wD}Ec z8Bik)Ty<)5wz6xj-mBmF?EA^}<(^5beF9Z5S&(wv6 zjNDZrRbrjJc0e76j~32Dp`o%fLTq!qO5zhRIKbjv6J2xjPg+n2GDq+#-cs_q$2Rn5 zlzAth>7(@#HST>BN!Hk&8xs0IXyH|oaCjLkQmydT*PfOc*4ZQy{+ z&Q{fNXkG+RC?UC@$5vC_*;IhL=xpKuN3?)BOVZe7P@9%QC=Jntdo_<$$_d-1u1!jW zy_WF0#)QkLGaG~?CjnwPx{ctZ7&VITM3x=}!zNJVs6MRKTQ%{E0`Na!%3Mxz6u z>Xydt$7a-vsfJancc{)hu_t+Y>M+We#Ymm8Za~9PE;f9;b$x=c11vRLd=6g$=A$q- zghx7kg)fVN0;L;*`3{)R4ix)}5hNQkO(7WaZa$O_la<#0IS%(>gTt@T zphp;sOhC$+G;7wWSF3;TKTw)2z5ABi=14xjBpoOeiR2CT>C5M|q_7?gNqe0Qz8B4g zJd>EilKGO_D+QuK_hp87#iW;48!0i`P%zhD>6F)?{ZytBqVx5pZH)<2+OPHTl5zYw zFva|IgRB85gJoGo@%szvh$I`vdq8NVs<>>m!)k0}u+9Lz$>;W+9U2P6W)fk`zfvHh zda6L;Qb)(}nD(epiac58{=dde2fxytiTsdjN?)6`V1o-b7Yy*{^b03Xg#dH^1@qxn zJPGdv(`?cOljD5ToEd3y?O~xfT*PDwne0_!Fw{lwgmvy57%nlYr z?!rwe+n5z>A!wi{Rls3(my&SoM0C4(+Yzsm%EK?Czn3~QQX^dyukf1luXkwPF=i~b!BdU-M|W>v9z zYY66TOg`jzoe~Tcbo3z_6~jSxS~yN zH?idbFo0%{rZLIIRa`eFHIu%8^6wo)1g@fnScTH#GPgs%z$@fH^wKRloS%DKdXn-+ zVjF^0@!vTAN@^^|oDl}MzXx=p2xsNWLSOB-M&^r6&2y%{_}BFBo)#zp9Yz;G*C!i1 zOqW~{D1_0|U>>=sExC;7+fTi)2CS7`BMPCwYNh{gU$|O}C9VJgln=PSA?LZg_KOl) zgM1;JO1({+VCsXz`R?E`q<_~kb&NXv|E~>>u%LO)Zk4kkC(~e`uBKrcVpt5VRIe~= zYKrB9@w>}dCBcR-(JMDvCjkqGVixOzpmyX?CZ!MtUN)XPYHNub_tk`X<*d@l&Y?N+ zfr>9_+Bqsknj*;ie0C{2K6EkB5`{i_3VLKGZ#rNUSk%%MT|&P0FefJrwW=>qwi1z( zv4O-FVe6JnBC5)&V^&hDH4GnJsp$>KV%IGOA6caTK?)Bhdz5i^SL-x94>+>z-VHKk z@A^O&YVA#EfW=?dh>U-NVs&%mZz^s>crsGcg z_g>GlAN?Bf?~boYznl(u?1Oc`+3k5DO1EdUT)38&k^OJ!zq=5YvmNr!sP&9wcKTfY_=lh}^jrK%Ab9kg3OHPEM^-u=aybmvL1Pwf zn@P%HgOY#~2aH1jA5cd&cbLrz?$d=V$SF;I(h7vExT3iQ zKg@Uv4Fv|T+dBDtRyxhhSc;{Id--fAj8qtHUDFJ4{_qxq@rsI77-LFKzC|U?M(as2 zIjdSU2M-_0`A#nJHj(@uD!#J3rmt^3?o;Tj@~%l^(XqKnkFAeyiuIv3T5h^r^@{c6 z#(MP(p^BpxW8*)* z84y>L1ghO&^!x{!&a2*&o-k*x6K1YoXg&+;_?WC)h#Xe6g`0D6p#%$j4LAN3^Bunj zU5kI0PHa!NVzY!Cus9?Z6G0R*#Zo&m4_ikbnLV9O(@{barxfI@Al&A;ttVR2TyZ`r zgSyj;Op?52GsruB)i#n9uUNfc_u~{QDLoN%2Nl`&`@MWnKlB{b76dzLnL47$YqBZ= ze%T?`y+AK|Wr=So3F;;xOd0<8{MP;O{8~Bh1IEqpx1IJ$1qG1hlaP`4PD!<*nQoMo z=kpVdIbqSfgg%08w1)igZO!eMlJ{u8d&M&E0Fm{}l}{;}wNDIGypLDS2lx{q&gO>k zX3+f)Xf8RWtg1}6L!W*2!x!7^J%^XZ6QmS=}?Lgo%<+e;&+fl(_XgGTNJBu9g_vw2s( zg}7FDrMR(%49Xb!fU^ks_;xxs#|M^WHVd;RrtL`#<>dfEGFhyTdIAL$cCp>{7FU1_8eq{(*m1--k%)~S)_x$t?lA2S{Itwn z#xh?&Y6q^CxROfZozoCnPo@8FH-VLGiQp6gYiHh_C`(l#v>DN{ksYC5hpZYl|W5d%A27`hZ4+ zV~6ej>w>*(pfY?Wyh?oif`5Nz`DRr4DYuP1f2bb1zV2n&oe7A(Gmf(M;Nw#C{cIn3 z+`C>O^yvN+;AmE(M=zNGQ+Z~b7un8)y+|8-ON(BwnUsLG;K2izsWU zg84Y$iplIbx0nOz;^G0uFZ9$r@@G`1nYk9Q=}-BPE4A~Lu|_fqrha9VstUUb+HNIe zYtS*H61*K_$pQ?D(TZ;3Z^!^uHUy9h-&_?(uJW=G{xI^-C%t8{WP^Z$QQ}#qXT#;3 zNd1jfo~_ACGz!TWBT?0Tp!5w1kUCGjWW-(v?x2j?=;xodp+B%0z$o3E-QSoQSr%0u z~+h%6!KAqE3tg)ply-$!& zA&MRePNK(tqtyO{ML;g!XtDwUKDnT<5a-eQ@l|pgRtwvF8;}Odw$~EA8{sVI_`>+w zI*HYK1luXH8A!a-a=+Reu63AuDy(d9Z20f*rn(u;R?NrP@v{FwUsRq4O;**e=S|YL zo-W&RD=u(}+8(*@*pG_}u~LPW*33+S0^~GP?L63DGv`y{g-tWsgR>QN_KOASEBvZj zR%G~b?K8BubCvTSa{Kg3$y$MdMl%)g%Eit7g0Ri;HNN2zuN9(5eE@rs)aoTKu-ay% zQ&DqkF&ym-u&V}ThnA+jQty!BmIOOfZZPh z55?K9s{ylQV1JJDdzic>oAP9V?T&V9(_6u(PNJ1X2TK&&vcYK+`M)G~h5o1*AC6(| zrQ&0B7H)s@%_#>(ZwSI;NSu_ED4M!MCkLtsx^^hGXq{({Dza0j{Ae&)GG- ziv!kbf`V1mq53el-_ccnSGk=6B(fOT5(JOgADw<>$+s1u5MA74eWG{jfzU{4o%T0% zX`sQs30Lk{+j=%DSRTCLda~_M$+ta+Dtc{aX9#7k0}exRNBxTZ49K<{?$4cu#d8|< zhb=O=-_>yJ#a=>*7t{HKWT-O06XE=Hb$atG;CAi!HRLCBE9$MeSGFX~zH>mT0%(a70ab6aNl-ZZqeq;F zK=#)7#g9PkwQ+2le6cP&^r=+7W#~y}FIIV0cLnxo$VI0+1j5YYT)w5-nr3OdP*HpWD3BQ2p|A$dH?R zH_{~I=7*?bO5gv5-13ZgQJIkz6~(NhI^o@FwEqYmGIPj|49<-E!XO_{uiW&Ts`x5> zC;?u2i84f-4>Qhk(+b-RwbqC(vHnZqF0f5lVx9vS*a$~P_(nJs-kx1Te)>?T@<-g+ za_Ydny8e=xzQ1b9nO1(-+oajaef70VnWef%h<%wE{@KtcZ%7TRYl7KqFQU&0Qj`Hb zDz5fI&W+wVQ)EY!6EfVeyZ=Y;*^NVK_F6B%uFC)gcgt1aN^IA8+kpe7yO+L8YtoozX6A3*yuFeP?#LdOfFk z%DNe=W3!Y=N^&Js_nT=g{OM;-pTv{B^=*r`Cc|*|>F&^v|J><|Fbz@#mIEW7urMRO zfgc^ZUuj>E+H?NaQ3j6fVB9;m4EGHmnZ{&~c$QS&@Qds56<)mdSm}VXdV0h$uZ048 zsH@5Pzk&6E2W$LTGt|M%QOEy4$=1gP#?OlkJQc58mF%8iGViNCLNiSJwwrtlUdeU$Rw*ys^%>5KJ(mYbAdwI?@x@^-rHmtv_$X zPaF^+V)=XzbBqeaNMWV_fnvW5rx`bC=UQTgbwYhsJZ=wx%}o-kv`{XE>$RJAO1`L& zLUWQBM30bNTa@d{kU)b>ztLC--n?J_F9YSNCysFS3@l|4>EeP8;<(LJ6R11AE;pRoUwLr*%jBb*i8kz^Mux(0|^3z6dBBgfLL_ zm}l+Mze6u*hX&q~0#KQc?`D%lahVhgd~Pr@-^tRCDSli@TSO*QEDu7m7>yyZt8)R% zYO4CGKg?0V6ZpyaI8G)%{OvlOk~ag&6+C>1WSWm*53#A zuADFm4k`eQ=tJtK=%L3$T0j4g$G$^I)Tp9c@ZW19m-U#XtjiTojGm#&90fbsTl)^) zjU^^qA4&Wr3^b*Cym$du4_qNA0|El`XTBEB@K0Em9BN<6cJwDxWo%4b=OR)auSBIjpQAl)bk01Ir@N zS<4!2B09^u+JCsw^#0oA>c$wQ_W4oI&d6Sn=FEzOVgAxvb>eps&1GxEcU2V9J)2op z$ILiEjk;baCJaQpZc*n>%sOW097LuKg;jO3MxPJZx9N?!`^T>FX%V8}!Kg{^FuB^` zZ8u4J`(o+?Cqz?W@J=;i7OqHmMzYv*^Xrz-VF8O$3We!*W6EU=>;c8+jdJVh6B6;l z3-a93dR8;@aDW!lk;)8w_^{IaFoAXRYh`uz>Z3P?4xS!1U~bahA7!d(DxJKHrcT%u z{A)9i7>v)+M*d{Zk7_ffI_D@ser*4)OzC@D(|%L*@$>=kyp2K%~Kc$UFm9 zw*zuML?_Cu0llx5hh*EPGm?OmC(yPjak!+sn{PE|7GlwdBXGM_+jEIUpxAO9LNVNBF zohclCIA`gihHe!Sfx+}3DsyC72ci-hkBvFTP6(!N%{H1;`&RdzKGJ;c39Z#-(q6br zOX2r;-*0<#VPR|S{zwPyuJLouA!rq#&qCIs@ocbf{e0H3waUHbl8gLq8&R-^CLTg*Oc&EG=IjepY|gCNvPK{>5=;MOZ8MFO&BwUJB0g;XM}N&H8;l z+BMDA-MOSXW;i2Of5@k^W{>S7ORci}(9fZ^+k0A6|I$N5{GDp_;PQ@;GKIe{Ke2PU zo)NEU*WBr?UgitPgg>|xfu<9oA8u`xI)*azBK7eXX>Uih@tc? z2{ek1>TZjDW^|97)n+}c3ox4 z`rRcL47nNB6E=-jb{`oJQw&1>1mm~qe+8wI;wpA)jPGl1GS|Dy#_j7tMX)J{^L2dW zl66Ua;!v^g#Qf>mEd(fKu3nOR~7G6rzO7)QYdF`3A z3OEEgR-}ku*Af#fgn$<|io3E%E*&`Y=+2OfV==?Y)i90eq!!HZq$%kC7K*H?@Jo^1 z@Q1V??aqJXlsdz$lyD)+7LgK@eQ4;iy_Is9t+_aY&w8FV%qN__^St--+xCOszE0%fCv>!|^nZ0haH5Q$qU$|ee>#S$RjVf{hzlh$b z$OYPtd76B_3`6bx7i4FMN1Mp(Ht46TuMEe>dix4!90sBP>(Vjt=!jwP1@TySGJcdW z3RHngzM5R7rlr_-HW~_rsl94Dp{`O7*C+8d?k2EE4f0y1+E0JS%6GC$vEq$9F>{3> z+a^61*vU&Yqj{`~Rc%!$&VGuDOS;5DZJ9mL*{C{njg!5-=((hib#|I)g@Alo0oyD?r8XDi?q+? zWKPeG;G_L=r}o~%Dc_n3&eXdsr&sp{Q9j=bfC!&{Z-fLQ3*w$8YEl8MW+Kq^9vliok?7I!YWxkhf$Qr-pAy`Mr4ck=|YH zrWM*HPL(~k9cEpbo%RWAJe~mr0vq!Qu}h(8+u6DhGYLjoC^21%{I#m3Hs7eX{syg@ zV%akOrsOoDV%&YsOK;zlQ`QOc?Ywhb?5D3@fe(j0x;84oP=BG11J0uWW?*|XY{kJP zVA$TDRaRbG*^3>n{HlKBswkuIy?R<873JLdvE9h^?5h34`jVhjHV}lhBTnttg_#N( zkfxERM4lMiKG^fh->t}|Vr2N@`O>Tp&HDS@a=-2UUU4>LWMooql`c`^w2fK{{sT1~ zOx29Dc@i54N318acS^NKO74CwOKLIFepY+h?Lx)xHxFn4aOlV;wUK2v&!T~FMMyvlg!5}XlM9BbhgpguBO5j5mAH+Zk&YlPs%Ue`5sbwpWgGCR3nbGO1TAS832% zffTFUa71@W%poGK&?*mx;#86J8sQc>-eUU^{SBX08kHm7Q4I6EDx=8ih1-B*uec$I zUt9I|%vk7l;k-G};9IqdS}mA^!8`<=60=3278gqO`VYi;CxIfD*TtH)=G(8OJ?6g9GLqeHcUMkkj#nw{E$9!>>Mqv=IUc}@!w8y5>m*1uSyV40w z)~0%4-e@6lz076CLL(LHxRG(NiX1@Es?Q1JQLa-WOXc5z*gMRHY=Kq6Pl7bL$rvBq zDf6UWLSvN_m0guAy(4H3S9(s$HG#d6*&y?&aA=5vq88jaUOOKWw|t_@=`=5bG!g36 z8Nm3b@H58ITA~kaNui+S7hkTkD6?t#*iwaJmhdwzKTD!!^}BJ zYth{GFc`Iy)m4W`MN|XS$@R09^>qu2v-b?w6JrEn$WNDCbSU0 zc$Ip`KW^U3(*Jned=>%LMz)*j-DZWH)7R8x{Y=w{YkTsC2!sQQxgpQWKvXz`6wBY( z4kVGAQa*4=PM_=3mgPJ3zmAWC)e>8M!Bm(r?P{8dv%X#!Xgr)-r&nqlGVD#LX_kko z1*mS@qD=hTCa7jhBfu55x5DQqm2Q{U=rQZDvEtKu959D`gyQvrMy8X?G&Z}ufio`los zfgI?52-oNpbQh zpvGU}(EvobunnY^-potGYC9t(brC#=^WnPC7zr{*D3)h3&eU|Hji^8uElN1EMGbF9 z2~yFHAKy$3zC?zeI%S*y%$j+)oE7HK+b4kAle__n;PaXQggW^nZMrX(O+ z?D(gqCF2UU>gCqX4P~1)jAHwX1ILnHCa9$o_MYonXtu02rx(#L$r>@ksB&P^xfysz8RF-aWzMqEuSNxfw8fLCis)+UFa;8 zUQx7p-{3&;A;v`FbH~N7P5xBeLhxC^Zc^}*Z2#rKZZ8qb-Bv7i4_idgsT=HpbotaE z#Y(NvSz8QYbOV@UM0;WBlUN{2tF(dD+4wfUWMR+~LC&BIKqIZ*d93NIYRItcrjB`) z%lSDture_219q1=6$sJI^RpQUBH(B>P~})@I|9u$cA)U}B7Kq~L>lzEhZ5^~ID3Xs zl9vbkaQno5_ddApkD_`4$VC|WhXZiv;W4PpRmoBFRZVfa6bL}dzDfuMR7QxWLPjtT zkS3Go#OMjTWeHaWEcTVG!8iq)@-^eg^))V^MLNBeCMgetwpFZd1K z11wZ$2mE$1cnReLO1hXA16GBGF4XAjRs##sH({XS_Opb9j$@}T&e`h&|H+n@*W@PP zDs6{MV?76>{JUpYS)5?nf&OdI-<`-a#j~aTOs5-Se&Ff;S2l_HyX9zl;oO(@ip(t^ zHFcB-BwMp&c^##2Jq(Co?Ttop-YaH@U)Ht=v(b}Fb2igszxUoY^_8aU*OPNnGUrf4 zx8nbaq=3?Mip)1_6c@%LOwO_>J%Fiub|HNc)96OPl*}!Rd8!RC8~DElqqudtiNk5{ zw#tJ5%~xf-c@z7K?o7uvlfJp;hYGf%^-9YM7opCk@+(RowUf4}xitGrz(-kNlrP>anuK)tQ2xweUO~br#Vc7)DS{3TjiWs zIn8+_M#^HCoQBabW7rsG-{1ZD{kK1O+`IR<-}imLU)Oa#uiZxf>O%fmkJ&>t150v;B5e7P=L2s`HcsNH!-$PLN69apyT7D>}_9{rqfVa8~cyu|ZJRy@VSS zJp)mO(qT!4kRAX(=`tD&(%FpW`>N+Q(OA9QK(Co3f7&HSmYmDBZ+X)a?y%?sfY8-S zS@ta>zy*1?K}T$7?9S`P9oydK*;RWLQ2|NuKMH+PkCAZkD%c8n668T)T2$8O?}bi6sx_QL9^if%_GMYie`%TU_rqM!A*1Zmoxf3 z2CW9xWmq={>+&hA6V6ughkA^wQh$|GztZGxAgR2p`XNw}q(1I`F|8T`i1y%e5eR`R#eGtx!^FX}>|7VymTB1(Y z=oxdU#7xq%*)}lUYz;d&Ppon^RmYbT0jk7-;y8ui!ZJ1XVQ%P*&ljUZ4v(#`j@V&%DyazK3+iT2i9l z93ry2T{9#aKoX?LLh1BFPEU0*^DG*NDfuaHNWV=Ud4wX}0SpVNLMj<<7;Nmf6-z$t zrm}zBc3a%HmAh7m)mUm?jNT#j%hY)|!nfmH&2ymb1$Mp$U?3_fy0=;K@$;~^dK~vH zoiu3_y24AhzSWGEMN^3dZt*y`|A_2k9sa*8iii6RTpc%8(1QcNT(;q*K%pClkA#Im z@JN}h1PkeoHrTzbNWSqTpnqH@R;W#=K9=0w#p>^4EpWl95UXFmTD6C~Y2k5p``Up< zmcG>(Uu|rhf53h#C;2~529vN^wv{!Kv>SP#PEYEM{`;Y&8C#oTUDZ6-(3otRxAOPa zT#9;TyYg_YdBUl40gs#JOq5M9nj_rnY)we$$@X7kn5%wg%S{gBpu4**+0zeCcShNI z%D(X-#|IUM&m9@uW<=T%D?H@71gdmQ_NGHvJaSj{83fn{z{ zNB-M(!6cQ+yEDfU_WuWZV`6)lgXD{~f* zMbYQ~1hSJWeDo{58wP|=c*D9~R@`_P>2!L}&zy;gJ34jq(VqKo1jk}N-RyA_miq`i zy9RwZb7>6chyGJIJJgPha_E$)EBip9sTlTs8)4_n!@omMJ$35Y>nTcCAMOxi$B#hj zU>|=;M>GqJKa9FxhSs`I%v1L+ZJ4G<(0_ewtY-e+sr_kobbc=7+fb5yPE}e(^QVyo z2cOgaS9=Dg9i|QXuhhhQ#Sg+6W|{1(`Sj3zBVD>K!)wkWRV`l9M|3Zjn)tcRj#8xb z4W-Wh@VLaqg=Kj|;6z2O8X+ zTO+H1VMWf?xYpr@IL-Twc|ZYB_#K_U)+*L_M*P<9sj8@bR=b26+#H;fMNP~rUJA3n zA;78xUV#pPebT#l3GM*;t3r3+AM!kPm9nAP3m1v!k2*6jN9v~EpW7~LhGZa~ki=x>*LerAi^uNx{R*5gjOjI#sr$D*~76ZDcR&O1YNcrGB!z)yw$j|Tx2 zF}@o6Xv3@q?LD9QO6D}je?#|sM8WMRDpv+vHg?h)z#=}4FqgosGPHNhCrIE^ITgi3 zId7LAE@L8kwwX$;5jc9s*2c_kvQ!jl4xU!Oej!$O1O9?@m~!&6sVaINe$-dDLuQPAT;r=Lyu6>kZqh2` zN^SGj=QYYnkna$eB~i7}MD<03wJt zE3B_JGz`Zpc#D2@UXB+X3sm?M=novk03tZ;R@+s*T)+?9kG%n(jmnU^pU26PM@fB; z5!aV9%q>n#Rj&H(&9VWfDSsTJoFk&fJ!Zt<+b&@%ie>`Cr0r=2_IaBt@acPsXWdY| z40q@^=h6oH1&8@EH7)%*N!V+11@w}Ojszme+oX(`eX`4y%MS|26s<(g`o6O?`*tsvc?V!Rx!UD_ zhv7J9Qn|+{)zG*W+O{(z97(tonQ8)DtZ1R-U6nppC9{p9yrSb_(ho!#y*$?{&IRv? ztybBu#A;&zH4Za)n^IT@j(V=n7j?gS8 z<9d1KoP^}*K0;+@7v@ceA$JVW6^#%1-0UuB8U>Q`<}WY2Yg3pDtBErcHVJb5<;7S4a<{X;$1@AinhVteH` zosddfEBcMoZ>9?ou0`#FnHLA6@?{{(eYG4L&x}u{SLYbaU8MK7A9mNQR*J3#`zwxA zg1()s@%D+c;yuozC(#9(Rg@BbzYFu?r(`HT2Ogn@d{bQHUZxAh$Q*3Q0kBMm71>6W zQ>B=foC_4(k$(oyt+?6e&d2HV+&WnN;q7pJvwf3`?R;A&x{pgjoGE{ z2bGNVUSpY!@Y;_JKVf#9K={AT2Dbm>u|nSboW{lu0OB=eAkkFZ8 zIM?dM@8O<#H<+B1pspi)p#|xM)8j-F#yVQg{2kS<`LQwf0-N*=%5Qj@qV@tOqW#wJ(k$Q(Yzbd0 zou}Kfq$YZly+r-p{kq>1Q#{0%GwjddF4YO-}H(BxRir>My9U)Zi~CotZ7)I?RL5?J(U3nnH1yPM)m zgLAKX^iR&DRy+GDlgPg9b$Nq7;;#3{unaZPo>LAvkD`(k-+Wr!O}-ZH{ln7y!6#ku zkz!C)#c1(8tK3`Dr680BRb4GmEPi#Aq0~dJ2Xo|Q4#zr#GX}nqX7n~7NyZ}VD!eVnoXET* z^n0b{U_E6$kaJ?L9qcx$C8aa7bH9a1505k6TsxsSKXe3BVN_i-v@gj9AO&ghr<_-0 z#0yq@TVJt^Pj-y`s~%MVY^Ts3*v*<)(>EEGCBCI^y(1&D(yeGVn`Ld9M-u0ut76=v z)cqU2;6`E2S+Q*ocFx9;4WNg7`sUpBR|algo<)-g2q&M4y-sQ%B=2>6tu#2~)v;lO zO_|#`QhceafM$=ZtzPSBj4?eBi#yV-$x(5{JQ<%{lRmOQT>;tK!teqRJ32cQ%9j%Pn*dv-vME3z8Bx- zsJdxLd!?*vBX(jUt8<=f-~1<>r(Jy}+~d;vsmO2%Km>bvpFUR5nmNOVk?Lm}lM~A0 zf(PTaxY6@C2vjZqBez{S-U?{%h)!b}X~bkMMDwxcOJ{h*7jMb#W)x=xnJUPCMYaFi zC4jztItL$2Lx+-fZBHXZNjNtUPzxH3hr&)GA5{MdTN*3y_97Nf%x7G`4lz+*{_T|+ z00UU(XD+M=K%oKSMzEmJr0FPvU!o@4&qw|Klj1iR^eihzRNI^M`s+rd2pr0`X*3xA&*O29!Pl|Pl6 zb#Wdnl47iWLEZM82MAD#u%w2>qT$0jpSz3Ss1MwsMX@rDACB5$Z2H4rmfG7aWAC*t z(HG5i&BOds?$=j}U+bK$6nOmr6-xXae9IJin;RSNvPJuyVbogWZlQZ|+9Zi^m(N^y zZ&9i>>!SEklS{pKnKz;mB|^j>rw-J;HkA~4q{r{Efzl7_#Mr2g`C7E+VMlfH3dp~F zN5jCfrMB93W6LG;MeTk$YYoE_<)t-+Bp?q^!K4ts@-cUZZkh#<)YYmo3wXwgHDsC&RAg&;DkGQ)Rns+KhDC%*t(Kr=*Z)%OR z_ozU3FS+KOpI37L1PECjvw}?9 z{|&rz!HOQAoPP6e1JQrx?_!2}BdF_$WeMopKSI`L)SENxc$NPQ5(lEZ?lzCKSp@_* zb6o=LujU)OsHdd*m>X&C6!O=_{*1`Vu-)cT9v}%J-532*)LVZfYIbI5%M^Z8-tif z=o-3zm7@Ui+&%J#UkXN+bQ;{@TRv&~qc{e)7L*7Xyz(g~TMBQ9mQDEhFM{Z9Vz)jkDIo zT!d zY~sP`Jv|09%DsCL>8{vBVHb)S`kz;f-!2o%PM4H?AX;fN>f6?o$SV9?_UZb>DRTr_Fi+7 zQtrQ2WV$c&XMY>Y*y$WNJc2n~{=)c@+oTq(`~||3USCn}0x4m8UNMz#c(;!&K)lpG z>9|vm^J-N8Q%=f z@#Vv*O2HDYT5Q8klD3VVf`}EOaJw!&CtNDOSxPG~ zVk{GbN$e$J5MfspA0RFsR6oE)N`zYE9k;g7tsz)zV<2^Jd6DiIjFA8oPXwnZzG=rv zzXKK#db8xerNk*<#AZHpVSp&R0Nl8#I;Q&l+5-x$uANX1IEP!Ji>+tiHjds`;VK?4Bo#-w0~ z8Acgbd0Qw7mqX4TUSyWR=n3A^9O4GU1=ScrcX)Ov+gYG4N#7 zIBpUV6JNYH>;YpE;9Q(k-Coj^&kCW>*K==uYimsvP5@_8EzP4S8+#dG$VMrU_5o8j z*Ozar9l)K}i6-1OFDd;{z;Huj4+A+xAbPmW4qr|hi~}lK+AkT#3D{79@4je7b8QJ< zZ#aORbZj8m?VUg(c+=nWcFFA>g29kplHn!HJ}%JdNzi)SxG~`GLPgtvRpZfCCYF-h zJCutQ&VD>dZPISBYB{jmVI-pM-?4mOxVG4i_l~pmQ-dkyHfQfO%&Ws&6ZJoyg<#-r zdsLP~m8Bg-19FzzI0p{swP}(ChRn!G|9ae~70BW)9mCo?Vk*AiwTwcc+CmAHv>Z$1 zvqWQtkpV;4sP)n7BkHTx%~G&^mQ*MiNWQHJSIJzk3DTF$$*{OBjqiy2q7Fn0T+MZj z7$yX_rarxkl=UzHo^ZaU_ZxXKy&6FfIgdmW(Bs}H>XueaV({;;)Rf&cg?);6UvE?& zlaHr59j~naYziLJ%A<~ubf0>rLyvQvu5TnUm&>ZT*W4<@BS~guRo2xwt=yecNDr@s zKLV1W{TG@Hz8nJ7=Ph#zB3w@rqj&L4a1u7c_jft#rCb^S%hHya zr8EL$kqe8DtDxh|Ff{7k5|~B`r0tP_vRexGR54&`E>hl4JWSSOE)z@#&Gk7Y5P0VX zjfi*zH!cGR?!(}D1cjUAbdQs_g>lpD;%p!seq7vRZsVzh*hm_Rwfq>Di0d(kj@5N@ zC4kRz%rJN2!dO^V%#wi$@-#v)#b{#{CKDeLyj)?j2E$>)G?bT=NFD~Sk+GohAawu<%kP;p?H z%C6bWk>S})i~u5xHM@;}ykhzOU+H2r9_gON>SXp@`kT*zQ32g)k6Z7aeFThNT!9P! zDB##*>7TeA>jtS^aO{4cu?)u$p}twNF->ct=BIW$e3M*YeIKUq?@&OGcfE(46(j}u zP|*UJ@AdZ1A3Qy1)55o~E$3(~{vw5Wp|``2y!-%{H^#{`V=m#zLosx|Tx2g?{sj~s zPa#Y0hb@J&Firh(s6z$Lm4kcaPmz<=^!DxA#_}J3H+;n>aqU(o!Kx1$mVKvn%m3XB zdA~1ADu)tS%fAfDLeX2RKqeHh*c_=jq6g|U(qkD7!VdI>oq}a62)9q~xhH_QNGi&x z=SN<@BW`ej^pRy<3xZcyv%{F@GGN(4F=wI(HAY*6X1XOZ1hf|iFzA=fLo?d(_X*Gq zjzzpTj=H?Q4!8z|tj*dNsyimYkb(HUFZchu*Kpx`Y)Ej4(>;HRVr2gaJ{p4}{wQ`}A?iPQxgxaWCEo=Kbjucpz&K7O`TZ@$iwC zILBPz=V9}6tu>|;{*34ao)cdDISD!#h2OKs>@U-|(pw=s)T)S!sDtZAqWP*_Un+<5 z$(zU}0JmHB(b_1W*(oWh(Avh!f88UO9>ttquZ7Bo$NG%j^|?Mhu^yJwKxrK#)a1wC zFp~k=W#kSIUN?&0&|^**bzW#G0{y!n=#RI3;6dfPP%FUiFV1roe>?l@KT-ULqVzgv z8Ap|23kco>&DZMLzD`Hg6HNw9RxOu|{bngm%S!?h6@SN;X=M`u_0~17s;fJeUFISq z+gUzz@5r^9D&I!ZPY-nuWW@fjDbZQP2GGBKBB^tMHIBs^=^&7TI}&^Xq0(YJnVng^ zL0`HOKz%$wyq>atrrT&xb4%upd&hJ=KeL}dz4VzJlP{@PpBJ%_U|{b*?Kr)X*W%W% z;t#jmq19OdNz80(PtSpcVWNXqHR|)rqZ*w-??dzh@IP*3$3^q(EcZs*v)Vh%b=)&T zX?^1VY6RzWc7Zy(7V}QTM;@T&m$O*{@+GA z{l)zR4HJQ&eo0_~3|c&DUha~p65aluY{$bmD#x4gmJb9RkvYiI8|wVpsgZa2H4OMs zSK}G83qrGD^35(&HPfty9DCXkjAukP#G35>DOX8rrqTP)TK3{!2;4x|O9`zX`vB21 zuXNqw^!ETr@}4P|5@&N}ez$Y)fxViK>BjefKG1+A>iF3bl!5a++E3ub5oi?2+~`;b1mA>)@nJrVaT&Bi-J8fe2e+$?#r{ zxc~8}7VY-(+&wBK&_pBn34x?S`{}4RCsiltJ3u9mWBazBP>^}>l#C6kSmrGOYT~;N zW-F9;sj(daHbU`6M}zlvrT|A)G+rJ(=rT!W4@S#L3k~USbF0k0 zn(J~+`Cy6Ocf$i3&2!7Ylx_6%AFy10mwJ2}q}dfOwD05+TZk(lFXgDIFr^WP56QvE zqWU+??R$aHdgO$IlhewM(f(iMRZG8Yo8YDeDrm=$5sbghGzCanNcV*6aV=YfxrtC0ZmH>4?#M<`;0AWo;VICU>MCmgECBn)OH9y2-ck=p`y8W+Bqc{8*6Dn)`y zB5zXnA}=>+wV(MPkDcG7`I%`;;mE5>hbZgUvbJv1(9P$+x_y2iHA)_jf?9v&r5@qN zW}<>$m`V*#ohb~`Fzl8M2P=XuJ2(VP1T@5{`9>0dkRt7yRV^a}eN|Z4Wz1}*PW_km z4p4o4!JH*eOU33h1wHSFpRITvg*=SxjbY|>2#v@c-wBysoV_2nNGVb#2Fg;$WuwfCleZf_j8#0>IK3 zL(eM=Nb>ZWupk$0moR)G9b&Ej(wpWcy6h7 zJPI{D5eK%|u+OTb?Jd^csTfC}^c^cmu4oxE1Ydcl-Lu2$>pY#;w+bLtG6bmTk?qzjkSTOx4re z)%AeEX_6a4=USO)ZMD@8?}krp;fpOk)7S1 zkRC6(;;)tEXg%+L>BDdB;tOvl0#CAQd)8x>=B*~n6cAw>l_ zJMwkc_AXQKG<8y=OU1hr?H+rf}=X}%8Oxlcw`#MW#SG}6nIFWvNYtI&%)?t`# zr`93rnrJaNhPq5#;4A+pig(pU5QRjUMb6RgmQ7JXWh4I%H&$+9tM`}Mr3#0+@!{{f zFC2gHh06lrycMl}w@oZA){TagtPJqHzY6?gNup0mfq7=H+r!X$+C zc^v2*WW@%~0f1E~ui@zp*>4VTe@1zR^2H6WRMlgGgpcfe2(jUpk^IHyV%NJXqQ$Z@ zSq@n)|BQQF1Dk29SU}imz(1dfQo^H8)~s<9<_`qy8Mrj2t5clxzBRBwFy6#vr?DJ( z05+>X*sIc;ly4syw0h;%m2A!QKbW78@tfNZHt?(W_rWvqgVHKZ`j}+n3mi8##+`Bh z`!BfYhj0u>aIEdtj4a#xO7lY2!Mk}Q%{!xOZAR7J_dlCoI5_Y73Jku}^0hf%(yR9K zw3Y2Es*i1=cM~{#T8AFwsB$xKW`=o|x zn|1p!?PG*@+H0j1HYDB9X7|_C%FoTt&x0;MoK3gCIwZCY-!2;qP=-Ird^r)`d_~IA z@O&*r!4GIM7MAbg`{4LESTZTWf%lc767dp^TWY3F>})eMJ5EDfl@%tENi*EJ&W!xk-n#C!WeSp?JmuBbf9I7`jpr_sYmV zFr5#9RZA_X(vLo48PdcDL+ds5?N)zA7Q_SnJQ7z_|J!-swo2mM);^$(JA^p}$$d0mQ*G?gvtvG{|^ufyTGc9Xw z%$20#Ti)Ci<6Do`h;p01+q~2fBgv!7qX~U$u8GWmJhI`TO3=rJILPf^=6&7DA<=v} z$OUO!Mx1)0FB6IFSwEu@tKaLlaxAb9h+UpB(WUD3YarKP-djFOUE{NuN5 z@LWb(n`f8)=T<>2wWC5zj$Vd8qdnou=# zFyz#R{T0w>z`oq`*X}*i`$s!udgxVMaIw`jt%{!d!t|>>I%`B2+OB&_sk==f8R%^c zL0)lAMHW_kVUp`Vldd7E913$`!5&(SNxfABxtwc z26gGd`>yfB@J7J-qa^$iS5NM7h0d41sxJ}}KKV3K7Z#Y>ruQ)_#w6u_*aSQ^R%uQ} z_9mkvO=OYM@V6@XahYjMm8-_IPo!9=S-@{#@O4+dbhN!E<%7S-T49X8QToA~KDos0 z-pwnGZT0W;4Rv+4toc99C0Qsb_JJ^qFA3X6*vkNMV|WzquJ&B|%*GLH^>h^Xq?px) z)zV%%DWy%3L2zqH`5%uZyNKfNbQFcZ$!JWPooovC54G(;i7z%0*R^6~gR89ly}&He zQ0Oa9XWqh~WEf%M@in|gC-Kcru_LiG4I%rp`n=r(g|e;hcUItfQ3u`i*T+`{L}RW6 zr(0=s&Ib#fwoSJ39w}D1r-Zc?3bt>^mA~Lv0*{bk_~$1!Ku!S9QaNM38J~WYmZ-X3 zoRs0?QatFIgINc=eSTX1$Af-QB0cP#+U4K|xtC#CmX3Vr9`K93H|MF}aWD2*bxO`O z@+nSewR4;MrD_&b#0Sd&ZAaDErNH=5IwY0@U_t5za*2g-uS~#OTIcmm(Tf-_9V@~1 zpChD>p)R%AHMZl14dsg`mv@{>T6yk8SNHn|SNRq^JG$dQB9)21vHXjs25xsApx3xU z>_L1FOr@k6(3KPW=Vgx0lz9F-w7&k@#|fRZ_Tu5#G3G{yTG-tmAJgzO3ZO8e>?NN?Q$#~+1%k!K^@s-xxq8214LanM?k%L8{rx#+URX{Qo; z{L^p6ZiBYgPnnUmcWUyDZxd{zfWL~w1M#Y-{L-n~=f4_03dNTPSV+I^g{u#j;L8kV z!>AmiuT0FSzADz@ucdcfYiu>VW#7>oQ^|gYr;s_|o0ffsug#6riAb&_+<2rUoTaxT zjsK5ePMf_eV53ea3CNW5Nu>r_9d|bJYr!-d>C&pPo4>)gw-uOstaZ|eyFh?GOz;sf zvuxRT89?qX3r61#CP+cBrWy5n$NsFx;jI1s$1{h!oTx8}?%W{Z*wSQ|A=7?f(#*@2 z*_yg{0DqkVIvfteSIuZxyz%)8#_K5oo?Jh@nq6BPxohA<>SDj@Vm1w= zs*8(X{oE~xQd6mt_x<;=Xpw|Y%?CFXV(x@xQ-9g~3z@_an7fpQhW>0g<+Y_WUMgBD z#!|RtZzOj1$-Eq2R?fR~d`TDeRCynDqvvaCZZBpC+}=nCIz~kxvIs6GOHOt!l>NTI zm;L=&Rz`Qy$k`lHpx)Ah^LtU2pi0wetpZZP z4W99PA-~iVLx+uj^!`2E)0V#9b1z9SmH)c! z5IF-;VtMp!vSN{?e#MQiviPGTL$j7Lg;#23u(~6+k+mTX1r}h zKL)RuTyFe39}0{ml&@EukgI(p^$FZ0Chd`$p!Y=2B({aSO|dPiQMHV?$e(^9I_Q1p zu`}60M?!2g@bb-C`va3jR*|TP{{DZ`Y}`}ScVrP~J3+f?dJ(*nInQpVy6N%k32tO? zB*TrT_Z>X1UUh73UT$n`sJC}^^kI=)GgaFo?dpp@M3%!-9p#q_AY;GE%+rVhnRC)b z`up43<5A$nv7GG4htoR?p+`)2Ry3FCor^gLNlCSzaecJiq$RNAlNQWTG`r}M)X5?e zZ4t&T!b>fW*jud)xHhx`4o_FE{qL;}*xU-aL<+m~8RHLE!@-^YJ)TDum(lGo1eRB@ixaO<&qh>5`*UEQGEPo%mx0(Q;|VQ zntJl6ricVpXuyF7>bwZx4%)AHBNaANT1ebut5abrcNTLyjJqS<`7-DtlNgv=NLoC=jBzfN)QQ7>0OUNHh3Ker;ihCU6dTL8VXXTk3Fjo}VCuk1bA4V@*B9 z9AJ9?BXf(zMY?mgT_n#=egM{PJQ_V#H;KuIvZdhXjDc5>#sN;ldg=2WstlDQOmlXV z9`f3dZZ2KA>*nZ9sC2~#s+L!}$Tt?1Iu#AitQ4eo*M7Fw_b&;Znbxrue;=0S_9Xqn zsV{bNv%DOO1mki6sr{JQ`Hr^-D4bWI2*+#0X@kE&;kk;!!v?qrM4(WlrH15hV1a$} z8HQ@T{vcRPr@-TmRB!2J(Uf6Yrp&9-#O@J{)5mfVu>nQx&(*cg{bj^p`J5#jfft`{WLXEmyNb>k#sRWn$lFe6%nW-_qf3j8~Y=4HfuPX8+J$2iqvu6)3-KRy*GEL(>4z9+$+I|+KS;HO=G zU2IPCC$2`I-{S;2jkfCpLOW&?1UptLcmK86(urys%RH&^gs?NWo*)MsjOE3qbwJE2= zFg+t7Ul3j5nIZl!LUTY1A)7Ap?(Ic)=v%ZT_-Up%$6@0%TVWs64X?ERWVo%5f5q&5 z>NVnj_r*HVygg7Q406(`@^K~mW8_QginNT*?!e2IaNTt7)mX~|phr>d+j`O%)=9YA z!25FGDPM#tJ+T$@Q5>C+lW>Ld25 zKC+*TOt0kkpJ2c0(H$~xA-o9qz@G`K(*NWA+ThlhzINR~-l+4>*Hbfwq!60`aV8lC;c%T)3%1q2Iv`a$RFl-sZ7VPp;petg2B$X$*N@$?UN5u zbdSvZDgN?`b$|BF=UDN(IcR#d_2D|i;W{^A>i8}U!kf$4Q z*M8V&1W<1y~2zT6Ow1l}81%+iaeO#8N3OmR9HJ#bEtS{9FcO~6vjh2x8w_uNTHcj;nO zkvNms(cjM8f)l3%=E#`c1Ngg61;`eYMq_Gepo3A!NDd(w>BS#o%S$AQ(?-w(oc;4) zOxt7Blox9iTn_z7%(UgZ$DWY)-RMsmzHwMO#|vww$ckwlwh z4k}uZ0rvEDh+8xj<&3?(@T^Dr6?U3rlLuvVLm6E6=DuYFkJUa<4iLW`)RvKyV8i2r zGNH(YXb9iVdTsnao}FjkvO4?ECGZZtAa}{?QNhn*1<#HP!H(axd58#ceyyG%6lAiZ zVId(acuVSplbYGYbc=!W5d3ZKHYb83O<=5#hoJN%a|nEi(XxE(l%q@f?zkgEO}v?H zo$ep@r!v}D3X+sat&m_E3KF06I}7!8+mKqSI2gT?ZaFr|3;4&UPH^rVQaSzMEAm579JtuWpS9frR(YzZXo*d zfA0?e@9W^gtASDsbaj|BaUFuS;X>Aace)7jkjjB3K&DfLcSaE2#-)W6pVWY#CRl(wa3ImxnJqa>lV!a@hEh_`weZqz!acD z9bC$L;M?8;??xTlzZVtUc876cUgYytkLF?KB=oFP!ZFXBZl~nNs^A2n)gqk}EQ)~8 z6y*v|IOM1ThNtEhHS&G}WXG}-)V~5W*yHNzM^@LEv?b1@)Q#blZ+oK4+PSM|oTk5b zCK^Y1X4#n1kP%=)CZbI-ZWb;Eu&^dx1V_&mh5V1lJR&yJcxGbuAY)ZY@J-uS9nx#; zwILTJ!AeZ^+zPhT?Nw_~L8Uk@O|imsV!wnUx=k*Jq6U|ZVRp6=z~Y*;QUR6Gt4E4v z3U#*C^DheD=EJ)c?dpMgKvXQ|=0Q}+e@Rtgw_UtpSTRwCGQLIPa2uHZWVdy$P-@oX z;^Gc{OYA?iE_l|v(6mpFhNgDzd7Oz}2}KkH8G3zP&gkA0kV%Exc$esez$7UbQvd4D zW(^u-*4!9|$T*1pjpPpX}uYsF#1sx{viqToj6?2&^T`EwK0nD=T_s|;5%TuCp(<+*QQyB z;LTa&*=Gokti-m{oo)#{>dy9KvsZa|f}%jnodjS?^q0>kL&G^RK#2Duav@Hahc^^; zk1f}3_4j+2%*Q9WbK>`Gb~Haj=UKM;vjiL4d=-pG zy)$`w$FE&qw=Q5})%H$(?j&r|nNA&|!3{dnE9m}?FB6&tE(HDId(A6H<>L_wM!yMq zNCiOkhfQVqz0h$@yBX%Xf?-_-CcPR^fA4x8UQpNJjt%ft0Tl$r+YRy)G=a~-`UhCp z###J;iOwPs3DM#lkoJIWfW5zWDeA}et3NQm)m5UCR>ZyXHZ)%K<=DNJ7T;V|*TC?J zACrQKBRXRIiShS|s3gEcmjUXc9%`(n>-tX|<4=Gsc=1SXe)o8maFi>}Aq4tB!~n2FviC!0iw z#TkT)8P^GXy7nhqD| z^}0%BsKBFQ&aExrW3jKJS>&kF(=~G3e%iqF;-(X8m_+Pf!s&)dtaGD^gY~v&-H`~m zA^f)FqhWVF!p&YVFl;93HV%>Ts-Te`|x3 z6V{rG9Z~NZv=CnafI7VRO}=Wr?QS31}`BvrJuKh*@vnK%H6|QokEHVV9>R zwZeCv_EeM=hX;7Owz48%GG9E#k9z)zJ1^Q`spjoSkM38Z9gMD($K^dwk_L9^%Q=KE z%Y@%swq|noZeb_w2HL2hniKQs2q&qN%p~XZlJHw=t zbuibXPnfx1IBnQ>WcfnkHm-8D;1THQf`WpTL>kla*X7@&k;69EQVq3(aa2U z&TQ-V`TYm`Y@fZ~ujBcAK78-fqt6aMc)nS1>3Q+DBd>F6<(}1;>e+`IwnC-9o6D{r zGDTV}7pp$4IWRFj0qt+!Nw&Nv@=)Y}29Q#9NJ=hzW9N(F%f|w$&%axF|9Agkg4o@w z0bK^~=hMOz_pkiEk3PICjaPixD$PtvBL2m<_#eCL7CLR7GpXe5TTCK2_-1MP7+rDj zYYgLXjnoHTf)zK=ulC$!_Te;9bhO5VJ9~SZ=U%Jrj&ViU7K{C`P)vL42t*M?BS;fU zwHQS7E-%=v!~hMv=zhKvx6Ewsu)^luvuy)b4Aw$%wj?Zs8vjrY0^J~EPl zR5`*w(9l6uaiy~H(eHo)vxocVVEA+*uo8|)(+38ytH+>6!)HrR zTo>sGWp^h2vX#kOQae*U%=qqe!&+}48+KJ?szW_Ib)$Z6FRf(w(ig^P70swL3itcg>QPt3BaST#5s0J@oq|?&`al# z1EMNDA+|5FkLaAz5P?pnU3~Uy%|d+q5O8;DCx%S01&?V2;awqL+tRn= z)~p#5aQ8Rb*i*2^dvy=fY9#HE1I_Ke(x@830h(lHdggeA**?!B1&XfK+^m+9j&*<^ z)^x{H9JvP_e)5+3L)(7mR9hV1n@djLr01G#P1mO5n$(|+N zQ54zLeXktgQ|W%+r+R=O->01jZk}rHr9)k-YLxh+?u}jN?=$`@Gu0?Gq-xpc4&Vb$ zvoyik;R>>tQodDD_(t1TW)^;HH5S#2 z&9k#4q;-ed=8(IWYe~!+>&BX?z0L9ImkU#8*1&Hq!oTyU8EPlfIunv{;Ah?ril47a zsPg^24NNtsZa$awa`N_(k4^q5eDKChOzwWo4**#Z{izhgzb~BcPi#Wyfuw#A4Ine6 zQeCyyDqIeSL|u`u^(sEcs1Q!09hxKJzV6%p2&#ICAf3N)=-zH#Rdwh%-B0y2p^xqj z%`>x)*lVsOZPu_uHtLxOhUvS2J>$sR_6K(1S5gB(w`}OPCp~l(*6&+|wBl?7A)=-+ zyM`Md5Yl1PmdmJXnHk()+}ta2FA!qy8RL;k=MRgY>(6<#@R|Za$h{M9#X&>{0_o^i zGr_pS2eM7Jqyw)Sl&P?;(XNZPXm|fma#xef&8l6vKjB1#>I@f!kZe~8-*XpudF}y> zj(d`gH5IKhrQZj6OHt3W?W+f_pRvq*BHJXy?|YS&J($afgl|(~0*IrTG5RP+zgpM& zRSp(nyHux8uTVhEhv6v`@K8Fm|FF}4P07Hy(VjgBC=~zi$P8Uy5tl|SbmI+ z3r`+A-gxAfcAwK$b3aqd_Nc`PKB=W?!YL z?dVGP{SuT9(9XpzN#^(fs=zFZ{CdM!uC!b7(+{Eh7m3gn))J)Y*O0YK?vLwcUiv+m z7_r<8$YY&saaKA7KvN$7qrH*qv2#K(Wh#(RPw>#fVvkt<~H7*K;yDpB{SY-(0GE zsFkI#4ikUcg zTM>N|(_fJ>n~U~QTf)sGpQDVvPn{PMXrtjD(YQw5+#5ZY8^CX*)CpRd=EhPd%!Lzw zIbf7sZxxCUVbp%muU{CaO=($Sc3m*x#;^tT5?14>Df*Y&?C zLHsWwpEKpT+n=LJr_sX0zE?m&ZUqPr4?Dsc)w5pkoBL{<%-*vo5`;5l!gsjg67$kb zK-oHn%?}hD1dlkp!CgOh4?jkF<H_3NI?UJlN840 z)>f{>A{?!T7_# z-K)AE1@PJk8@a7O6%)z4pjp4VU41cbL2Mw!fA|tW&qg`V3K@9KuLuGWa@VZm+CPf z6r{B9sJsDEU|$7DJ`@*_0(3eFZYqC*tj)XkwLs^n$Xq~bf0a+^t05D2usL_l_!YA* zfD{UA-OHtJ>9n(mI7!z#vC+Bi)zNp+&c%Um+*$!8PPvILGZZvI5&)yKkR1pTr^tX6u+Dthg*oEmOa0bfK->qTXlh)y zva&iAMM=0P{fzIpp{!csb5*Z9{zYb0PbHL96epgP`u-SykpIQL(Uid_JH{~(%H}>o zZe6U=(s$3K=<&%g0puqo^Nx*%e&7uPSTWk!twwLFTYK;_&K5BAu&JekwPR#L?HqA^ zG04TZkPRsNUlL6^Qycs-$V_({@^V5jm8c{}gc%{`VEQ7LNneqV<1; zi-v={)6{YFq-i&hS>^qS-!q)J=-twtmP}h-? zqck0N6FE0;)R(;+n(}RtCpoCiJ=#A06pi{uyHY+*%Xpe#D&=Gl%oF$^+NS{aJdd^y z$9$egho8%Mpy&hp9)IC`jKKFd0tz?2#s~~b!OpxrfD}KIa4F!Lv}Jkck&EV%7tdZS z(Okfa8*2eOHf)?(`J6YZ+AHkcMHb@Mb|9{yr8(%deZmd#2edL{LhTai@V56ogWJAp z^D%?a?n=R4sjSBof`kP)aG<^YOY#wBb@F6MMQFv}F*zD^-`Z(mR=@{hZ(x^scIrJm zW$F4QGu`7J8+VHo(=WMX z%h$R^qnFfA!UjF0o~Jyd8OtK=zIG_CR~x@?%jP#$j2=O&)Ut}18B06=v4Hf~xb|q7 zGS6jP;p3<0ssM?viLw@rEts$9;?Q~LosNsw^(SQ?Ua0+qSZw+TTdYl`U>4!B>Fzlm z_QnUvfdkuOoH`btu!l~`aDQ^@sy{8J2gV!>Y zdTrP?KjFQz_Pda8w~9aaS(fSu9wWXsC?JTY{#^JmpVw#=S{)^sx3lrteeDF7NUz&>K*;wsC{c8sTtrY`m`6<}9vSKXH*&<*d z3F~!;GaI-Bx@LgVn%icyi)%Nl4IltVK-lXCKFf^Z$+E$o$F&yusEsruhdDf>Z;s;W zq1JSC4bl$(;OTmOqj)a)Oub^mk#7EXkv@k188!d75sW&9*SN%7)s@T^6Fm6bsW84{ zICyO!a=83Nn4i;n`_H9b-@C;T=c`FAC0b~)JHH0w3*RN*&WXc3NgmYAO1_n!R@>y` zy_Dje&q`$K&dD)C=A5!$0Wxi1xQvJs=}Me~9-scX?fv8aVbetOjtb1`b8WDMG|lzY zTjRXqp0_&%3)hR|mcy2P*5at$Ldv{tcsOcEF-?BDbI^FW$ z!*+K+g?8!C8cjc^2oH)wM)=K??iq-1)4^G}H?k5HYw5AtRm7?yzbS%3*_YeHtDpA+ z)G*yn;MXvX`r3pnlGbF@R>n^aD7-eFU>Sa8T@Db(RTj=8F=ziE>)Got!nYDbl8odh z*sKO~`@VjV&GArbk#@a{V+p&*Mbt-;QSz51D0j~DG4sTBUA+lLWn7!02Aw3@E*E(X z{!OVKucvXb?0+DeDr}t1KalelFAJjYd^`rmmW3&-)5$~(+%%xeD2m?*e^qa_mBxD3 z5(dD(f}o`AX+H-b<&eWEC9=y&Dbty)mXprnLoLqQ7aCc340WAF=Lf$_r= zF(tO8&2r8>Jq~M&&O6Dd-m3lr=;CFeYm?2!&=(ODJ(`#BZ;X{$}CmTF!H zELNnMgi@Jingy?p582W(N-4d$Zwf`{;N94y;(eCWxars`UI&em=zOQwBeGjy+km({`G0jAm!&Mrq;LqEGz30sQU z-99<{LCY9;L|F>GjT&zg&M|7_nwdvNNLr7T-m5`!dN)>m*mSr1)$XKw5y0Q+?8Ztl z@9}oXW!z)YP6# zkhx(>%2?c0Jv!RJkRlIs?uHb8Op7qqbz%^Lc^-2^n)|0C5o1uMpF%V`Bp|o70c?{t zWJ>*1N50Vf>No9I%TL?v?r>22nYwO^Uf1W{@jG3=oQghLB@=xTpZ)uo(;j{e}ltt3hUyEql+? z8WGTBdng2NldUL!=`tZ-6aPGzS8up6bOc&Ty2K_%gs0ie>VurOl0AtWHZ1WOJEZc+l<0M&#wTt}gMehd00w&Hg{R7giIP zwhG97D@H~)aQY(r;F)J19=&wlNZAk)*j+c5P^5h2$(xHWCXeteoP2_(*j)BFIVEIx z%f9;OcG&vn5;_BI%ftXYZ1nC(Rp$yMW&@C0iG<6;-4i(9xNyMDJqQ?V|6HEI^@Aj* z(plLTR}**=lmzA8|ALxbuW5hf6QYUh^laIb%e&aC- zypk~s6RiO7Yvri1w5tSv4M_gwe*RkOlE*}pelRaGh%~*`Mag0FS`dSyZO>zsNGQT+ zG~mk(WtZ68P%4yIWuZ2@ILeooAp|2~zBN4jb~0>+QbyYa!bSOi?8CgcF)!4T#oV3y zu1=7k7$PDR65Px6+8##C?B937T^tv6SYnmFxkV!yEgfnP>W}zv1v#nDbC)r>b@`>g zMQ!kAR4F;c&t;rz`MP8!yAK-S+qjwoAMbS%&;(5ONyIlZ2?=fr1^hA_-KBlP zF>ih0&MdXb7W_|hzgdKswq<+I@Xv1_79~HnikdD-23q7B=018lxcnhS^_MbNT~C}3 zTMBgr(eOc}KTjNVC{X@Ip21pv{mit;FZV$muCbL$rR=ovL~_MA)G_U#-G+4&@+jFH z-)pFu=3w0wv8IQ4-D&reJkPqQxRnYHoFWa<#&X$3o8^6p?NM$*w5VpKqmvO!6Afd# z_`H;{Y(fc#`RDj3RWUYU3kQcU)Kj%NEdgkLu>6i*D=46gPcf6azHBTHJMF@9ryTQc zL!W)6_AS>%ES`3&xTGk*uK{R}D~=@t{-K(&oPCvo=#bnt_uAAG@z3;>3JB5(==K-; zXbe=KMQKyQ@Qp&E*R5nbyKyGKf80xJRxe+dF4mQ}-r2d{Z9r4WBiWBMgx3szSo>{( z)6k!B|09@*G!fr1p1(Vg1Mb$N#Du%nfqVCBz$giV(kD7@DSZlaJMaW_19W0EIRZdg zm=Fqy$V-$335s67{zf+#+>Hw&i1#lIsNQ1~Rgil~>k*sSXpE{?v4yFSE-}Ly=$CRM zTG(SwHHmJC{TgQXAAZnB90s_yNd&A+pcm)%@m?PY!!2{x{CChakkkL+^28-gf4+pE ztTCRN9zR$iF-I;!y!CIjd@cUWRq-x8>9s=^&wYV6e;$R)t4X#l)?Tc#_CVLz53-kd zJTp>X$X@9W8^Y6pQdRNMuSycFGW*EgU9`G{q|p-z57j_@K2EI$%1XS0Ntpp@;AMT$ z!v=7Wr|Q@F?Mr5tHy&nQz}fIi$Zt%Gi&Y+M5f4$w{)BASPY#zc0Y#4TDaa4i`%IEC z=H6rERdUOs<*L<~Vkzy(U|OLQHp1uowPMCQDu2N~#Ezjxr&gy?DM z7e-}=gv2RHA50A0F_D8#P87a`4ZuckfNl~L+?UkGFJVwqGyCZUnDSNb%9XMpek-@VNdM!HLze`pw+epPjNua%Ftu3RWv zRR^#FYU`+oAT+UNqJ3wYAR+7&wDWUE5DdDfIzpjJzt0AHRCyl_Vlo zRnb0hz-xSp_~#&G%-+T z3-RJz9sY^|YWpA8v=M{S4Qek*Rt`^&8{0npQR%y9{NBPqu`0?w>$GYb-Qs~yUfLv0 zM7Wg7LOtJ`OP8Z!)-h@jSs14rX>R;!o>Hv~Olvom5QJiQ%^(n-F_qTL@b>$b25d_> zHMAXX-!=x?5DUDyL4qw0^P=*lb zHz|LO@JgBP2|=Sw+9>*R_v{2)h`YyRtVD!x@4QSQX3FYEyC6-rc9wj-&>O4fOz|W~MOVz}_aCL|5mW5T0r9VpHRz4e0jo&tcvO0;C<~G{YQL z?5!#bL)+r3P=jpC0bif0x96ZAt%|)aVt!Zu;@xU<4=->gdya=R)ixl%1^GR~j9<;m zZ)$1EQvF%{_})T(U0s@<+dT<2dP4FQ9ur0e0>Rr6qY5+Au`NevBBQWride|HPcn*t7)@^bq$ptt8cxxHtEjI2n_qfHkP{|5|6$tp?6Iz4xrJa&7>LQc|K~=+wWEgTb~^wCQ7p z1_hC}Lw|=`&cpIY)WukHrrGY5gIkG#dMlK*mLyE!751~FS!qQ ztEIjx?ptSb-Hc%1Ra!zQ0b^q;QQFG98rO&a%dJA9u+IPCrb`+CR-6@H@`=+BLJVzHDVs*IN_*tV{NqXE7nq(e_}>C0*T{ zvP)YrRb&yZ&VzL-)u)U)-3Jsl| zZe)o_GM52&wLyro&0tQm2k@uQ@=8s1N%#jkt~Evh2{Rce+jhC6Jc(`K{RfaSbEpl% zF4ti5`zMGRozqBT`xRuyL>)hr7t6sKI8!v@>447 z-E@8f?=-2_x`DmKHw5$@2;qMq`=|>PeiHo;0*bIP>eQpi1oGGD^PG9Af08dsEWDXI zkM?wnISJ}k>@Rqaeo-#}Wb+nS>BUje3!5&bwSCz1N6;LSw_nty;mw9=gzI>7IoUYN z+*FSpK~d71nOUfpcS8yVf+S?LjL|F*8bof91fOlS*Ce!#8Gc?jYfX7lq98ZN+B-wIT`7_jgMhLOoT0(35lr^1UX} zrL3wJl9R#M_@qJ05>2LLBh#0^TzbY01F>y|-?51Pt*1x(FeW=`zNDq1VoTC4wms?{ zB>r(T=F$Akh_&R0785AdT*6JNJUvz3En#Klh9MgmxwEKfJssugis(?f_ZHpTU~#KL zh7$6f7Nr9{mQ_oq=aVGsowmr1t9Tpbj?DR>m(!$m$^j-TWDco^SKI=Q z$?2MK&XRPFii&E)b^~X*W_?$(m{Efz`ME@0ijL+@JXRNsJk6Xl6Fb9{MoSW(-}&%! z9Q7`EcjX}};nA7$W}hF2Z`}01g@ge1DlnP2!puDGDJR$> z)pk*eOlO$m#;d%p!h*S1B!Yd!p5Bfr3J)(>B3@5P9QQ8Ugd}+!+2a4PxfrNng17ym z=$>toNdf|W6MxevP5%|X#^~sLT!2X*v{LE3mu;-&J)$C-bIu!cD*FyslC8a<6S#V; z@bQoKB&tNdu8i$xHNU6AZZY}e@NwH?SE{0yQ=HNRgWB*==WLRZf7FHEPz9_wFOruV zrSJcP-*8_Wq!e0W5Y1no!=dVR83qF%pH8Tqja%6vI@ETb)RD0#+^ERDJ*+lcUQv6M zblO3WPcK=%g2r5{xUpbD^Ycn3SfS_(*XGi!rJOue4X;beoy*y;V*N-gaMky7hwh?DxX<0) zKzS`E(5V}4bHCS*)am;jfBms&cChLD;PyvKNXh$YB(3{->aN{TPmK(5M77&M7t<^k z7c#OlZKVQz2B(2#1eU<7DQ&bQ7B~8*W{jBt1^5&29&Q>L=?BFnWdZy1P{k#7zjQ*!+9`nIQ0_44oDe0jO@63f*CGCeoix_AniF+rILZuJsN zCZ*Iv_XHasTvK_Xg*NE|#Rwe|5C6 z&z#${-q(*`R}MA6j2IffQ86+L+Hhr~;+)&|K6TyN*GW+>@$1#bz3L*|Rj0Aj?djBjC78 zK4AyF?oDPD{s{6k6MGVMkeNO^7irJ3U@FWmcU55HBhM6#(Z0NiEEREd0wUsBUJGUx zlRl-RG@{CW;jXJVYlO-Rjf+3?q#qhS*XWklgN+K#{)zc{xJ#Y{?9KVAM6aKHA*pP4 z(+!o>{{PWV!VVqUgTir-$Q|K$v1(_#&Weydu%aBlN8XakN79l2a`zRFoUeClJ+9t5 zGz=2bgwllHunG~skV3W-uKmq=V>H!Ac9S~J+1d!Sp=Vrzy|9?K^~S&#TL-b;3q`Ab zNV4BkZ`r5+&!@Dd_ep?pdducl4Wc17nYRRt*qeF4#R*7*@wH2Ftp=0R4%|>)Q!Fz3 z1s+hi9=RDTQ^(auTy%u|AM2#R{v%Jj5$4Y4cXJ)w#eoO$j4EW~I05YKTwn9r0y-Tp zPMe0zULC|{ZEliXMM5FiP{}el~Xr!mBSQNk7eGx>+I~Kr+8f?{Ih-L{aP?lpb6V9__+t8&RJ^lS1n2E(Za!_?)eEh$o0;-QC#zd2U zcjhK7q)wT)`ujuP|FtuBmK~#^gJMVdQgF7#ao;4BYk!g}lO1YC;;s6-fqGnFF37MS z*4?Awnd%eh;BGb3Ns@;#IX>CeO2NNzbfYv_|^+dZXB zW}6IL?zek32J=MaZvIeVqi#;4jaKc&u)on6xwT7#m^oSTZrGdj^X@Si`@G!3xkBFR zam!U3$MUL-=HkOss$+HNa-YHnE`YeM@r^xhzb{!{N&Jw~_)OMBWb^K35mWi2N=}io z^zojggf$a|KSC42?Knoq072}xR<}=(-=(lqwIYBtq`5=%-I)w!Ge_{(&u+=5Z)$bL zw^GHpr+K}O{L908UXjwZOkrfS7);st63m*x(P0`>+fNZ;D)vny){Vwlb8Ay4>INcv zq2iAJvEN3#r6N_mj)k^9le$s+85u5J^HEc5ZTRA!pj$;3Rb8{jE!M4418W%3J~Fip z*uPax`-{KKT^#7XJfU;R^nI3~vA1RL@QwWX9O-+&@W#^8BFe>8*LTEycGR?fLZB7g z&5z6!!eDo4gD~UU+^Pcj7lULl?n;wU5TT40viEw%rs~CbQ0N$wTqJdGOH6+o{UN@uY>nF0OskB^VTv4TgP|^R`Sos@|Df zELjzF3Aix16Fg>BHog@z79&Nk35aP?+_dkDn6lM zh#jZ@w;j6To*pG0dA)P^7S2|who%B198U~!wCP(nKWf$xXgLnPekE(Xp7r`G3jt-i zVuTWB6HnVSPn8-xmbrY5SW;~;vfvO&q|wtn4_B ziAJi0~otmE}l{V3tquv-)aO_)wEeFx7To z?m=!v-9~D)in<42jeOd7V)l|Itf(`Y49lKNTsPd&FRFAIg?X;T>hzVoR{gV4qI38r zvLXHL$~`~72YK;*K0djhee0Oc5A3tf+24oFek842u(X6_{OB$m8Zb-MZESj~Ryftg z4SK~(h%|~VK1>ZyjFvC5z}?HSl)KYI>(idp5%0gp)Ux-4c$%eVH(M7ebYP!BN0&%# zs7F8p9Pb!aO^qMwjQ9$(n>P=6I{WUluux91@RUgbEdI*TbItirD+ZqIzqXxq+s;Y& z&n4-!#}Der|mNFeQjrR;+Fw=b`~Q=>#pdM8-;6IN(5l5jfR=8xr1`!Ymdk z`rLC@suvJP28z44e{@QVm`mSkm%Mh;A6I@|TJr+(0$?`0i&VUR7pZga#=yPf_wF8H z+9pE8o6fA=X^(SZ8WEkLQRCX<-7fvzKtqgSV(l5NFZzPl z#{2rC|HxHkzcxNdd-huu3j`i}ox=IZ{dx~R{-9lczp8sjaz_}AZJE?EHF|O=hNVE>^5aU!O(V#QTi1?Fy`P~EMOaiD=*T{OH+<6?9epVB+ zGTnDnEp=8PUl1p8^Rba1F6?%9P{`Tl=6A_AMvM%$PPDtq3`8n@r?p70@zUMDdo)-# zjMExiUYQYtiz-kv_v z{!U~k(?aQ6PHm$2W6e#P1xUS||B%}E{&V^9!_bd%8du66DX~WPc2%y|a-F<1uxKn@ zk$m|l>&?m;)Wx3D20qKP&#obUI5R5B6U!K?z2tFcPv~i=R-vHIk?8*ToePf&RnJyg z+K>WMt3OUnN^0bpy>U5`T4bA1gwlC#ZK39A5x7{I`*1r!v}S;W`NpcmPXYDJEPYxG zMsTPZ*tFIIZS+_X!a`?T2pG?r!q2PKD*1Lmh|tm?Sa7xCWSR#rh8rKPT8cx(I${zi zgJ$m^V?_<2-#zssek(Ofx~BSlm$FJUdvg9n!Nix(PwU^1HLmunQo=bY+S&2Z2U$VP zYul|%YfMLWJSogolI8T&5W9x-a11~X`z~{STe!`_@~3+Jv~UU|hMr+3CZS!$hdv?8 zzY_m}A|dX@d?st9?Z?#H(UOD9Rn{l0hICXSWG>sheppkJc&yA&u=`R)z1DiuAC^iq9tMm_ae-9B?d_gJSUzi`efUgJ4docY?ITChP zj;P&I&)FdDZgdgWr9T*`Lbv=+1mN^|uGt?bTVNo=nrpkufpz^&=R+d;VFcsMP@KUN zNxd#A$AfRCoFvL^Jrkdb)fu_UoA1L!6 z4du)ZYu%#6;^{OK4*n*3g2@Bz%pW;Tpb~xL&{(68GLOd1)%9IEeTQF0fWZyQjMBqX zED{j5ylUC1JG_Qn1Qca2wMk|(xY3qca5<6;cx&0jc-m2O!)MVvGE)|UCy|iguK~+Z zja#c|U?j#8&*cYiiu0Fqnh*I4MHv<9L^pV3L>I2IPGvtG4i9-#v%cE6>yeYJhYP^l znkH zA5xIm*)(c4HwsFai9glD2;SYMVWISU4V+DHKWK8aX)*vd&%Yca3`zhb%^`e)IR?=? zV8w`sAxbj38%Y0AT2dYH-Qr=e>?i&YHbVQlTMcK_e}`_gCVqJl7&;$B$H9zr9|i_$ zzC;V}=hbpU*B!&pL{63Lv7b-T*G7ItL7?qy-pAQ4(EP$1e_@kuLLq~`;-KALHzQ;Y zUP7E%jkPs3S5TDI(uV`V6u%<^IIOUm7H^*10{hr>UMVo^SJ~ZEw23{i548x}Sxwew zOUL^k$aH6J^P!{BEUxDd0lxe|^Ew58+&&3;WJEy1yd(?=-vwOAmvInb*8sAP>NxrN zDlnAu9^Q?7eLmTHYuG!-syFJ7hz*#(46lcuHJ4v&ub**8PXR$2mt+e}#0}wV;Sd{& zEXP0mZx+r34>bkxqoOrQrG~-OgT(_nl@(5t>U82@ua(MJUW7+7pxBIZ8Vjp*JP$>E zQkRzv2ZhRoB?r*^we-Y}L#~(|0?P|!YZ#eN;cvkoK5>ixKvl|qY_Vxnw=EsAxtTBM zZX{qBk#s(sY8+eZ`~Cg7(&#UfwCM;(HlygMdb3L2Qgy@BSU% zZ@MXlEP-igjVLV*A#<^%N5#wc(#JF4PVRE_8jO$vrIF|j4f8&?vyCXh_!_a;J8XdM zZR4@Y`$Xd*aOr^k6GELzmjLE?K{RwY@MDsvYBU68n}kcnA%AvS7a>PNiA4F>6v9I0 z%(en{z3u(GkQ0 zPacYDTwOAlkw(|`3s5Hb5{5qMfimYQ-*}NHkb2vE<@=g~ril>Oe;}@(>sMlD{;ucU>{=C6QtdouP-HvvQnmk3Ok8}BfL$X`RdpWBCkVQO+ zoZP$45g_uk05n3`o>3f<0}))E&9e8KY!BzlzCvjquUg7`lO1vPv#PJ0|KKV!_=oCW zEYc5m%)x4?N)>PxTpQWkYgTs{^gCZRR7LLU2)mN*U-#h5XQ`L9Qc0vpyKfe5Npr!^ zxX-!ySWg4L*H`YatbPSKO+{WGQVm=eNf~G9+SXll8>$uMaH=r#%%GW$qv7O^BZyE6(-H)rOH+SD2ZPuSBVz;q4H`zDw+u+RNakiUD;E z=GgQ_+mI0L7`DoT=Z~+2Z%gQS&ic0yrR=oV`fuMoN&Fk;Id*eKp-gAIqMAY}zb_fo#0Eiz8{lIDue_ZP3*WC9Z4 zf}o>r6GHn}a3E^dDv-s|F?E2XW(c0^J5MzqUPj7}ha8jXP@FR$AI(+wL%8XgK5VQ` zzW)SN@D$jAUdRFS)gE{<@1B5wWv=PTb|3>*Hq1glo|7olCfc!5hclmN42L&gahP71 zcxqj(b52J^Pn+2Cg_bkI^X?7QJ50_Lq-46GV-+b1BpOmfU?heQZ)&Cy=+AeYq&S}- z6sPnuA;`+_@B!u9i+T$3o85-NQs$*Y8?}DE0`mLXmi)t{1>H%=ebPy-e1xI#E*#@ZVpy z$!8`|lFgNn!Uqy_WIApEA4?q?fWN9M`?>YkrlPdkA#eEj^a?|w|1cO#{o0L-x{P<` zd(bx)T$7;!%^QrM6;*FptcFEcG^#8SD=H@Srk#9PD*08{7>q#w!?+u2dg8oAdLxh- zoiwfU$H{5!tJ0B^kMLfh3z?u$>Inlp9bxnkts)mJ@P29=S+~i;&kX*3rm|}H}5=41XAK46Q zQ+Sz))SpQRBA9!65@Sr-T4%3{ufPjdhh%b3Bsmk4o%}+u-bF>^P^?s#`CT{fb73kf zi>WQAwrgFv)lNDx#ox|_0z@Tby;4mrzLzIZ(ZV#~gySk7 zg1fz(1`}vo=hK>DCZ?JRb{2|Q!rz@J_6IV&d$Ku%)E70a0*~KE2eKQAjKUSNBi(5O z7i9MSfo_KIs&Bt2M!#eC`50WTMGogp@g{^%F$Qf-O0t*17QjT z8p?OGDvs;D;0LueF@kUGqSo-x{&Wt7Hoe8WYbQ-Xkx=W=RagfMosHc%hB!yIR^>+a zp@2m>{&jWpJBt;S@7)*h^8x0qZ;L$a7v)y6H#yOU@T-7#rqRdl@4|crqq^9R zY)kabulJO7D=1I;oJs1NIgz=hFBrAF@e(;kMYC3MkbBsfRP+g}QYp?OW>tC7m6x*+ zA(&nF_F4)o$Dv`^Z@;dAvlGm5ObXMh%rCLONl2md=b_u5AAkS;~%ydta+GmvPBG&nzZLkZ0c(7P@r{qTt>7*H6z{2+jj2FhXZYduBx7>Mg-WU~v<()L#)Wej@3> zbwo-3T!Fj@Fpeackc>ZxcXd%{3}CN5mIV2es!#;ZK4&;eb2cE~z&l zMqem1Y#R{8>fgc&Wz^ES!K=kDp&VXhJey7`bs?4?9R7XEe#2#=OH}-H1cmDs2nl`h z;=$;LZ$X(!nQjWWtt{77hq`HH<^46Pj3G{vGDS~(`tp9Ud6kr%J6@ckA=vm9r`H;6 zGx|%azMi7?;4Jmqc;Oitv-_ITg3*8-v<+aa_>m!_VY9}mPiI)0S$^BEScO7)o@?#b zhm#HZRDO+Le;H45W@XJK8U#x9shFYXq=bb%)~fUK>~3BmUA!GX)?=O9#E6coOqw5E-q8BB@E`=}{N5Kz-a`G?OuCqiZYs+!RqoFJ zXrHK}yGdp6?cL)MpcN}gK1G~RR?#d9Bx8EIZeUYoY$Zfp92Rq-`nn%(>tF{8{;*Dvfl1&eobEeb%-W zJ6`C{kdg#l}0Gmh3b{`d_Pf0eWVC<@tuF#07=j@8Ao)QEuCI$Ip z)LgQb5$5w#qHAfgXx(E-9Eq^e)F^D(a#^+YvGU-2){XwVi>7M+t|K|I2`-MCgzDb9eL(#vpD>2J_>g_<1`1JO3me?M|de+6VXWYl21Mc2FE#!rk zzkNwrzwPJJlmfAo^T4kVFJ1oSy^q&2)Qs@?nzDryo$hk_>VTeJXm?56Ed4tT z4#(pr@Y_~5OcQ^a-4)Umq$F*F9Y{a^z*y~7}6Y8_eRAt;F>cz;qiOAFEZsmC+)AW_W1Q>MGaA*~YFx6aqz^!T6jG8e!csn35rtN!TauOKyes?yWb_7;}f7bgG5 z(YePn`M-aBeJCA7p&W9kkdRZ(a~K^QL*$fWLUKNz*+fxt2%*FzhvhIUr#YWlh+$Zf zV+;-N_&kfubFK9WHSxfamJe?o z_Y5|*FdQ^BAB!E((IBI%0=&csCt zetKVcw2bz!o_TzT#V{+~G|sLyfgmhC9k)^R+cex9jH< z>jM;7?B_ghH?qFUQP0^vsm7EPg)f&W7G7%{%xC&R$3;Xm^|zuQZMDBz^c6K|ZJAOU z*c+Nz54zIw$*Lx8ua4#;BeO1BWosrjb-)=Iw3EfIcY?>IB+TqLCvQZU91jh8pqJ|w zY;bw0d!>J~hJ3+o#^}z225j9GVD>3eitDP9GS9UX1`pW7onb zjPHAfUK)Mv{1^QGZ}phnywc?ZyRa|iN?`{IeK+v6t&Q)XU5kkt;>eFrL(!w|Sc3=5f@w3IVnXP$a(uQSqn(bma{@OzQx00*MpS`zI$1ShyXG`{%NLUnT zyRBP1v@jY_mARa%_=#q7WEmm4q&(c7P>m6Z*R%?Q~F6~azk+4wyw>6oU``N zk9o3>vf4uSuPST2Y7MuusT9`zx@o$2+i>f5EYJ7ayGmUBgJVBZPW@d@zRzCOc9LV9-5q0tZ0AUsp8LG*OHM9rKf)RW$=~5fqrq0T`Fp5+ktezdqFUL&g0dQ z_rB+GarN;2r!6$5Icu&bV(fQ>YOl?9ZWFroA1K%VJQ;7H`Z3r)?7yz!xxsZ!)jKla zXPIY^Ca85yo5c|>KBJFlc2l(!t}=>ESHDrK)eV%?2d|9xO$*s8H;pVjgVhF|&unR4 zTT+o~kb;}{$^y(B1gxK z41$KVO-3dj(DKfT3hEP^{5#*S=c zn5)G_6N{>BJ8$PuEpZO~%Z-+8M*5Ug_2U~=U&b?|wVr-Dl-aDGS-T0!-@&P?V-QUP zgnZ#i9L?W(vQ@H*e@) z>HtqQazr*NFl85uHs9SR7M2N$xofGf|6+>dIzSQ1L>J0rw@qPOcxu)`zq|7tP7-2{*}o+p2XX$5+w9{f2almCp~lY=vkh;X%P$ z@JV=gcyy)u5DYwDcRUe3Uzdc@Xyj9R6k|b6mj24h?OlQOzD5}x;wfOW2*$FI;jeX_VZ5i;{p91LwK)hKo#f!{yZ^^S}e?U91g`^jpu>%ZM!b5s4( z?QNT=g>UL(gRY|6#qfKmiysM3M;%n^%V)hFDOp_1l@uT9ClA(0OLCMfbxh2E$$k4l zSRL_pu-3;~|@dPhPQTz2gvs{_*n;LBk8>BE71CZ`=tfGrIQ&2OGB*Ha9VxllZ6#%#bHT_Wdk&wPIpc_& z+SesO1U%c%;h?{Rv~gc&*&O8_a5mUC*(4}^IQiw<%Wpdf%){^Z1fGIus9u4Q(j_4y zqV=Soz|!{e%A1p}$;!7x8|q)nU$noIe_w#WFOD|Y7!J3e+LM7<6k1PKpPyWr)AjL9 z=Igqy;T=(9efqkfK39PDj$g*dnNv=-0jj7}W4EpZRT(WFEBD3ZPZim6k4;o?56Cdv9Wjkf z8vmRTP@Mm2L6D>P`vC+VY$MjMr{0}%B$%HzPi(UaFp2|_n;zW&uCe+#V{9WOI+X3=wnD1&> z#LoH*=Q{k4h~xGt)yR91og3f0rRWJXU>^Q1)z2X*XUr zNsZ=}^UHcWX(AC{nlqcdEjJD(n0TLR-+B#u6Vv{sE60$B^$l&fO{5t2^xUu6PP9sH zL+#h!%Js9Y8CZXL4Y%Zbp^LdHzq3z)-ME4xfzS@O@V#NEE38YViY*S>1MTa(nRSTMh&q=J->HKL?IaQqd_4jRg~y zhgAKy%HEFLcW@W3R8n#lOJZL8%3RaIInK|@ZzFw>t~skq52^wi1QE-&t(P2Bz}08^ z1_R26Or>P^uCK2xx9r>~XqnacUD&pAn9c6zeD?~!o>Zx_RBq<+pK+rS$K5(HIGy~d zIkREE`0HcOsc^frqHur2FI!!i*}c6r>da$1yUxTrcehj+hZBK3D+g_;b4PT8TGm{<7w{I(3R#S`@|A9`seb^do#=L%U zbW3H3z2oyA@&uZU%gZhF4{e|1x7XyP0h_8r_`>#IdR)y#ZvG@ zR-MQQ>a_@eE9}UO_63&E0b1W!YrU+Wy9DDMCX$FYxO0a#ym`o9=_8|z>;FKvyAZFy z_%{L9q5}nyW%!d)$~yvk(w4x7LT04ldf7V!PtIJF-G$UPB`rzo;upndElG1GU&nfI zPK=c=+vDpyhDha>Xl)b$u`Z3GeXd7u3! z=9(p!-YIFLUwBX&z=JH9Z+ zG1QGm-@AXl(yqJaAIOJRG&|`VqGoN2ER~|?wY=m0lePy&9fwj^DWGk9up6(>*w7DB4IWN+^mi z7IboZPZUEWb&?SlQ-KBU`<~(zY1_4H!IOQ~y%RZC{+oX3EaPKei!ia1^2%!?YB)N2 zo|AyS%|3?1+*^i(%%L(d!I7HAR8EU#=C9h(`bbzE?tc5bHvn)ZIL`lcGUh>&tNnDk zqRHsA(sp0pTA*^$+;Xj8j=Ds_JdmMFR2vD3c9p?8BoA9(T@W?|aUAXo21TVsi+Ir} z`-#VuG7Oebxt_vA1!G3}51MsdR3$q54SA)~7k4waE(i{*y(yb+mnJ+02Z0 zZu{ z^Xq7CXM0B9)~9_Bs(&ArORm3gTHC&5e_~o=n7b=4UbzlEmHeRLuFdy533s+8ZtCI~ za{pnJmoBQ5JdJ;Ry?u8RU z&Y<3z=i0d%&7rct*F@8PnS^thcptESd}*Uz|GZcf1)6h?Vf&eNt03HA$J2OEufSeX>y#dxa$6h1vz0q$mR&Y&B;)MCvxD zKk*pYI4Mv!lyXO8H5&Gj45UrRZF59jOlzg4!3%Q~FiQCxr(kdh)&=NdC~dSs=)`$| z&fWc6oc<$Wo`07C`A-pB(&1FOyIQfa)cjrkBF7EJzV+W-oat259_wuO+|hH?*n9&Vh!k6tU%LYoJOcljf}1aupLZHA zSqGfU1`qYs`GJm1I|OUi#mAo237p^-Ctm#3*hwQOC1@pShA`M@FxivR>~0=c1A=iZ zzZt;h634U^O94G0pV0 z>7N(`ALdcMtO7iuCfw{X!52qgq5*i}DOxu^iqhNO2zEwzXyW_f! zk!kOlZ*eY3K3lqkuj(L=lZ~QUNeFe9AFRY;Nxn`>Wvii zI)lRhd31(Q%vEv%YkFoOAKsH6-o;W5CRNU05zf-UtR#1>_w1Oo)A3~XUVU?9-P%1p zg)~A3YzRUyDwO0KAbw`RREVM|=P1(zbwPI54t0VM05oN$WMQcCL_xUavhe2wV9@hL z{E3yYNzY=2hSRK2!-h?){}@seg~K|x+<9oqOU1BBuxN@b`9GS-PsxfC!9I{DyZ|s1 zkVpP9pb?Z|eaFcfPR}0T*D}~lapQ;^C%!Y(3>Wg0F7=kKq!8WR_9(cOFMpBIPWX9Z zXRK@RZ%TT93S8r2;ZDjz z>?th;%j_08oUi75!5-t)m~w~PF0Q(o?up7d=B5DpdH~3pzzu=q&u9jyY#*u%W(Mi( z3Ps~aV%Z#s8Tl{PAW~13kAyIV;pf*!bg+U)xEUZL(~%Cd+Y2)ua>qGlw#2p;W-QMO zK$cBJnZ;4gYAhw;AF$!AT6z%^b4o= zQSWPi@Eu6N0hEZW;eqBGj#BeqKr$u6YiCvt!X_5_Vqh}sq~kCi5#2)5R$+AlW0zrr zdKwkA%SL7NL*P1?Gy@^6PKLtaam1PlW@3Mn88t;zKG?=pqtO&Z?oW%K;Brxk>S+2d zn}}JNq`Eq*{4SxK5xKud!t-4ABML!G^@(^bX2FH;njS)sYxuN7tkTKs+#$zJZ)n(^ zeEJg+KM0+Ps196{EP)#=A4d^UN`y?%Uw|=#Ibnp3IK$uyn*abaKPsTYfcymSF`{Pt z3N+W3rO@RfD(V>Wso29!8h&8DE`43XeG5L~e|0-4}+`M?dUo znW~&puaAEH$FRinw#R9`BIsK$nf1-~z~hhqK+o2JXDr3o(ojMxn~58nZj&Kxiq?^C z6PnR6+pXi?c0V)G`7vq-C-X~^V6Vm5Uk{bM5o_NMXp{=^tnyPdk{Ze8^@|!G>$8XI zj}Oh+Oje?MoG(dQ+CEThi}bee`cvl`QHlOyF*WR!J)P{E2dPD^;bW;c=#b=&OHW&y zwq}Qyn;UY=$SASqq;%yo;+|qt_2uHvKDKJ(R&`fJR2{RHuY{E37-Mm||MgaWzhrgk zqPdl|Qkv4)*BSknxWrTMh#6cGb+{e}vTNZ#TPYwV<|&|;@#R)vf5sP#fZm%1HNris zG&O>irInQq59n(j5D&fJijsgV=@a1DJ<0u(eU__PfiG=jz}^Pk=W+&QH}L+I&12F+ zN&#Cv-D6Y!kB944%r}|}y=P0I2lLJv)XkpF(=kTlrf-*yFP}G>lkXoS!2&Bh71dS= zMw8b?JZs*+E4z1VAAjwRqdk^)14G25{{y+D3r09SuID`2LL=O@*cAG58X5D*@oOI2MMB-QHW9SMJQ9$!xUNkQ#K7wqIMttVmrR;%@!QVb6 zN}P6iuOGk(vP06uoH*% z^dKC6{TXnFd55}2`V9;9l`eD5%yyCkEW9J9)V~Cdm`~dCcT(&|@BHME+KS>H(L2G? zV9F~9;=IZZhvJVLVq8l8YO{{j8C2Dg7%odlGXX$KQBX2nmj3y9?cLytIeSOoZpb#h z;WT9Yy6Tg7;_9K!4WXe!ggYTM2!HNsee1(tKS#5lo)D3Y5V{>fwp`Bqb-f+U_8NXW zMY<8}XMvUuZ?SGI4yi`P3O8%vOc-g3a&)ApMe2R4?qPJXN#)lzJ72MS3uCKxM4hfr z=em?w)MnMQ*{(fIfxHzAfF}kIrHS=R#`^GJ`o!vXV?3dAP zqFOKh^L9YxDS%}D2a|eXlyz){~lyaQ?)5hUDfX6G)L6?_)#wT69D+i`9OZe`|JThE@k6{ zu>>w8JD|&M@TW--o0wc7^g!ygp!+q8Cb1`J0rYy0`eL`epqXb4ejBs?JNoxTFI@@R zk9w@dV}&exBij!3jg51!#Ub-{9yZtE){33y9OfPFdi#C8q!#(i%_0JFQzIQDtzr_% zo7}GXmu_e1zIe`gy>j6!%ySka)1J=qB6aM}J)682Cku*LM{(X8trtZu{26rXjYsyeshsIAobI+r8~<)yfKN)&&|0 zv&D`uiE7(FK#lgf78X%>2EW=XIxGe z)SNh30?I$VaL=N*c4Z){SCHcbJvNw<&TP>CFBcBvw;%3zGH#BXIEHcV%(Yk;it}XJ zi&Y_~=L+Ab%xp266E$|2!9XHL1Tf2;Sk6!|KzJsC7J@U< zdxSfXBI$?N1}#p)ZZT+Y{g-eOo&gTuD;9YHn8Je;JBifKFpZd&86rBjbVF_``6k^1 z1#E?!D?0J-1b5=qH)+tq<0w0I0zeQ`EZWwKJyF~92&XtUttOW8P24t{W++CO0iA<& zN!5*Ub{D=C=w$mjsVz>ThcTXfsB=C;!d0AFUVp4y9wjI#!8ag5We>~;s9|8uDmxXp zi<0#~9ZL^ZXHS?QY)rvES?*&yWmhsKBtSheIvwrsc$m zjfu)DROf5`TLll&EIrFs?70(5GFyC`-;`w5OqMju;YbnonfxVQW>#jLcBQk~P1e=N z0ya_h-qM9%&ptYMA>>e!sD8;-!SKJ{Rn;!vG%kbXo4!5#eM5mW(G$9m1pptpt$YR z=Z{dVOBG#)UZ`g|n~smj?Y;&2FaOAXkJpj&2xvX%x%Z0<2F2>d(oheuflwzkPc}g7|+W5AP9UA!U;PN6l*~2aR+x+Rz7vaY@44b zg2VHyce;VJ(w*|72y{+Uf_}v`kZ`Ke;xxZ?rhdAiO|F_Qt@LTdZlm59ug4UET!%df zA+1m4-hw2F=I^nT%|ScvV#`dFh)ohG6hCD{ff@bK5G%G*h!9zZI!%OF*CWfA){Ij{ z(S{h9y-J=vG6V`#EiQbY&3Dbf7g6HCdjtmfzf&Vi0g;^;G_G17VOITIEL>Aqk<`_N zUBoOVpE7fZP6@~Q!E*7*Z`$pB{RfAYw>OXNo$ifW82%PR`}>CP7)@*JX%hQ#YRsxS zFDNSaAzK64Rd0!9oPIO{^#cc{WYxb$EoaW}J5z~_OFPW7-bcDLl>Ou$j1xNK%%bU2 zcusj<;8(*;88EKU@(IalL<`UWAKQ8gtxBNh~b&UGR zb$s)+?n0e!r3MFj+{_dg*9ke_lxRc0Yd?I;W36o~yyqY24CBh_ z9BJd@;6CA-csI0xvIsA2r;lFR-?W6{@!Ax&vu~js71qwYak}eX`kOTE_CRLsYHCaj z7PNC_QPQ%d`%!-7R9Qp0+E*#d`Ge5+29?(+Exx2H zt>S0L-&1Wrs5CiR@jXJAeF+s8n|_CG{DO6Li7b09A3+&Y=-&6(Xv!D#fnIuB+sbYKvX2EH*)(a~i*z1g*bXU*?74U}2~D|n(_XKd_ux$Q zdE;J+>&tfyN)3!hcn;PY+m9wBwSS4l#yglKb_V_o_}J&6DZ-5_&z|bDE|)aT(XKZN z{bu{o)NW_!l95tm$?iTb$WO9xkdwjvX`e=&?~JuErp3yopzI$Bu*F|l7kf%+pO*|b>(q2E*pn+V=RGf0^hM-aU#w~n zd9m`xyzjzL1=S|8DZQZ-<_!;kN@|)2M7))>E>G-HmmJSu8CE~Gvn+6X|K-ob7nluI zSex_El98b>4?{Z6-$G7huXK6>Cn^mslwaFj;3=uoRV54eu$N;7oCu-kACn}S=`PK zO8$9T)9rS=0{w#FLI5N)Rz*7Y&h$8Q${66jzdmiQX|Kg~c)Q!HFDZ*g~`o+0Q zE_--Jk~L`s632_bJ=^gyQWIYry5sM6qxD0k&dP>c_M3wdGcBo%Mlp^LEPR4NoSGaE zrzkPxndFD&xv`2>kQhdxE&gYf0t>fJn3J`*duv+!SlQd#>n%PP$aXB zrO;GMp=*=2OJ6XLXPeamj&1Lv;E-z*WAI@3$F9!JLYMiOCX!)e0v_H5!$$dP{PvtA zO;J$LnfZzv*wUO~64NPnc9s-pUgjvno$NX=!)mNaQNU$L<|E2}r zy7m_uh#-6|Ve_9xi~Cc9WFMtSSN74IXIj6-1b6a*t3U3LsWi?ekxwV0VLKRYMry#G zmy4HFV^mtULBqu7c~ujENwxM0_9?K` z3#^?$m_2pJ&iLGry{Dj175fmv%V>ao!IkUR>>>G2f7iFk!%*tXJ~-W=W>V8|t9jmT zOu6lXkOi?5KOC+&e5r`{eBk2S%6f2ib+O0FaoKeDs&^wQrbEsYKIfJ^N1&f~*ZN+F zfc`lk2L=BS{yZg%Ui1~|Z9uwLOzW$1Tx&Y}g*;*{a%&2geOpx2C0S^6C@xD>_9Qf; zn|XuSs`dJ1TWw`xkWm}Y${M+=4zd2cfn=y0vclKx4WM#AMrbfe?6+-1TKA*S@xbB~ z#Oa=kdS22w0Tr2ffnmAQ2TsX`g`Z$-z=X)s=7|UvOi)2y8lr>*&Sp-|q}ui0M^Esb zyjs0(G_uki@F=KEhfky&Q1mo9XTJxtyzg|kW?>b^AfV9ft-rJoCKn#5$?58HzQhLH zLFcl&zcP&#uB|YR4upALHb~~*kgeWWeWh#s_yP4q1DEuMy8JmQkCZr$ARaEzz^-7_ zRv^VmUw{C_tvd=@Umh)WipZNF%^GLEBteE6vWE zUXto3S-!t!DqH-!+Edmy)ZV| z5gkr6+dTZZt^95P=T*WCS#cy%vmuHem_a?GJ!5xNTH0WPH{P`?aht)l?Ab(#&v;Z< z4BJ-^PwT3WfES1<%ny_ql+%3|%Jlj4*SGQp={Gc$at3{bxR3MM>(~I5mAC1A5f3PMuMG$hXW#~Oj3K@f5V;a_)>1j zowu+gKPo??H>}+1nD<`11VE2(d@>szxgCRs3^H>uAhkcVKMY7}gA zV9}D2Rr`|QdB;fhwuy91E%L8jdXoS7f-Uxxk*VCka{0M?jmOLPa?UPXaC?(R`@rZ* zkk)>r;F1<`H6^TToBckB_~hQ^V8_W1#E)DC%0Ma{ zgx6nWq(L1*l)Q%GYBDdl8lmCf_$Q;SoqS(7tk2*7g2W*DmFcfyi;B-&D+M3(Hjow0 zl&I8^^723R!?XS844{_x*v|N~x}G`NDy1N39#^5Rkzbo{pR$bFS_cJ0OJ%$}v%Gw< z|F+?XuINOOuDNy8K;=N)bbUMDyuEYSUWW;nw!VD-M4w5&YU=5-#q%?@PK*XqC%ck@ z9JKol&9BqJX}`20H*xA+{FHp*Y}NvMmTzq2zK$LV_z=xBs_ZrkhYkhnz@f*X0lcSu z_x{AgX0iBHp~LD=J_QYiWqUUD$c}sK&mwT);m*S%fS6?pix`>p9)vz&gGjxg6f|}1 z?o%jzHvWtKK>^|6LSOzfk0CNd6{bOB>xXI{-q5f(%EgOywfr@Bc}yf ztZ!He>t8ytoYjTdS@1yVVua|HVV$BW8F8nybjjc-pgF4lAh|Ixhm`{%0p$4nU_ptB z?)I4nsN{6=sY%R(cJ^3_D9s}-;oXK7Z&UR6<$6?gdoyBc(5bbB8NE#*R<5H~)?l?L zjEU=hIBj?Vo80VUG5_l?zSfq8xF7FdD{>)1!#aHpdUc$=szxtMxl(5DWew(57`?p^ z@#oObWqKYR#hIXe1NyuDdL0#;x={v1hD)mpICK6cA?1F1e9vW{n&U}ZyyKO7@GdT| zFlDnSI%IC__dODionyyNsrFgH>Tm@%gl-)bZb;fDP@KoY8C)1b4?~Y88opKO(5gr) zT*&?@;24+Pv{rz3(p=R|O=a*JBRGj~UoN)#UdvXkueyb^*}Rn+!q?P$(AKfeWxSx?UCMn4y%_P-nJ1$A_{)p8J;i_bUBsps`q1)5PrBBpnl}ZyHZ85$nLVa& zUiGa}rS)oKPA)<~46EaMO-Igj=Jh|0w7Uy)8R5783Ya7qWc;~WECYN7@;SpB{fQ9cL+>-2H9-b(k)VXfZ@!%K3DMdt_E9__=97lB`>E*TJEV?qPgk!@2M5FL>lcKwG)-k~s~@Ncd_p9q zWFqdsYrgK*RXkQzN5?vj`|C|NHSnGnIBT17|Nf&3gsA#bKU?u_n}u9DqG>*Fn0S0vo1Tk-@in~=&yFyvb+WMi@)j1mLun0>b11K z^BB_kKK;A*etpX2sUP3dUYX`t@l8|}+Y5=6o>jF#B(~)hIIos_l!Tf`wdW36lz(7u zIDeUZm)_q;;cncGYL9{f5rcDVUI ztej{1AL!}#x3>$V@5bw#Zzy1|+6K!EGw?RLP7uG~dSgM**T-+J{a3N^>=x#Pm6dU= zFwcLzRFeti^AN-DZIjCOGg^udaLAI@iO?&g@#+4-k(1|@hbMd2zV)zr?tYkB!DVod=3 z`s{1>B(Bt3E_V_|m5>(oUisf>l~289@8nz6*-LL%>Ybet|MH;f{sZm*Qf`jFB8nB? zb=g6@u0AcZ3B| zn$_H1&-uuvpL<9svEb~F>6oMUUWV(=wMlDjpBelOZ+n}M>?1xcr7l}2&((ER---dF zb?Qe77pDsDr3PLNGr8;h(VBUjcQ4NFaZ8_S=$7gNX9DxoUlZSAf;CmUl-+Pi?(*zR zNjN?08i!8^ZJS^;`s6)}Z`oZ@&7W@rW0hy8FzK^aO`>c8n&AY70jbcryICQEEdOQ8 z_H=W|r8Z=&m5*_1R&ZFW%kkunnPt%8H;Z8Ulwyw6ZV2hdahi~ZwryG7`+_!-#>V)} zq$!*UEW+#-dXOdGiXiYY#hiW|pv#6+Xb-`V{dLMzb^xcSx(KtDf-!|Rl5{oGj)6#wl=MJ2v5pd2+T0Qv z^xqCpGf3Zu*UtU3oxe9Fu=TqTrZ}_`_ z7>f6BHZ8V5j8G(_O^qBpsmcxL&50-n;bX~VHZ0qmp)O&WfxLPwV|N|+kp)2WBSdrW8>_@Q`o7!1Ei z4{a=H_5dJmvmN;R;E~gSlOE88YNcx)U=Td5`!unWudeL%=L0iSE#>mrgpwtk7(C9LU!aN)t%EO5f$>`St{)}`BBHFJ52Z)2I#bq5D z5*;}&quPO=i6>EDnPw=;G33K>^tikeo2kCU)&FiAZBQCtWQ__^^S4T}MhNhv4px92 z34peD26>jmgQ@S%1qA3|2lXNssudIZ6(+7QB`FoVXjrb!9K{0)Pd;v$>G1WriwR=e z20$Nr$gtWI_N>g)>jMV^2VEEv{ye{y9;a#hKM)hOElCEP@#lNqaYSD@A#|)JG!jva zM=-!)_zK)={rT$I-7&{`6NoB#enHFjVmyaU8Q{^+BIRCpnRfNH_03_s^Hf}5 zKvqilOrgdWvZ_EvW7y3Bl^1Vq{&#l$ewnW)L(o;rnl9J-a)#1 zUFY6KQ6I2oHfe!#mWi7|27gTT&VYn}b#>Y8!KQLHiL|Sv>W)wK^);FZf`Q0Z;udUG zy%c~#d{A2Y=Ia~YD|gdoIXD|B{n1c$QXU;eFy&0({EAnq?Ob4zchJJUQTRdE{5b7= zCM5k5$)zK{10#NLld{9CZz3+iUeDGydpmPSc@6O&F0kf59N_yT@e^Pic{t`#}-mtA=2Pa(gFM6juJ{L9()-+T87hrj-%Q$+bDON2 zRkY6Z^k+nV)kG@gP1TE{^XCK=H$rW$?U7CxG&HgK)Ehg85PGfOuWmIyYpZO|$Bn1hr7o{92DH#-?#S1WXa7LIzW~qEV!$pzZ;7uE zljLOQt#L}jc7~-BF_Exa$Xm@L^|w-<`E%AC6>`k^zZN?$aA~|pnMk&{nrfjorAA1- z{QqC$YNPr*4}0UT>kE373qJq)I{E9{x)XQ$zXPyG{~Li40Q;!W%jhrSQX}Y;3kH6v z0OHpwu7A1y3dEMiDJse*6&;8Z`v zC&C|yYQVayt$?SbEv)AUV$jR6vEQP1tGP>oNLLjcKtyF+R*W;%0c~kqP+L>nJCNWj z>AF=EF>tm?3M97Go2l|@#7r~5OcOWr{OY^Fk-%LCczYZXT_2&kE=SneA}j#*!cb%H z7yd|ZdCa02XHApgBP+bM!L!CB|DR&Gy03de_l4{a{5^%uG(#VjP$o-_G$!9a&91Y_ zG$9omhpmS+7$Yb0T}(rT*7*$EWZaO@Jn~-bZ06iQP|kcEtk;?LxPw>IxMKPN?z!Eq zp6+%&(8f!WfFQ0BqEUAKcZABxY2GsLoGjOg9gb|q`o$VZ??zv5D*LP*_XscL#s zvp$*aGo?4by+g=rPh!tC+DK%0G3Df(VcGNr>qX!%|v;g(1{JF7l>s#$7ZEMidpk%pE(km1l>Y*7r66AlYF^iTh*IeQ@@`pHT1W1KP|XaC|7ujAVZ6cs zQBb&*a2NzspuuO&J1kLi zv;uH?PY1eM8lZL0Gwgt7qW``eEn}-@+?)eJm`{UWQ9Ub^b9XTo(mfS5SMh7a$gC<`JmpNv$q%Pt5 z0=YmVKWYLhGmd;JQ{*)>)g)Mi=toh}@Ca0w8lL@Y;0>^hopNlpTV{5lvYN^!QF>Mb z$z=_(UThw$Hhb04$Ke%J+wko@+H3%UGyc0-jFYbKx$t9VV)t6YDGP($YXSjA@xS?wG(b~TGfX9 zSu7*31^FJT@27^~P=$mROYS>ZOAsXBwL z!-byAiAI+*A^^mC@SQ7qSr-6gwGJ`mo5O5rjlkJ6EtXmT`AeO#N!Z`@jRvH*??Gwx zfwu`cIQ}$%E@SZU-wch1!4n>h7?c*Q@X?w=K2BF1#GNnP8Xuu1(IIrKkQVi-WZ#b5 zAwCmMCyj=k?!=gKn&Biw`7panAAaim7{J`&P?vZ?`6H~xC$=TI-bmzMABoh8Jx+4q zGz~NnO;lH(9r(ddR2LMEB#nRx*R!+c5yawcpz*zsxr)Tw|IKUun=|9=Yihir{hSI;Gj`<5HqEieRlM}DBJV(#ueP(jS-9l9O+@?bH*%;6MS!gR~zB7c$pRW-u-gEgPn~jNok|OL}UcAZn(v3Nn@eP zZr-m?TP1Y1U-K?-USxh_x=NGc@2fhAG&PI&kms)C+^cOAb~O%nn-a*n{kSj)r+R{l+deQ3c2gqKV+*-%$?JZNtaKWiX{mXV!+0v=y!Dqsfqr)H` z9W{AN-BdSpK_?Rim1FQx@tx_HhZg1df7R$K8p|ay?t2I(-Jv=aoCAfPzrJ**&*P0- zYN(8q2QS^K=QU9;(cb%0`Xc0_8t3bnn@iw7Hr>HU4iU`Md*a!c$(v8eR{8FaPNbCb z4sO-tD)yL^WO|)7D&Z+*zN8s0C7LW*>n1Lyi51)o)N{O}^uE$iFEU%oJVi9Md$^_5 z=%vk6ImSkeeDg?s8^;XQzQl;64IfF+5-FWd;$w2FV@gM zVS(iAB{p<^r0}?Cas5G|+Khu@Y!wt4bMv^g{bI~BbiCZTh%_0+-tl_^gf1ts=Sm%1 zJ=Y#O`V@Hz;2qxtnN5e-zwP8buc?AjNY|x(+(ImN^vj$HfxK?NQj2$aA?B#@@Z{Rw zx_}{QxIeYp?qwV9&-e4<%|=tX;+N!P{6w#CF6Z|9(YHTWphgg@7iP*K$X#E+}AICf;WH0jn zadhtSO#goySNf(RDjgh#ijtgiHq4@O3^~g&NkR^DwwV=4#GEOIt#X({tb;?2a~>&+ zVL1+?Ipk~(v#tB{yZ^+42lLtc@Vc(&b(yvKqJEDSOMSU<>AB~{XU8tCNb-Q&NX~T4 zr8~EaFv<~Yi+hM|5(I|!UH5H=)`YL9tV`TWX>U>Tvvx@A+&7znzIJpiW>@ejrRp@E z^g(^vi+gwi79csb)DR&Q@h*fL>K6sv*kTe`N+VIFQOFsA^AQRw&(64cyLoMdy%L&M z$*vQ5{FTqQ@2Sh>jUkXKniv|j6EGuv&hxwNr?cz(e-4}GVx;9NM9?9VxdHrR6<2qC z@_o8O@>A>&b-&e>xgI)i&7EM8^{bPdX}fK%v!rl5%6xD>Y@jImRd-y%^g42596%&` zy167AYs-d0h!)Y4-A15OTCf#Yy&2S)>@?5o7ryUVPV4TNdyR68g1ZsGSyn3T(^y0{ z4d=)FZ4ZepCO|2@)9(9u}#sesV+PQ)Jqq}wwR zbJ*&oiemRnNp+^L`_f?g=o0R~l3KXxR6M~#G_DiapK7$y!UACx#~H897bmG7e9dcr zKSBn!**wSx42-=CTw4fj@E@FKQ-9^(bUW?>Xw_#|v*a?fVd7Qa| ze9lZyqmgYoG#wBczO%^0JaHXps2zi-+L3*|OLkpY#Z=QGa&1{f_&~{;pLY1@q6~Pu z7s`%8&;T2m3>3Tn^R{zFE3I^SKVQOQWjWt^-3gQ>wjQ~%4FDtz%yp6}!RgBW4lAky z$zVz3kX9);udr2Al@{FENITv&9(otX>SfIB6tgUJ9!;Yx=v47)F8CaF$EcS@^#3i! zsU`wTN{ZX^>RB1#*4?%3UEpcj{%Kysoi^l!lgtOsLSSalQJLo!JW}E~CPzAn&cOKz z^GKujS?0)1i@G70@iK0)B-sVJY<8zPCxn{eMwT^o_fT6YDOM{wvvgioH7qBnyTsR~ zK;I;_CsOa)4EngRUvYTtQ>8Iup0Wi51Kh8tlkq!raqz9IN6J0JmOvzU6$;h&Irq@% z4_NGr9z>x2BAq7|-5hyN1*?*nmlv2KXSR8?S>qV~WD30lZpsM=XN2!L9l%Ol)75&O$kc z`Fd7jMLA8p51H^t<>A_Br0xoCe z3TOO4-_}uXxN#}-nPzJn9emHMwm&SE+``4V~axj_ql9mwTUw6JM>a zJrqfj3H8D`sD}N`P7mhW&FDM(<59i-RU>zs)1CL4l2!+ZOY@pf+glXQ^!eBnCUktG z#KA+a7}#7nZeUp^lICNX@8!iK5UCbg+az3~qR{@JzMCs#)j-3~|4T19FzN~lX5Ua}_zmv}W-f`9*e&gEO_j)V4|zTZ5!di*p* ziMBV!o6yU3TjP$6z+m}cy!oNAsO8q(aM*;wFJu1!LiR|^Vf!RgO+d*zkx5^k2! zp)2#q^UH>Ol4YN7nGoerKvZ+>Sf{&wOjM7Wc0@OCd08@{g(b{%phsQ*)TBN8Q)Cov zQ=p?O`Z{nRE6V@O@$MVJSZoBr&OSOkbto!v~Bb{qkYe8YwlIrUi;|rcP{wBUMX8r*`dyDTK-y;kdJe`!$BbonT9eOLx(J%ra-=gDns#6LM zD*S7J-??_m(_<(dJcp7CA%akn=<9jY(nr{Tw|C|;mVbrP-c1jGjj@p0G<5F|jE+TH z)IHs}PZ<78)b19Dj>QmWej(-!ofKCaOQym>JYH#gh^iQfth})~&s8eo>;n^Z7aZ%PqE|U-pwrpW+!sip@ z??6S9<&%aX5%UJTh_Di_@66c?{KH!dZIa-*1B3^LHqI?pj!f%G7A%#y7%^&Lz;_Iy z$1~rw0P|$lqA$8)FWmqvKtEzTV#c7@PAW*}uwf z{rA6|c>r*|efyBjwZko1>==%+@kZUw!}X(;rBgN3#HI_pKwnDK7jXKlnSI;(xRW=9 zas|D0_47=^wwUF72HWrF@UQ=xaB52^P>XJa;k4_kuRcK~HM5fjqjT%KFQ&iQG&G$! zk!)y}bxS?#z5eumPP$C);y~s0o>zgVFRJJBdeUnRM zpLHJ^TjJN=BH9fV-lJ`u3lj=YFl5c@to&g~^-gAu?T**FDs9uBE^_2p4(kDJc)s4* z6k*plwta1d3nLikT+*w6fpFfFSBFRM<{1OJ-QHIPU1!o^Y}T_@^XZn@v7_ z_P;xp&$K-31+uLJ-_e{TG{*pLQ3#1YArEZY)wqF@bl*GqWy3$bgh#B4V-n5JUat3Y zxti~3dEfY!%jLX)@Z!9m>)~-x&}o#w;?()|k~H7<3nF(7WVLxM+f`pwQ!WTc!`D!hIync=)~wdj?Y>ZHie zx8a{AlEWh}p^0X7?l6STwTJgxxYw~UE!R2Y;&L?`yPZz22|O&&pu%G_Zlh1(4!Gye z^4-`On2t{!W$V9FzAfsFF-DznD?VJB>dVy@!48n~k>=Xg74sL`p4>q*uNw z$S;R{C}{rfJ)W&=^0RU0m;3WJVS0)y!J24J-z-7@US>xurfLJ{$R%12&lB!$0tbWuIh}s$ogfiJFxId3LZgkcTeJUe0(ER3HC`+>&dN~rj za7So4_7{+_hcN&z@mrjwQ1|vDmzOy=v#QCy(RRQFgls)*5Qt(9AjdZOdZ znsHG!8wrIdE|(3&aRB6)x2|$vSqK=~_32_$MlvuHUO;#%ic&151&lf3@e*^>yD&)z z&x45V<)lrOJrA-DC6A4A!!N-lQW$JEhM=^tG~^q}GIj}yx9HB1jvdF%C&dC|MKPsr zZ>48OT>P;qM08937Ii9PnY2&a)ERViLo%6{t-iR(6X*fW)XfPuAYH4Th!3#di&l*m zBlH3A`|?^69yEA0%O$d)A03PK$*j^rss>z;Fu%Q5DN>@n56pq458>oRPsR z)XjHuH10Z3=o-nI8M2aOnY59v(t6QjQ+k5=NT66qc4%&z&a>RDLUe_DVXBFQXzKhQ zA>#X6(Kr&cHid*Mi^#7k5^REdgvUr0e>NOKgH0Q80! zMTakKf~_g>3l3x4%Gi5wFSwsaNSHws698d17QiP-&P+5CLeNEi`;);M8(3?ww}Xd_ ztg>?)UjjdVHwC*NKyi=c$_Ci^A<}GeU~uio`h|SB#C!09@oIE_*mu6^5a{(e zuhQ-99b(HsGW zVnOk#7exXM?LfC|$JXBLhoM=qJ-VF&r6hB2I0Iq<0iFn8;7KWh+?-6gD;^zN#Sagq zWbTr{;8eqn z5K*+zTE=h$F;E3lpnP0YczzSCbBG~jt(5AJ(FS7r3+piC;9hlH>k(S0jBOxb!--N_ zIoaq`QBzwN0102{&ZlDtX~3ilsI?d>tTKp{#*r}=)=3W-Y#A<~Z<_}!B*t|`kLY^T zP-oMd2kceiE+8M*4OStIP%E zHbRZ7`R&`x7SCJ6vo!AY(iYhkj8#CXH;C+qGc*~?DX_hJ#*3{CqIp5RBt#1_h}d3i zB{7)yChIo$pVq)D71{n0;W=*015~}D+Q3^LNuPw~>or@Y3!32`rM)gc+dPQeVMpQE zH|p9CXqd@Yb3<4T-WdrMc|3S*|0_lMND$}&Y=Unya(VAUZC!1J8*#oW=O5QI^Ie8L z+4l<0PnG3Y26!Gs02K6vQar435ykwEO2-uJsclvr10OkqfT!SaWZaCKEz1X3Wc+&R zj)PzGw`IeiIRw1aBZ*946inD$K)`9suGts%PFsY^xH;`mT$=eo=3mX0295WhR1^F{ z_K&B7#S5`p3{Z4@qB|t;rY;UQixTG)juf?NUWDcIzh$8$*0)R2(1}MiNqfv7L*T)P z{L^p_UrF&rxxN4Kk4qkf?`EoxOg-%ji~!zS7Upy7L6L1BK1vT2P$4xu)^i6@$0N*r zod7?8#>l>3o5Is3G4H^)DOSUh`ycXbbJfpyYu$d!R~&j$U+MA1T0;CzF1ut!S8%Lv zMu4Ze>iveSRjr-exW61r)FTKB+~|z@7m9~V5?@#0r|ML{M6S*3VwEqqjOyrJyWSX*`M7y! z{mpfoQg*n+>aRretgDq;TP?2*!+BR&BaOedmS@XNaKnKOBk^_leyt2&tEpk2Pdd2fhU`Zd4fA7^X%5BWZa>uWi;_Au8GC}n}7iGRLu2toXx>Ov~lXw}i{Cr8} z7svziF8m1D96`rAhUqOK7_?PP2Vsvd#piAyY+UC6HiVel0%|^PfKR?y-bV@$EP@$b zS0lT%;jqR1-FNxH`MVGl+Y4BCQXKUy{OZB2!~-eVLU6wUM0=A#rc_b(7sqC607Y$i zp8BW9_UkjFR^ho2ZahztAbQE1YceBk-~AvYVxN&BwuhQw6dinQ5-X{yDEpvp+jM7E z%DB+bI@Ph`R$^~z_V<%k^Gds4nJI`!zvBB-J{p@J)z#1EXaWAWn?_GRR?gKoW`4eS zop{75qw%`_+*U3pTE}y?f(nZ0=xk9Y*d5p>)J)#Ge~ozcSb&1q$4Z;jZ|Lu>PGbhg z+KDIlx$y6Mo*Ryb}HiW&yYnpOBW2D|9iKH1uGU#WS-w1P@=_mY`(; zyFZ=9eo{#C-DO8HPa{U3HsR;PcPmC6^vFqQs(A~6lz))u2toeiBK=RivkGaIps|3+ z68{3Fn?4K_f>U!o0~-MJ7#?H6h?*;-{06WT3iK6st}+seg}yoh=M-#mogds?GYxq=}rVcU%g>&bPLc%u}|rr=3vytq#*Ce={Pa1aArs=6D2329PzzWQVO0w zx3g;Tji$M#=X<+$u%EK#2M=HK#M!j&h?(DlhpeTb%-`w^GPpH$c1UieoG7c4#3OMM zKSCFYps=--QN%wkSE%A9)bYsJ;OdG(&eZa-8xqcLi^T+LG3Vf6z%SL2=(e>#V4M;R zbVuO_Q}j`NB`tWjy?`Hw*%3n)e6_8J-6jSdEM9AHy~io?*;1pM+K^Enf# zxhu}z+Yw`03&DA!w<42gxY4*)-R29FOT53LxyA}*FfItx2v?_3!vfhlL zq*yednx>EmXQM_JyP?@e^d&<)M8HvDgo>KS*>a4Kav$-P;{@A^8ge6fjzuabxVs4p za7Paj_*NCJY(9;$MV9TIV84kow79TH{_Xwxl8&F-sjKKd4EJ@9R9U9|n0?HNFLS40 zX{3uA+bg-8TOrAgyB%ZQS+nvA*5`3EE7oR|5Tcd6=T1swK59lChB z4LU-NkGkbf6X4%NbTO?fyrX4*g#-wC_ZOX0cU&#-D<7}2*ZJUb>`hqcgWq7{oUY`I zNcV%!<UbRRF#`*Ub+_6(ajCtP~V=L6UxCMJ8 z1{rM_Wwdu)Nf>b`fMtd}Sn7B;jfNjqJ|>y?SeKAecZ>Nrb88K|OkL7SfwP+HLe}sN zY_aUgnxTV~CWI-SD zLbD_OGzFUu{TW;x`NMx}Ug4tj;Rt07MRO^hOjJ`!w~?l9opa5G!Q+?Gf{q{b z(AK)H)92IpkG!&Q-n2hju1x4mCp(Ror<9=C0Fm)HM?Q60@#?Bo({mzr*1ypqKKk1GU&KqP--1!uq94@9KGQJ3N3 zvG10t`B%-A7_{Y-0QY_f@*1&}_!)QykQNPR>ZrH?Q+NRK$J!U*^dC*2+$$y$_Sw+8 z8>GsMbP(XK0~favU6D`)-KMQ=-TY@%;8Q2}2u*i`jsqiTr|~+PQN&sb-W=-|Kwmaz zM`HoY`=21FsqyLM&i5yeZM+gjXCgiPThonu zglHh~-z)t{$iCz#e^^RRDlExsh>nJ+B!w?Jf6G^w5RI>V(e(=$7u(~mhc4K^xIR!} zZkm0s09 zJ7h{n${6>~`Mu=zDO1v^C?$~;Kt?$tX{`O*X}k!d^XnpCC-2H-%EP_HksGj`$rBS( zEh-8LCx}=2Sp0Q|l1gn7E@iE(UJjL&66`*ZikZFI(WYvC!tCrTykJcFTxcvH`_*vxDn?O*VUeV~%j*k;KVwO<%);&Xb zTu$3l|B$^EfAqr*FP7le4r1e4x(k0_CqV!x7P4D!`FdsQjadCeNWdAxk50r>5cf}5 zbG?DHffu$f?4+|(2|jD1=7R@a4G=~OkrX=?8M&t8;{Hy@ReHT9QC8cO79g6i2o@}yxfCl-$pU*yipU^Rs=>5IG!63}Xt~x_kVZ(wYsM5KfAkjuW z*Q8d_siEu`QP;sNiB;ORZyr?8xpO4GcFXfbx~X#MzQqe4!smb$>*=>+D1j&H4GBr< zIaAylJ8!+T|C>{VxdOY9)r6kZ!-*SgzuiHm&z3g|<}U=DM6>*3bNbWlJC3ZYZ=|SP>nyNh-kPB>LW2M0Jk>Gq?c7 z_*ics*(C8(?F%eH;8l}T$vbBcp1zHv`3r@hn1Qq;v3E0o|D`s5#eK&9^s?jJ*UXEm zy2^W@B~IXOWvMh(KwWmhsA0M8qz~(FcRY-xeQkm=MeNW66~~t9>|7hM$#4tS*$mo$ z^|yz0DPHb)6!n^7pZ{s=N8Qy)CPEm#K$pojqo>h!pvVAtG5#RJ! z>rk($pS?a;Qd*qvkL~?N%Ay%?t!fdB_$(Y6a3V@|<6%x)$+o9MIJIO2s)!Y`rV52d5z}hP3av<8;s(fwCmO6HCNObGWPdX7_SB zX`F>xJY z-RQUD*oYCFA?;m*w*GVn>fXswh#BeN`0RgNdey^!3!gp<)`(}w>;L`0$0C|Jm-Y|O zNffcfHptV2lp<5qiKx5l=)y>_xZT^}vXbPA#*oeKjH;5n(#A*AAH&v?#Ldkj44Q$Z zkG3aRCKcbotV>}@hO{Nhi43C&?t-cJHJp5NLn!GNTSX13(r+w%kHi-=0q6K5LmP}2 zDrVEDSK?A3t&0iAPWnv$0q$R^X`TI`5!eytD^kXx714p>}vzOl24 zZx2cBJ)aTdKYsYK&ufX-(PGXkPmj%fi&P`=whIYl$yfbV*qOeT+=Ucfr*cl16;DE1 z-fke;kGAC>(Uo7<>W##$ww?sMa4!`fr!%LN1>S5fI%dBMqkkuJ7Vz2{0&@O$ zUbStAADtM$xY_YHTFz5`Z)x|T!m>=#1I%5SgR@PCOG`b@Isf-~(6Z}JdGuy7w%WPU zrzR*dk>cd~j|*q5@nhcd&9y6|w&*Tb;XJ7xz-|4?av^EeRx(*2ow1yB~Vjn{|80x4>li{?9x*01Ni*9xN_xo`2E zzyAH@<$T`QW|!bYgQe`Y8WfUA08lUm&ShHoKI*dxFr7KloTz+ zJ^eWT*HNQshv_)|EJIrEtstdf4(CV|!#PgCq$$L?j5c?oNl|TV{@R-Rl~*w9GO|jpuNSu8nP) zvG8U4R1ur}&kkD0r*7cDqtXFWCda{Qgth_ia6gBnurr6I`55#KkQb2l>A93`=U9_J zB9i=3Vb15?D!gXg4fF1X`72v}p}bXl{IOwD ziW#s`*M*IB41wFS>_tLcFRlA=ey?q_@8}MwXWx&xz4={9F-KH=+05~L;?kgjo?POA z7pm7S3B^^T_;S!}_T=$ZwE%9?4FinZl#e(l-G21Hs*g5@U|v#j537gIox8s?J|$(X zY5`*lLCT#gqy~tp)`fTEfI#j>l_jbjNmuiV%{=9eOEi} zy4Nu(r_I6ilavY>_v`vWFI**gFZ}rQ?F|kdT82+BD6qB4vvj*MYZ&J&PYb(aFVkOY z*#`3$JSm+9yCP!g@NFo`rZB!sb9~vsOZLD-O`?5X6QPwBj3P~Zp1-%L>x@W;%01Xx z>%ac>FgG84nfyEnrNmaEOmcKsH=w*x9#`UGjHO?yy(t=EY3L*kR@+TIyfT%cTA3yV z80J2jbXI5FH}wkK^9I?!Fqz|faby}@#5Wzf3YV}P$Ek6;*YSe$QC=POhJteuaj*JR zlCH?Piuh)kE0vvFxi)OS>-(!5XHcWQcH&c}L^}%Y?A9TSKMFhQ*S7(_s)_#iK2F)5GLq1U|IL+QC-&M{y^Xo1w2n6X#N+k3fTHpJuIi8;sBT#h| z5=}_K>pgsUJ9dtHPH1<&ho|l)4-S-AH8*|u9f0=Ci8no1hf#`=vZL^ST$_r0%+;um zm}H>CZPTwcJ#yBQW_l<-}&J_cP zT`^6fB!-&vj-hrOJic%f0vE?({k1^ylG;zf%S6;I#@Z?z=5$BxC+Ga`ny)w8>5q)O zIMyT73sICan`<{(%_0quehcgrP@@0yp`M8nEcULb?A_2dAYWbYD(Lt=(h#1!EmM*x zy5(^~m?5LE4bkTa;vB23d@eYKWt~kI@(2z1EfGWgYF8MFhjt63Y!VWpLd#tgD&1$2 zT?(60Ouo&mtg(!WAT|AE{uQUl)k5|MvU)&RX1Yw(2PcHYAE%l4&Pt0JiB4)fL2$d+ zt8ouC%jWKqIcq2%?pI9h(k*_}Kin|I&#nYb%p~Tut+(#X^%oM6g=;KjM1xN=&Kb8UlD z8I=1oCyr5P`n$UEgDvoaTZ&U^>xcaYE{mYzKUfzn+#vEP-%%Tq32@(vczWgf*%3vh z-6so+_g=GCWhO%=t(Rp&(UYPFAOnR^0I<1o!B*C`YUOXKPj<7|?G~Y{gJ1l6??>*o zV@J2T|8Z3-CdhMCIRn-%EeU}M(3dQ+>t;AHYjY}nthM$~XN%anPfW_mbY-8Zi~m*O zy&OD!8~<^UMP;>}c%2ZkqP_@OSwO*m`gi5h%d!5!!DA!W{3_*VjAmk{&e|HiPdF`k z=R`TzA-^o}Lx;JH-nlw!QY{Rv)C0A9o{+f_4#K_=4W}AP2WBEE(Tvtm>B{Vp@aS+yXby7QofBOE-Uc+>cUwa=pt2Ft z+>aujeFk*>(y^SnK$I)O_U65^$xmqnmpcO}H*%XmzxdDizkosIAXL(18H6w|8A#EI7B0n7PDq=~DwW&A&vkW=eRJn&r<$t>X7i7Ks-oztfdqbF;9*eaB!|#PrA(zPuhubk6aR4)5EQrgTDH7VyY;7L9dA3Iu2TJQRNI z0oOFY);doWil~Z{dO#PN4h4m>q5U#7i0JDFs5}=;$|?_DzM#gqC2=E#=4U;vdj?uet76EDjPy-?={U~6H=O(_-D$_auCVPy5s+2XmHI9qXW($GL4aoWs*f@T& zmkAHXn()JA05j;~g613&@>093TRRC$%=juH&~zORmqjj{w=@e1@rW51T4!L4d&Db~WLoLCi-{^(V2~0hRlqu*F8p}9 z0+z%!dUuZTKr0YBDviIWaWig zDEdAbA#Dy&n>lcXSPYju21k*Ud?#HY*tWzJ1DYClsS{) zEZ8a;lx`4lWO{l>crkxI(70QFdYY*?B`Mz{7aaTi8JsSBTw{!c3|m~LR*}p?1zfb& zYAKY;mets=tq_e6lAH7CWek*?7zheZ844zkGeegUp82eIL0akN{KtC5B6V?ufH$!g zZ5II&6e1*!+&s1bOK}|{JNh&=E_+d&Rwyn94hXmH)sZ~6zKu`cAl(pS5IR4YTIUZ> z|4$7@ZZQ&aefN1B6uuu<8;u)9MHWw#!Q*lM* zz<87;{W+&S`b_S~0YH*I6*_NI50Ipp3w(|xWv3@WV?_g>GK>bViaMMn5cD2ie#v4N zLA@&k0BRK|nztJFaXW)wdA{H7>=2|A`bB$c?~H9I)vx);5(Y35`y2uP}?z`E&k<_Foh(l^MY{qg!tzDl_+W#dSq zrMmYqQsk=pjm$-B<|;Vo7rMI4bQXW5+-_h~I%G9RooR?tZ@CU689_;spn|TjqCICa}C{jxTQghtM6$)^}QXvLkoP2Ullaz zY^4JS3-_ypYn!z3V%cW;lIHE?Gg3AQr|mQgZ`&9RsvS!siu?y0lI}RrlFwPG+TP*% z@35uFvkCw{{czn7^yD+ZpFRip(>pe3%>i4c&0!gSW4g@*F7+8!Gd6- z56>XZ5DDZYl;crpKx2f`fp!g1O}TnuTdDNp!tIR3p59iTm|&K3mN)o{@gh-gA$T=- z1&yrtd1ge{)QJ%&iI_%@_9HblFIOAOuMrw*7%c_WjibJEj_916tjf>;hOgK_yD!D2C5i8? zLT{nL5g2L_12hey^)n@9|?ce)RgLUdMU8*!=1KG#* zSw&QA)7aO|;ROev1EG1J1tBoovs3<8ZHG0{w*c|OH=#t#AxT1=4?}H}Qwj9?vR04^ zk!3E$Rd_dZ{1$oZ0-)vozofhSjxH7YKk;0eOs3#HaQi=b-4=C8Kx#ENdDRWbZ4dyG z8%Q;v|D6{&sJCQs4nRl(m1&SNeywn@ZqMpl^ynzNujJ zXbj-mfvqRr>Jk>?M}cBc{6#yv^aXqFtsN!`gDRGwF!s*wSX7O`7d_{hlOap;5@CON`UJ~YDfR~!i%;nJ$*TrG2 zQ#win>V)3Wv8B73Ys@f-c|DtK>|c|#|&1ykxpx&pKw43 zr0QES9x-jCcIfo!?LtXm1{>LoI&rs*B)y~^1mOv$67VL+zOF2Bd^a|?4sza2OKdTq z7+Alz0OXMH8ejw`>e6ujNP98xA_w6CJdZ=@%;=W4BphgqLE2h9Os0HwbczOMahM&x zVBr5l+9%x_Kf$wvjNfNHdFKUmow!a|v7owGat#oK5!Dc|ydUm1r^CesAx-ssU(w{2 zgzWMG(4z$ibz5TH!a^cNg!6+VHdrOS6$*XXF!gm>w)OAbKHT_^Tzb54>=}K9gpcD6 zw@pf=%|rEGsIgX)Fg(C+y~T_^$BYB!sUt0#Me8UYsrp>cgFn3}Rr1^>DBv0MkD+Uk$4~3ynh!7e4LuyX9#wxuMmyBh z&|_iG?fj?F;%mJJ-!d2a*9^w3Vi#I8ON*#u;q?cIeGc>o+nYbK`=}DokQZ%8En6H( z)tKzpTSNnKgS7WNVD|BMjGhIRRH(}S#{L|fGA-DU?&`E$VMn3wSCU3X$|CVU%=gDJ zkOpRotJ3n{pc{|OyzGCCm{wlC(xTKOT|X!ln&cB$V&~)=nRnbfy2tdsv#y6qxn9VJ z<1Pd7M?9p{7}Efx)QzBF;Wv3Cf5m2Gq#`YZ*H%cuxyGZo+A@ujinZl0%VU&pV=Wj! zt(ex`U4ZArM;R7H;7#Kl2mJ4J6(#*@dRn60$ouX4>(^rXqbYB_kxyGIyPBSzvj34# z9G6A?UmyvS%|l?|)0^}FRPc1g&kgQ2fm-9k66cv1*3~Jh z;McEsIq>9c@2Z4A%e9E$S+SN$T}#|DtlM#`gYpG8Hp|5=wWG{cR(k)ivD0hVpY9^w zMno{hrXcgfcyju%Y*)pTl?uO|!Ttm1b~EY6J5J*Ra0P4}t63XCyQ^42KxJ(RGz$!T%v z2B_)!9R{mk>GvGykm}%00xh0^axEb`XZwI~v4>L#yvJJU z`6z{;!}N9O=a^uM7_c-|Y5(GRuiK17S?@7-iM&Z^%K&u20<*Pezb@k^Rw@?$aq+M( z0(T?eqiA5!gyQyT_31#Jg#oHxi~I@JDi%Q}+=``A$mnB#Vnj6o_njUS_SZZ(_2?7w zHf3#ciNj&XG7sVtL{vJ0^sI`G+UpnHcobwiRCX!txxMfajmrdJ&GNI@yP^>neNDY= zLviPcnZOLS^KDYy7^$QFeh4AnRWtuWS zmzs@U&%9poJwM&l|4Hu^;cm+?lzltMx6@f5*ZSu-#Eps={P`>&`{0g;i!xUi9+qnS zT^h`8P%S<>vH1PmnRL!6-AfS?L^s~3`(=Bgvu-aKgd=+dqla~4=bIn-DWn~j6`TB6 zJ~-wh654Au;)p4L{COKGbjH!uJnm7IvB~G@HuK9nK`%DHI3Bhvb$lZIjE+t>^&vDKDTvEK5~X2=+Gomm8O*D;r$_I?*8PfY|(Mw zyr@pp@fIC`dluqI?LBsC_Sy;EsEqGKp1P1O!5uM%P~_YDGZ`*cTdTEqD#E%`d3w$` zOy{zGl@d&*52X%Md@=gRQY-7rE0S8@>V)l;r=C|rpP0ma`ACblzpm47NBA1!t++}R z;G{cCc7`lW@8#Z``8ZkH9xB`0cfHfbaSo3?s=`ngb44=>_*Tfa5~VtCgp9}{1_7rTy|jc-4BzgjU7D-d;meanh( z5#%a6ps4yyVW)+BHLpyoHmAJZ_>#YB<9J`Vt4G#zwchgcHjm~5`RC`nD6(mFlH{~! z8vKUy4*6k(;Hc#b^Yh8!{cWZ$twmd}Yt1#~`PR%MdCvFDRdEb)- zp#<{WcVv!}gy#Z{tjvA8yz(CK0@dqby+YkLf&>Vz@q=GoZvhF&I38*~e22JMb>A~W zq@NKu7*rk2n_k)EkCHQ)3NA*9hP!ltDN!H}x=-5G2!{2SDoxqsxPQ+Zz2usE< z+*kFnXz{0(GKw8-!3VQDYBqBdx2&)vSnchMk>8cfByQ&*kt zqjiMW|`ntjYfiR01~0upfBc0#%_L)&6N;wYfe zkN@V73Rzz3GeehB&eOYHPt~GD88Qd88TZ#4o5ILO9|f@Lufw0TzC69KI(lw$G{Nt& zQyv&sQ=gQaF>b0>z0?6pc(2ru7MomjxI^?gC>V2NFL*{#LVI#A!~EpO9$twv-Ym(weEMH$PcWKlgG=H z>Kc#M$XxrbiU*8w;-&juZKD`#+mV^S--|`8%&q%2tTNZPe0s0QxGXde{mCrgK*KGD zP_Za6Rp=@24*NZOTC;R#u1{S0?w!OL-1)z(tYIB!h&;pW^24AK!`d%7*TcRq7~?;x zrX+JDniHNjS$-hl&Wn2H4yq1s*YRA+HT70^X~#+JN1IIzb46l1QEw&~EU*jdlCiEDi1d&NzFYS&Y6$PD`<~^Hzo2 zyr>iBB!m618Dv-&f!g`IcN+0omGpX7S3In3Gt|lL+=7$t;@Bo6{lHpI$g=(DY-xtphK zy?HK~(>(qqtbuJs))k4c)*F_u(N-!mLwHFV`vlTJPx zjsJYsC_GYW`5PQ=1}kFmXY|u2&>B*lntWv;D{Ni2?3=rL^M>2YRdIcz6D9Hno{jtH zLpR%6bv)vrP7%_xJJ^rxTwIsGdV?>j0#X2Iugi>~BJK&u1t&uk_x zzH)^wRH40zN2D#SoFDY7t!~&o_2Z)+Sd%7+hI}RxN=_QRs}quB7gAGN5uot3-|817 z9v_mbnzjg}hM*&P(0X$rYxX;FOBTYK+b zdC4D!b8GX|=)SUWwOt=2gFzmgenb!Lon)03$Mt2?*6eC-9fzm6k+`;fe}!Qr>Ti^! zS<`rz7UzqIy~I^YJ)?d|SUjmHi`prVh{)m=a4)mVl8JQ^<_8h(_Vw-f= z;Nb1*qk9}j!SqYD#<;9_W=(RC%@;xR<1#tI1(E!6g*a1J>IKSdg-hP>~&k}3Ad-SZ<_-dOBw*T=({H+Y~aw=5(5OC<_d|_9Gx>fHrwlhUc##K}J z`w%*p2w`>q$I-P1GP(ZoIb?N?INdqTrI1Q0q&Cc`lS^VzQRGsT+|ArCo69Ms84*b{ zmE2=pF!zxdDZ{W>45OL34P$28`Mu}YKmC)ud*8j!^L#&7myWH3Z^?-|BWHxxTDvtf z&RK4@TseMzLJ`XA+fbo?&|$(WBn~3&X=qbQo7#aJKQFq}7`o*C9L+wSYIA$}N7Jow zwQQp!EG_PN=*!vqir%loKAT=^O|<1`PMX+p`I@g|$up`<)^LUW_o)w1QzPxi70%h` z7LE-Q-t(Ln9a1CwFJ-0^Afea1R&Teqa{GLUg*>;qTj;^9>Cn(9aXdv)?~>vSRE0^` z86*f6h{*}yTlXr=P<^|e(l9Ac@#FPN%p&Y%_~GoOmfGRrG%0}dz7V(REH-kJhhe9=zGn6ji(VLO;iXq33fnfsK zK6R?H3f$gs;X%jFmitCEg`ZfHbhkaLtgc^K{UWARoh&|Q>3loM%JGlgCXwsx+Gyp4 z?sA&6^1bmsL2oFMG@A*3)2nJ6ZRJQdWj!ss-LVA*KnLb$JUb%gWxT}0{@`xbw zl9{0T+2NvZ13>K>mu}p@qo$_Z)nv*!c=pW#w3KyGr@LFl)#}L5Qpudp z{MeSBZ^0ir=~T0GIZFHDt~L3dWL~L@puAsh+Q6;2RXvAy8Tc8`FK7ZC*}@zwtBZC5 z5F94{s%zf5VYUqGmEW)lZ4W4@X0ZO zeIA``;qh#WZ-mNr^BZU)-Bo{hI@QKfKW#0Q{5flNRZ_CklBlNkm2l0ox^dVs^JD1C znxFYKEsbIQU9P6yo_u0qelu153%CRx^?e%(7cPCpCI#7>#ID+b1ozbHCXy`2jWcXo zl{Hxf4c@xMP^2SFplZ0p<939Oj)rZu%mm_dGO>}Jis`qL=w2eB@GyuG#?&c)~Hh?UMeA#e9I?em(TKelKYUDRjwpP zjhHJ^8^oSO;YSu&syhUTO3-iURvt@?9%PI0dv(LaqS){yp?a(1f8(UZBYiOi=;D~9 z{~TbKP+$vd9H2JUs{lYi;ovn69c~4e$j8!K;UTb23w8$ZlQhb$6?4!%We5a~r)12d z69L!Cua*x&!<=Q8Y^wNyz};AFXEEY(7>)dT6ZW{%8Vpwq0naSPa)@RH&SGUbp`H!f zxTUOhW9uw9K=M-|M(r)?p^gw4IQ%cDNc3{jW2wRSz{c23tXtf=fQW?Kqo@#t5HPkC zHMm~PDXBT7K>%nQo|ig@Yi$`@(9V@&iMroy17q}R{{@}0+ck^5#A49;?1fsp;RuP( zvPj(pMZFxuF_X09O3>D*E(wY`8;_y%rmxaTo4uhX(lbEu9i23%9xjrqFC%2o`21*& zD#aZrHjaUT#Zr$x>EWy_dZt-PIv0R~)rze8h~Qrq00Kz|5Zs;rf@GKF2Us&3r~YmU z7AF8+M3_1QpO2!tpN{{{le0{tFi2e7Mv+P4bSP4F%M+ssRGKVVDmnb%Q-Ns`;+6Mo zp~9aLKd?Hm@FTU1KEjHGYx7pXYEm$e1>iKqXY8yj;I7Z9 zyZ?+=1Yb=e0007(D>YlAH~b4aRQcQ~(@l-*0T6)+>e3HV6s@F4{qh#JU{yE}J`p2r zMj+>WEsev?2-AdEuR))+3A(f~iQ-;>e(r01LaAjMs6HK7H*lPhm(lWp?qvMr)K7fUysxpceXE2d zC)JU>kwd1N(;_|H!aBEu#@cRX?r$aqJIN@)A?)>dLhZP)4X>`jiP8e}kW4LA_)1RxTT| z0QhHcN%H0z5;oBuuuR$eQq@nv&nfKQK20oGKqb?0exTn<1%gQ+XJL@*n-=aFBkDD#GLJvNMwr-8E;nr=OlG_7W z+K)7guO(Bjcf&X&kT*W%j}E9TGc%G9f_ezrh1(L)bP_w@`*Y@Mo!na@=C+uDDy}ZN z_W2}#lW`V?(P)~?etc|#00607!L}f5YcQr>CKL&4Wt;k}fY+Z(iUZB|x!O%CZU5;q zF1Bt-h{ne?K0(Nj-qJW$>gP~9J2QMFEyvB!=J}z0nIg%y(xlOiHIsF*FuPKGT#|1T zyeA5yYdO4V>O7ebwr^-c8mk((-SG1hWim6o>gzr|R8bpNA-mRecIIn8R?`uqC3%#4 zx~xYGew?e2v~Pixa&k#)C@fy*TD000H81({Kucq#%^|~cDLY$zcc1f=YCJowJg^U7 z3wQ>`%Ha=k&K=Y$9VpZO-Fdj???UZ;!=ob=!Lg0EmJKh}j73d`e7N-PRnf7UBIvn_ z;Ku4qZsj}X2c7xvTj%`LcP-r!R`6YPdnk%-<2Dt(dH3E8be9U(rB(*r@BD-HSDEdk zvp3$Qd}B;IU1S!$%XG(-p4@d^^V;8Onitb{dHtQLy#q*q1p##3ae$gDKmOqF>sLUj zTGkGl*RQ4RI-GiR$P2HPcHU~QukwFXozs7mUE03u*AABtrYx!1TxGI8ED8CG@gFYa&b_iyH{?N=#l_!budP=41al2ZDBWB1^e+*$?Xwwd6iUt2#;Se}siuaa~$| z&CsZ1U*)GQk*LvcUPlxBv=c@XEU+LrV$4)>0jhgWpCF)d>FIMpG!0^tY(Ys?G$6Ox zsiIR7RDefQ?PJqlK~Uxkf%{(q%u!-xb2u;F9F^oM3rDCUL&01JlO%gs7orrbSqsxp zD44PS>6L!VhXB0SOE|Wwgqxx@EmA^S0J4L3-osBH%(GlYh8A|nZK=kYdcRs*Zl*T!Q3Y5cT@d*7<7?0_EHD`NWId-IM~#w-QUbp z+8g9QRCU*-HHPII|JvG_0sht}CtH7;HB)&ldPcbj6K$#M#>}+w_}<(f>T78)(qhI0 zWQ(}u35>3^zeU?)e_W98Nx7BIi$H%;!OjtbY0?j|p@Pd_d)YEt#ILdG&vhG|0tk70 zOZR4=yt_(qJ0y~diRI7v`BvR)uFG5D=Gj(^{Ay`<`q6gG{qkxrM{BpsP1VPDTy?a{ z&U_z>2l`}7?2+~a#_Sp2@-SbzbM>L^RXGk0F1|omT3!VcJ?YmodadkS#0<=4e9QyD zxGk`>011F?f8XmPmSQKRp+{*YB*DfShbIJ>6!IIEh|<$|&nd=#L)~n&p%as_(0aiSss^t!fSja5!TAIbu_NsGe6t wFC=z$7;F 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∓IwNf06PN$#4eouBkx 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⁢=CYAab>d9hz^vy)gN8{^ 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

?$|<> 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

CAO)r`J>>RnB8S5PM~p*k2B43_^}bu>if<#gb) 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�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 z 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

B=giv-$r3b#AY9*Ly2zuKt8- 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

ye$K5xBYhp-s z?)cU2(o3%6!0uTvUDDGZ&R7jmBTANXF4Yf2=PqPr;E#SP(280ag4#I4M2a81tu?Z# za$d5P(>!BIl(T{q9lAT!*MWErTZusymdBc#P`sr01<}X=MVg8yzx%CBcbm!#pAX+& z5ssz9cK6(Oj*kC9Q92ChX6uBtG^4T%zL{;98Wz&e=9n%z7=P?ZzbPt$cTAuX1c=q; z0e|(t9(NQOq&<>8`ACVj;2LE5S}=8mVwQjy_#LpV=(J5yaTFt8aHvfNcP0GIu;se@ z!cEYfyu+s2N;Rk~1a@tRYQbu!Qym{DEaW_%eHzV3mB{wz&x65#5^RRjSZ)FTOwDq}hGN6sCG^!geWLk2N+s})u2I4qX2L3iSh?2^3 zfsGH^BabqCC{d_};T9Tn5pPraKvM+lo~i{5#N9nYA(}89J>)_`XT$BqU*R8!2Sc~T z=iV&+T73n_&}ev`IQ|uf3BoyS{1;FeE3r@QGxXJN^6TAEkOM-w3+i!3h(m0eAV1JG zYa+O!e^!$aV}S=M*3_HwZqFCU-j46B9`$lx6#OuC9N}ZePt9b)84y1J>josaD;|9V zVtZLM1z`CWIkr~e*IcI-@?1+mE7i}gnXc6mKqmX!MR?`wbz+z6Kz`dm@GRr~_f+T_ z)GI-&4;#CumYSyjEW68)m?_GDP+oin!am$U2T)frL^(>O)75h$Tb@f`oQM8ro2cnO z{C13c`9HYP6z=+IPSy6ieFf4aWP2LS<#_6%Cii%fDfH$g2;pMNR{ZzWhXni{}k-E z>KdY>dCBX{`7w4G8AYkSzg2&>QA`34wW-&QPAYav7{_tOG2{<;(tV=cj)~Cf-NKL( zb`YC4bxO{693c>C$&jQrjxfaPG}H$$L6lf$Jlx#{15(|SUqsP=NK&AtE(tO=SE08y z&2~@(H3Dk5hj3jr&U1qEh#ZuWuT5lXwr+5L=fISvNm&DO-pn}*WaXV!b;S#sU~ieo zxm3RG2QT*(R{XguXZB|xWpLH9s+OI4Hl0HKax0JDP(_BMQ&|iU=6X9NF4xo01hYc5 z{zxf7y$9^uI}@iEOMEWid!IzXZzEMqnCeq5Wqg7b84*?6i-`)H3p+(7jL7W*aP=#QLqYlutpKM`dO{+vzSK7jj68p;B6n|%adH+U4L-XlYga6HX zSBhtLclyZshnbH-rUL7h_#Rwa7VpQVYKM|6JkI5~sVxpF^$%(4H}_{Ea@%Z9%4k1W z$%b~a^>V8zMVo!v6c3{9otb2M-pQywNbT*QdpfsTao6AS<&PW^^dP;64Yrnggq z_~Ihpl$t?NO5wD8S)p$CA>|YcCk> z9aFv3`d6Qh+(-GQH>EY1POW$x`D#PW+}k?Ur#3_6AO&L^lTF*i(iGPXqK8A7cJb!9 zL~ShN7kVe}nA>~Wt0Bm4E-2s3{{HQh)Q?M z|9IF9rtXl&K>^>9DVZjK6O4U^kt`5Ns_2j?49`0!Z|ZdPYkU6IGLH38m5!E=GnyhrN7xaL7#&b ztJ&*NGS%LUdz*IDwmpS=YtfSK=U;?2b#9$V#qCbQVo=Qrg1S(xgLl_sQFXPkN4kFS5S;J*v&GQrz#;U~v~kf$q!V#EXCDG8zA$;Vy0G6n<9NH0_K zDQG9C65&3S>1(!Ga)NED6_$!$oNY<(T+FQ3NkF*a>O)i2uH1J=Dsnk?aZxR=8I3fZ zUXT0ej-hpO&wB`~7GL)D<*RSVH8KGH#$L=GOHOqTFYQpZ8%C+^u~yk1J#IO7{N51& z{4D&9p$2fLkKO*G)%9rRFdVU)_X|`ybnrT#@;|bNca!rZ=+#@2%~W{^Qk3LXeRx{+ zwCOPGM;KDkOVi)Eoxz(j;2E?%+EpU&p|oAt_?#*81+A@?pJILqzVq9%c-TV*+~JBq z<@1FhNe)G@L5I!8HWF5}fMH2M5T#*+AVO|fmFefiM=3B>|4RvXpp<60jz_wA8c|H&)E((qB?y4}jw z3w!4M3^;ORXc=f$Jw=29PxD^0x)HCOciht5u1(F#?0pqmJN_eM%LzT7Kz{3Wy~y_a zd!0Mo%lMCvaV`6x7Zd!k9WH2AdMYPX=dyXgFX(6GXWvfwQ9=2#_Bt>$uebJ;c_H~f zviP>WEK)`glhj43@F~&XI~e`0AQyYF#P0R`;TJF5ELVFdF4gMxrO30r^jrzW%%mCFxkgZ&<=@Rz9bW1t6{r+Y?K35;3R_VhK;4WDYAX@2vX5Y=>CLwj|A) znr9ViH8>uo{pRH}Qj9az|Bs)XJxSYYPx0I3sJ5LS*XQsT*}lDJ*Ty@R=2p4o%1776 z)$KUw!!r@#N{v>F@xw_lI(%RI-Hp-qQrCE|&8e>*c^}(IXzN?0>!94$P?1ut<%j=~ zU01vh3_R)}o_b(QIVc$Y<(o}CVmPWf(X3oZl)8gStwO{fd*D*9g95Keqgjf1 zq;E-0jhjDNuV?6J*QB#v2(k!xnkOiEw(wY{~rRiDac{(5v~ofmDkA4vrDN9`%O~D^yS{K z`y}kiXtZ15J?TH}J1GNx_#2qePt z7Kdr`ZZwx1{{KY}1u-dkFdGg1a8= z^I(YBzF?tsSw}(oJN4qdH)eH`NUF`O1m15>--2b03`D;=x4Lh8y`lM-QlA>sI{W)_ z)o4!_9Ox}7ndMh8T*(}w<=r6Y3N7}|gS@k)?vU#vsk5vU`5Y3ySjnQm!;nQVcWAvO zcvv8$`s`i7-!tb^3=u+t^By=*`t@|Y*V^d25T+PCrn@^?3 zlU>&H+~I}V#vb<{=@*hrMuY0q7KK9sYSU@`3Z;?Axwo%v-E}S8@T(lo>FW5P)}b=a zoJ2{pzKsMXI#>QTQZ4cCv{A2(4P^8rIb>d2?`HS1VA z3LwvuZ$!W&&G?MbIvYDycO&v3X2^C8$bT9G%me>+0@g#7Q*jflPHtLpc9pi^+ZX{9q1r zW&d!WO9*fPaL)uiy^Qc=kI3#WA6)3F#X6+ZVg(U3RtdDIMwHT~ zM+2+ef$f+rwd?7|XW*1#I0ORTHzoKuP|r#_>A6$Ct9)Fs!1^t?|3cOO^ZOsz!}k0A zRlv*4*52c`!Uru5)UH*=$_|2Z`~feK?graG80ka89QD2m9OlFU_e*-vWwhOqonv{q-Sgd)vaXuv4&-w)ie3*W_$^?PT zdcAC{$|3N5;CQd-1P~!+J}e(EB{SE?^w7uc%(NsG)#wvk?v{33ukBPYW0v5%^(-x_3~}Ti$2T~Y z#IZd!j=&7zcMpf^_;PeICclEj!^r7xKS7yzNj*jCYD&)>K-i#1*Bhqu7CR0M{uLgR zF5{`brXoH*b*5I{b4MYX%Fwsb2+loV&hn1G4iAhk&!=7)sU#>UmhN#-<=Sj9-Jkwm zqr=^89PIWGMPmWRrAvAJiAp?7@$>2;c6%!WVq6{y3|%8*AC?4uzH# zaTk2i;LBi--Aj4vIl%U=QlPHP=hged+E)XpLjNYmOni5hFSf<+_&lI7M%cL12Cf>w z^jJ#NSE#P(ODMmEADsG&3=&%h=7xY-x2sYoQDbsaJV*^gbh8Hv?PmxA+s~`=*0&E% zOk$5H{ZS&qLG@)C0I{O`9D?_DxDyH+!q!%eob0413V#h&_cbPCi}zjbCZ(lgxO{6(xXp@e9x3k$7;j|neIad6({w~HH6 zop#c!it>E!roVOex(bbLkrKzicOD!lyPVKxT~Eq8{B(?bi;jrg?PrhgBjYg95NdpX zr0LQsQqb(KH7nhE0uuE3fo+>wM;*85`psL6*MqjwwlTt{$7X(*x=A9jlumc>!#WfC zD2AIx_MVJi)=kazu-ooov1 zJ(^W0Hw^^a^z5)y=DLS-^0cc{9^ZJsJCs?Vl0leDb5TaxxyQJHojQlRH%b`U)t*iS zJwW|>b2EwOn6PJVp;h&mpYN|+Ji6EZr?2!7UZXfO=%T4LU3IV;A$XZum+}7sL0am1 zJ!}JoMNJm(qFri^BNhoYmjF7C7JAJm9gppe*CN=IAIQhr8=1@$$1e>zzvoK!M7=2a zjtjJtEQeB<8s7?mGN!#7E2KXD8YYIU*rG19)#X^0c5oLxv9~f^_mut98{`Fcs?c;f znHuY5e*IxTpu92TQxG^-u^(j3bz{0#nv=_Kp#B0qrQ^q(X1Hi#Gm>< z42?`4Yq~A?s$S%pS2D_X+ZTFYvxZQ0yDOZ`z(SD%Z}x$B7m!=cXX^Jfz((Hf4^dP% z1Rg7<*|4AoPDG%UJ&su?9k${86C)hVZ&XC?qk088<_2oH^`B!2BkP;nTT}Q}coTYi zeAbiD#2qwar5Zw;Q*}km!c}0LY5|!M)j0GNJB-t0$8c3VrQqF=n=s;?iS?K7#+~(l z?^=Y_+W~!U&>|ALNufPly0_9zp5C3fB4L*-r1yS{y>ztN=YApO1(kCD|p)KQ2$ zLG5d0?+sWIl-z%4aQJ@}4o1oZFmvx(WVwMlv9p~A-5$l7E-6J)dh8c!$r(x-$Ht}f z_Q)7fvhK)N8$a%LJ|!%>&Jq7j)|3j&`ToPAtEZ+BEPCp5$hL%T6Q83xb>dc90u4IZ zWYjrx+2h@bn2TYZ+`R@=3Lv9D1*XS9DuLA@>X&3QJW&~Du6)r`Ebf0P1G!GRlZ9AjGLI8FaHNG3?#FutXtYw8pH<3=hXYc%p1USN zU+A~&R*f;Z3Gt*@ZQ-8Ff6$=)g+vpXX_KD^7;qXKbi5y;U!}THRrIH1E+;EaQ(3{g zj&$K7XA;PzR?N`rR|I7)4&o*`XkW6P)0My%hLPmeuk8T79|%_W7hE-1s}QSmcfA@i z4Bu2T!N%VvJxQ*5?LTD+@$#ZQ1iNv-@wADOL2+@LPIye)yGpc#0G+|t1@(Gb1FGh~ z4HM$gYl?>1`xY~uP$*%MpEIVwe?q0APEB3tvHHIkjDjL_4nBs}K6fV#4DOdzR75u$ ziod5dFbEVVGhlJLwF+3qA;Jb7qID1^p1-47A;K;R#YK9iyv6u=GoTigp_q7Pgk-Ul zy9B*YWu4Z}FrtZGM5IRI7PFNF$aA-(Z|=DIMn}NS@1z0fYbR)q1|T&I zn$hSD0%qf|J*6;ReD-UxdjPr$C!jTQZej*Mxe|EJKmrv2bMNh@B>bUMyn1AA1KARp zPCaHlUAYLjw5>Y@?b@mABdQXLPr9B(H?^Y1cCCJiJkS;_pK1a5-M2!{&-JA8Mg@z4 zd5_zp-4BZI3>Za?>s&&CqX1je{CA=mUiw?&YS*6)`>sG zR)F`-Pu)A{#Lm1z?ZMCMJLqE-**6RuWkn(oZnV%btl{3Bk@UhF3ccrS*Zu#I)fsg> zny&wQ9JOoq*C?W3mqcbg{Ei76sqq~n_*eF{ab+?TP6S&lX}T&=;c?Ltk}*`+CM72a z*JN;}a&AtMi3#|4UL;wbNI=x|fxoek&{ zR{q&?sAY)r)r)IwrOW06m3wETt6~x~^!Lrgyz83v-WBElmns-Z4-qH5z{|!Rl0}Nc z8HGtFj9<6PC+n#A4?n$W3Z30WUxzN=%P$%w0Z^VLxyT%@ZC?3bTSYvBzpT;zbu{A4 zfYhbBZnvDiB+-wvb&p6blhL!w2hVUMDb>%LN&BHfp%G8t-?jsMo<0Zx1 z>hJ&Xb7bt#^2L!1Z?5)KrdZLfK6a`n+0@w0k%t~BN6QUlk8afjA4~7x?&WoTl#shR z!9kgh>MiIp4=uRC)mI|WK*4~yqjtBmcKUPBv##W)lm(I+bXt0`^AT?#Z(}(+Xg9zR?pabAFu{@svzQ`RT{+ z|0m>}={f-t^U{N_LgcRXqjF!fFJZoqx-G45C?t^HzlKmN++p{KXx_)(>`>uLFH4=h z`oE!_d3ce9(wOVVm(II}38WufRGUa0L;>>aeCW=SuX#VX41DrI+z79TDlvC$9XlEp zSRFJRcV7%Y(Q3go#&EMCNOIj%nZB3hGSAk=Q}3mwreN7Uu4F%W>~t(vJjsz!DFQ4> zYh==VcF_S7ghf;`NyUqa3>7hw+N+q6rzo=tTq%yrzxIE&tG{y!pznTp%6r`!vPao* z&*C)af*-;ZouqUce!T9pC=!Xa9O10pt?6#q;)o?YIOu~1K1%{35aQ1s_gSMRIL0J4 zsc`zD71e2!R?FDY z+$~Ei(Fe+GGVa3wK(%8fpu*?;TRVprgJ641BeFTtm^TJ5W9I-c+A||9NTj7SoZ>X= zZXC=J;J)>NOpioWn$Wv!I|_v9SY=&;Ml(-lJaXz>WAR0Hr1#fa z>8ER&)!;EuquvbW&T;3|od{qa6yk4!)7uEKLN7Q0<=!JqiV_v)% zJ}G9)K3r>thGdn3l}^cB2k)XF6=~K3uWr;eYg^M|g1cZIDao^+7#XC}UiIAd=w)20 z-5_Jb*!c`RC>?a+rSpREI_-Wnqng|CjYS7rH9m;4fW*}iP z;4j>rHmwi%Usw1?uCUT%n)VREKnV*o!WCOoR`6Ra^Dlzbo^WoN^}dgZ8<9q=s&PndZ4>d1MgXA;=UO(td$-GI_} z0>3SbD1aOPOuo3+q2Q#F_0un=V$M7+N6d`KxbU7)Ibl}S&uw@4nXuh)`Ggz(w&6bU zjCQlDMoT@O#dond46SbX&oIEmPLoh1ghhLX6UX0Cj7kyv6us{ix0h7gCP}-|kcb(DrrCa$w;9Wy&|MqVRx4jrRtlYj`ixcGA&ZnmP_+c3 z_fEaZtflI0!`yd7@j?iG@Ppe60cA#y7G&&t_P1Lv%9p2bzwqXPM_)4|tEO;L=We-U zW}NqCsoaBZsX%`zd59(uWbEx4VSL9*FS9-cE$+v>7N*eFUGrVlhX_qTelF^QxFu=528=lsW-J;gP`#mPz4#ct@F8V6e6`= z+wP-D%WI!v{9K$SgUh((PkY0l03iOZaV)jma2-4B}JjfZdIu=Wv(|Bj*giL$r9zh{fOnKcYLLI=>9O+wG5w z#;$L#%0=CWb;}pXe~DEw()Io35No6|i)3wXMlip{0VBFj(gU;MO7CuJONOBRo)07w zMkQLiAk25-PEvkma}5o^1ilv)`fk@CNW$5`${FX}Ty^|_#T=^nz%up(U5zuuwx{HK z1T3bM%vLc8r?cgkSt``baKXueT=lToE2h7l?>ME>eS3K9j=k;n-3*nX$N7j^4Zl)w zrom@|MoCCBvD08MgOmCXXJmx@`cfJlr87axjOc0 ztxfKg_b5x8ETX8P#-t8{3o~ESsBu4}XnEyBSNXl0ds$Wg$;Js?Y&yMH&N%mXbR=Eo z%%c5g{}9;SxT^d`TQ2WzK?1IBz7C>-u%8;Wiae{5Hp5L=_=HltIvsKDhYJ%8^=mTNyl*>txr>cSaQc zyjZb=>wy-omP}als|Be|6!ePW-5Q3qRle zJ_JwJbeqa^`Z9nm9$}|u&Pa}qq3Ld7@B5c)TlhXn=l8+{$0vDE#oW6oL8@^+Cv3}1 zT3=JHagmB@C}EC~^F!@G1?x8|P&Twh;UT=YhoCU9&-`f;*Eu2<+z)uCNz8 z*4!`J4_8fo@mBKQpkpC~=mVGy0$gTo%#OACsf`IDgfg*agwb@26O;{cY<493`7~@! zlQrAdPAyA=WO|Br3g7!{yq2*PYXZpSS5l^NABb?wxcm-lTEHt@M+%7#3vS^PbNqy$ z;+}uxx{I{E-~2!}JLto1Yj}>`OyX#86sAt3N~dwgyCKS5j7%rH($gRRF&QlBV5YwF z9TOw<1 zXFO>u!wr5A*nB(Ipgwgd8QT`y`e@{-zOAEEwOtlCz~EKFP|JB4uiN zUrA_8Yqna=vpC+<=G!n+#K?i}eQ&u7=Af6v3}lYp+h!PFwSBC=>A6FI^@T={8+r1u zkmY*^e?WZC?SApMvPF1gx~lzzW%H~PX&Sat{QS@^-gFW?pEk$OS6YG@$DwAOPqi(7 zyR}FmHkux6q%~lLi_x|-I`S_ANh47GqJQu$Qq(_smeW9#C#uu)6!PF2NZZ5le2iI8 z;de_?on+$VuBeZ@gIf}J!Vr630_yNm39xnoGdF#%+0|GhdP-bCFp*cus}@)cdhupm zB~;`86e7B-l1qq^D}!AL>>g_~8iKU~>tH(2h=1r8(=F4`Se2+C4{mhQVp(XNh<$WH zg~i<$V9!+k{j;XwLK>qJqw4&xG`&p)$E2~;mi&ROqtgKWYJ^`9VPrlr`@LmP#kJvt z1w2-41@y1RekzCAS8<@hovs?;4=wqjDU;%WF)KzV&Omi(=$O-#!7y-X%nD$5xlTNB zRl<*ll5$SNAbjLl=X*%Dx?QgESkad|bQeVlxl+`G@&NfVmgE%Z*Bwu;$Jzk}034G= zTe1H^e-SES%+NdDq?>9y$}uJ5+5724$AtT-0X}5Gv6lmL{<5R5Gsi7d-?tze(%4h( z6x9y82Lrz=+J7kW=%zI5k?#fH5*S#u*zSIHFnQ*-1VtN8O1EOr>20%zPC;$(W>gi7 zv@J8cTfZ~CZXZgmdAFRWsLACIU{<_2Qr|$2@-3~SN~%32dqYajyp#$U-OKbyQa#Oj zYI#zK=cRp!Xw`C@K|(wqaE)H5o5-dFs8d=M5@e&MEjZBVxkc}qv2`gub>5R9T*xUk z80yzP09)m7Io_Wgywy{3x8w1S+M-_;_lm&&Z5gZ?8020u|Bt`}?;s9OB8})*{}oRs z+IRts?hDfr+eX_5ML)3!mG)8G*F|QXzzBb;XVJvMjU$qOpn7206=Aw_W8rGoWfYc1Z0^x?NyA8i$TgPuY66dwb zO@QvT$J$$I)h@SG_pBmNl{Vn=^%FGH??f4PXE(!Z8RYC>mIq^Jce`etAEV=4Z%0Ql z>yW~QD>wHCq;fxjD=aPV6;8a>f?~x}d~-Iak&JP~g3DWagZW6+SIDnPK{D~)>dNg7}eISt)f=6_EuydM(tIUASL!*vG@A? z^8Njh|IT%;>pahu^PKy>-|zQ}n1nruX!KqHEUQ*& ziwUlAdaGVM2;trzmhKdier#BpA><{oVf!94r)dz3Lg%oYxBw^GJd8}%-eu7nN7+9y z?<=HBWg2yi951tZ`!o5m@mu?lKI_+H)H z*3gRuTe^?yeE;&Snonhy4~sag+6YM-RehTg?X0E1`Or3NLhKFqOF%^LuNC)&%lIQ$ zuI`e!HA#qA-%ZW6Q)1NB5~D2Ze?+BUe+~zq?S`eFwaM^R-;ufWnJ0)B5-0X`JE@bV zuX-A{L~gnGH`A_4mGSYgFxaOSH`4w3dlL(*4x`hc!I6q%bC{Lf`MDte;8 zx&}(siY+6G^Vnl?0(1O4%nAn2yv(@@Q>r4l2_?Edia*;@$HbNHv@nE9+%_Ly&8F{p zZ0l~{vYxl~RQ*T9WVgtA+#4DFdVKRm%rfKp?terE);5pDFQ|9CMz&$HE63Z`?1AG+ z=dK)NcXA^4OM5*o?thRuTW&+iClba=Wj$Vpu-t*m!ywu9UyQ8AKQjSkHcC76%(&2C z4{!$f5i3J){C`BhGQ&4T30@^i#vU>C9|~T$?L1|S3?rw(CDoQof$Yktw@$VXbBaH?^uGzGa7=FY`V6R~e>P4~ zoaIgp7T^@pwRxt{Fru__gugtn0v|*Zys}^H7M+qL)6)iEN|f_cX3zPQJSJal zoT}<53k!QJJK&-&0#C;t`w6@vSAUTlhYHf<@yHgdkkolndb08*yJ>9DT3Zfi{rd28 z*Cp;et*e#$fc48B)(>xPI15uT#@3HK(tEqoI;X*Q?Sbf^mV?D=)h^kWFJd zhxKx;O)lKICH&>YtpEXLSym=S^>8CgCl$!7Mt{I$dpm<}QDrw*7^m6NqbV1*HH?(M z`5{na%(2A%Ww9J?=REjCKZ;q(MUD^e2*;lL=9s%WHIB41I(%JXHZ=2zV$QXAgE3B+ zewTlOj5Fls-E(q>I;G+`m^$6?e#IMD>8}c?G;fUBFI~jsv(fkZ8jmX#-NdPcjh|55 z6HV1;l3ZznDHwGOuT879HYM7FxB--`DX(e8rrZN(GK5R&p)@^* zy7cogZYS!AY^wPQHC*-yz@;cqX#PS`D`khfa3WrmQ*EOK;I*gnZD_pN^tLvz-pC9wab1IM*-e@?(?mJ$ z4Q^DGgDv-}c5c^gs}e?HjCC5I+gg}v$vfe6xrNn}9}Z^Z3DFmR_g~fGX5hD;!h}?i zxIIpR@}e)TlA$lvd0?4z4d{mEAj%f_9su-Ykhq)T4M9Tc_{VJx6!}WNW3(yRrVi7r z6yy}>cCB4DZHC(t)An)@Z@w2EDS_R``?u`o~bf!?Jw90o-Cj` z-7UK}!z}+G><`Tx`S%6*T_f?vgjE=^kp5tXnB?#8_g@2e%FGV@wVf+Z&fMVVX~Ae| z$Tk?$gvcFhYVuG+oS9E<2Na-m<;10yZ)p;Y9#j?VADZzLwmEAQxN^~Eyv1pX`mQujfN`*Rjb$ZTX)0JB*gV&f`=*(d;X!VhiiJ9$S z>K9CNZPYYNf)p5BlZdJ^`xOX$6NS_5?j9?AU+BCfP9><$-9}RqT-Vc+% zYJ@nRljFVm3Y{F4z~^h59VR9y?Utei-Jwk^zs%0lw9rj0aDq<)fsUHj&tfQQ2NLY!^~(rL)MAST-#_bH zQkt`q-W7(2Y99-F;QOm~C2$j%g>j(U+L04F>bZM_Ee>WLQ?)epR0HshiCf_9@1L*R zrY&=`jFKdqc*iDM_FDc~;_YiDv7-$eC&(thjh(8BCSsCg_z{QsQ#7>aRE}%JwEr&#z_03k_Ao)z_{#|US z3`Br+rfGOY4O+KaH|nbkI0c6pl^x? z1^FpNDf7utM04pFnbd9&C0gYHqekwuK4>{q1AlUbzUp^(#Hbh{56yZhE7SqCBLL6g zq!&%Gc4|SI;1QN)TPgmJi`fv@#Vfg7_9fS^V}o>66KKf}#&@bmg#kPrF}au_r+A{V z3lMAMC@r(}sB>-0+^>wL9Ak!HM3%hN5fCZN6(<>3sDXi~BJ?!*A8`wE-fYS}A<1r; zy`e{1pyw{($WQ}}ub(EMIz1gRcICHI4TZK&P8H+3dF!zL+d@qyUw3+3zo*g*XVA~R z_fI(N2pYUcQNBCcv-_vE_Dvm|L6i(u zoqxt`K)JTnwA_W&V9jfCWjpUK%bn(>LI zQg^LNqO@(niuV)eIzW@()HZmu(@cXn01YmTqKR(88`lfF)fGuDkdoOC`YvZ2 z?yfjzVYkZShHn6a=}LiJ(>OIVbpyc{by0xluWF#qPVg~%lc8dSj~&>vdzJ?G_rf>Se^pk$?{U!$ zBtP6OEy~vv&iJtDc6QNXNa);309wZm>w*QZ;)do`{VH0sszhkPv$-~%{O08R)CJ#O zd$5iQ@+TavXNVHj@1#t;;d!WK_x=97SY?1?CY}_mE;)sd>MThbx4wQiMxAaZWnD_0OV3X69Q!;78+!hp}YI z1^Vq}&YoKCT;m=K4Eh%TG=!nb4204vbynk0@E!|J(33@=@_FJm^n(C@h1|UAU_nT~ zVD+AH3&Ilnd?uhJ7YfxHR0T`cfu*;rpizZ&=Mh4}MRCKJD1Q)QQF!MT}}@+{V|XIHQl1th~136`+mLz`Nx0!`j|!iTUT!zC7L;H z^HjgzfvDkj3<*1&d-gt^ndwc0J-5H+H}xko_T}Z?$`7|qrwvz|r;A#evl6bim@Nfl z+_|IsQ#T(A8CcxC`#kMW`qGh7pra~_R?lb)I?Yuc=tSQVz*ygwV)inn63t~iOY3@= zX*3NuN}(=HbUJ$6`HRRf7hinyqy=My5`+M=_NptN7_}g*6{dIg&fL(Dj`{82)f{7K zlo7rEq*1c9+#P|;Hr0I8drkSv z(;0=8D9ean(f#1AQj5oAZ~IO-*ydbPH>_PS9$AZf_n^4|WhS+8J0C!5MtuM2r{o@| zc}|&h&sVoQ-W*iWNw(MeZH*KM)0=C6L@9^#l9qJ4F7*Pjmub{cL&HIu-*j^N@j2E) z<~cd~3E3VhsmP|ST>{(cT}r=^OFw^Ux7skiBp*DxF|7@NAw#D5e5Sc?XQVwl%ykV# zC9*2}uHw@q2DDyP0|KcR5+%3?P2wRIVp0Af6*smUvzn(t%m01>n*e%caWn%WgqAVZ8DHQM zMu`UtVQqVTp#FRrjzUv>d|m)(zrs=COa#Hy7nF~bGnr0f*t2jorY7`Rk$r01*uW&A!Si*+6A>_rww&9Yw7l}i zRPR`Li|4Q|<4`)+r^kHLZFX%78A|&aB43sE^*A2?3q0#41apwLIcRh1;cBimr8?%j zIH(Kja*Ea?!)RVZNT6q_60tnc+U1HEVPC384KP8ClOgx}V?VAuZpjFGcM`S(kzV4( zylKAEslSrpq#?{1J6ZFe!tT!lCli)M;{3nxbVF+n?&#sRV2}1Gr@y4)Iv1wSE4uwt zgRs#rM|q;JT(6Aw_o98N9&Ef&io6!gcd=q2cutPDwK-n>l~7Q`YL3Feg1QmFO5a(L zH??u(a^x&>fyEmb(DXXulrEUXEM=MT%?nL_tTo&*|PkA z?xr z8?>9Le{5wxSNmh;!u%+O>`q~bx;DtPv#@z$rI4m7K3*!si16JW)Zk^ zvbCj=WEq2$3s_fdDeEF`|3TrqX`Q9xQ^v33{jEe+R>uH5pr6)U#Jf9_JBJE@T!g~y z7}cJCd1pua&5kxz)0u$eN%qT+n0~Q^&0o{rQ}DA>)U-Ygkt&l zxR*)ze=-HakN=U}vC@i7QVHA9xt@sidHCir13_*93-3t#dqzlOP!R7`Xl?kBtYp>u z>*mGDdJ7j2NAjq(@T~XZdV{ffowTI-1z}VlcwMg+E>E#svnINYpBbZ`&-v&{)v%7T z{>wgFYHfWOd^RG_u_e<@BzJwQ^z+tqPrXK`ZC&yB?aTkykgO9NCE~Z?H`WAXRhHSa zJ0Cx)ha`%5ipkwcY@tGN`WF4RNWQNr(+gOyaXX5KwG~Ma|8`sXsLofqai3^CJ}ps+ z0&{6&m#F5meR&wpI)06AGgrLaYH~d^8VxtTYNOglQxO=_7b8EnlnC8+Zjv(vndOwv z=fQTk$u!wMZZ>s-l7;WWA+(M4Rvwc$@1F}db8D+<6b&C~+g7jH#^4BRlA;+g;+B&W z8a~2dW@huhV37aMNogK~tZ)DG$~nLtTsQo7gvcnVSG#kc##z3QGxuy`7+7zu-C>TpU(=q zY=L~l+!UT(y*zLgYA z-ob5N4dUtLDIu*FlfzLg7pmg}8diUw_$53VwYUlMBx+_2%Ui#`g}>EI%njVTRWkcu z?2GkZYXXdD1i>4;AD(ffI5*o0r%`BVU!PApp#6L>!qoGEumB@iwg#eCy2PC9G7B6( zNNyfc@#QQR5uri?h!xvD;y=IK2)t+^>)+1Fu{m3~q0({gXH)l-IoWxnxpFG+-+xT> z2E}%H^7}eaK56rxUrET^Y~yWc^zkh`XNAhDMV;+1h-8^qc2~W@Dw@@ft$%ZaRF>24 z_8U>i6noc7aH1!K<8A-S$Iwj;5}RXrj*^SLasOU3Qu$kjn*%IPsYE%>O#bqRQjYGq zfYbHk=ynb`yp{X>;)-YbJbW=4f6rSO;X!+T=Q@{av82a*l1g%7CW^6jaKSnz1E2OE z5g8CJxcDCt_55>1;W}hEe2lBF#CbE1a^G@BB64FG3K=JlLWvKF{c2 z=f|v$A%>U_UiE!in{*@0!JpSzx=bhJpk6pu*aQrvrRd%T zmY^RYBIrjP!-ffO>ZJR?=&lw4U9u2^ze2*mkUIzH4u7au;Ce^=>iSphHnB+5LHOq) zw2vgA^CY-480sL;aCkjHtv|# z;`_7KtOR;86w_gr5U?jB;-71@gG3bYwcs7+n-Pt-&VPOrdbWv$engklcv$c<_+6@+ ztVJ5^`>=v8sm!vhto+$#QWJq8babb!e zEMF}@Opb5<+Io~+u{Ak1LZVj>ilNa2@2))9*wjnYBdL-6F&=~6%(45m zq*wIm69ZBF?s`0X8wR$#DpM)?omr+Sq|V5@DgJ*n?XxO(`z$jB=ro!kszzR7St2b- zx?QjVKBgVKTZ6dKt@T|wpj&y--CFX)T$RGrN8Y>gxk#pOd>oKd$Pyq*LK z@9scSlftVjV-y4e5utc3oMOlJWm0`-<)%D{Tj+{eM2g&ztB_nUdE@QsQ5s}#pMbSe zo$xK?9+NcB9&Dj3NmzNVnfq#rh`R4rKQ|TJ9R5=6G!5C2C*;8axSEf4&oGMRLmpTn zZeu1dzonS^P zG{NqFe=iTeA<7WG$~Q+DP2Iiw?l&lI-+F5@3;(SNnjp{N!kpV|d=I>mX+)a3HtU@d znXp8yPEtqDH;_vGFutMud2bo8Nt-l&P9^JbZmwssPgJ~6KwmD?-sh;kC9_#5dAVnBr0@)F(fXovzwsN9?qUjcZxCicDLN|sw}^||fR63;k**{|6@MJ;br z<0{uCIhx9ig)->D;q2SDnFnN+eM2)%MYD+31d|Ml zEYgA!8CE>GC#Al9Gy^>o+&s7)x5<&8&hi2BA1yiJNs8a4=nid7$ucm z6)@JnTMgv6K|?NF$pf_g#}2TD<wK=O((c)GcyJSpAPp}))vMO(>OiaiZui> zRdQ&)T{0;~W@asuu4x;DAkWxU-Xt`~JcdWP6ubBf<%#VWnoZ|hTPaNbEDA($#W68E zMHGE8eMO=CX*z7zW>`h^BBl9DbCUeMKi&mAmO$UBi|wM5(M_kKCi6z40IX5^CHxrV zP*qi3HecRIInlC|tE7)_jzH<+oNCRuu$P z_#01|>sqpKBEPrA`FZRFtu$s0v&i^f^;NUEyUUO8n&7!bMN`E+DD>5~20f`BdE+0T z%UMwLP5!Zqxu+@rHjS}Aa4G{s502=zI2T9p4u zxP^xO?N}^{Q7IRX`0ex5z7~<)x(VD1eFD;k;j5G0181|ePIa)MzfBt!_qpDHL^Oe^RqOvZK)iYyr7bopdGXXdR!WmIuA~<3H*7dJ&|8 ze$wt0LR1evFx8ZB^raDNHjXbfozvvFZy1`CkTQl$Bo|CDc$;lb3E@c?YrA}w1TIMP zatd%@t?MZaim$~9MBBehW=L*!xwj3u$?{LdvU8%$Z;Vvcn_x36v8gU9XpTQ=)QHN6 zot2bP5Oju?pF(^!K6M!tYx#B5R0D z$NCA0ir!Do{W!^@oA_=3)9ROG3)RDP(tGdXQ_?OaOVvZ!ZtyFxXPa?Pl+|Z(&*K)J63r{9k-)!_o2L}m zM%E6b0NA}jLN5_$buXSJ1{eCx!bF)Wvb2Z1teTH)8JI^;{dj0ob%r1)u$;m~HsYHf z2sxBB>Xk#At!1QTJi*UHzZaTqb_$U*!Av~S|IA=Uptc64l72OE?nX_AL}mvC&hay= zBtCd)9>p~k5kZMoZZzAQaz7!bl&7MY?t!_94;IhBsm;af`ze1LCJa1~-%6sS`!wVcT$sp}WYSAwfQo6MWQz%lK`9h+jR({Jv5)u-a_R-u4Wq_8clR9;&!L?QEReG${-G z+_Ps4tbCJY)-lHmX>{`=+be8BHb#HwYB$9@xHdLVaqF3gp)Y7OLTYJjB!z$#Rb!T*eFp zX{gF{2kSi%s#}z;MPF;4_PtBi`WF~A#PhQ8H`&e4 zlKIqNkK_}_^=*$lfEPiHP_@1F;Dl}a=<6v6JDh#Mq4#&i?e&t!BTH3g`rocM^d<;7 z?{XbtVAj@4JDErCJav@Ro9?81RM6#s>ee!j6st=fPYrQ6B$QV+e&CTf2G8>F;t?y^ z8z(5EBWd@Te?%Gb@qei-mghOJ z4efpFjKm0Djdh~WXZ49hG9$%050?M=ugqcsNMW*<-U?SvN@hn-r`xQ~Aaj!eZEBYn zGrLXKB8Rj&_OO4%DI?tSPBrV8A8W0o=l04szvP|%{YT^+@@o0^pXvzve6-A#;GScz z_6*Du;&nXoW96*>q~=pAbG4EyLF16vt9Kp=^AmOyTkD+7U7?+WzOP@+JSB)bV%%U^Qj=}c*x}v{vgPaB9E>Kw{;uqX53DUpy#}RF ztECGF_{}|^cQn$5;F4!0&ilE2ZgZ=kK(=XRObCG`gjtl7BCU((xsi#gFz+daYjgXg0jBPkeEBAHw=1sWVTY-htG@HQn`p> zAL#C0d55ZBTUT2BRWsHnnxy604w2S1FdHn~hRx?>B3b#Q^!DVsb{qyf-le)2(cLfH zQ1BusJE*LJ*>ik16hHq^63&ewAgoIWGMN6)aD@3LE;O%XBj9UdVM?#=R%nA#3ERP; zEUMMAI z)+V4&09)dN?K$?7aWl<=-1pMoL@i-_DN=*1T;c*3zI+Yre;6|922c63qo~_0WalUL zr&S~){ayDvOLKRLjTVtHN%{&W%of?pY`KgRnZPt@^A$~I{g_D8 zF_~%>3A+C+YiEyugPj><`Rdi^0i~*Ud-CF*GexD55}+HY{zfWcwL5(;PJ+;Zo#d1X z_M{K+#OdhuLQ1R$PlFar0(z1GQ4h3eQox70msJtT2|Cj=Uqxt4Eu$xM%sT^1RU)l@ zo7@hewq5<4WUS69k*;ZtA&V@|-N5V1P3jL#5cB@x-50(!eq@?&SCKT+4SW!gM8p*H zORIm64||oQz<19plp@;&;Ml#bCgaWb&#-W)`aQZb$0uzNc}s(4il5 z@6Z~&6xfGo!+h_`3nBK~Jg^UYZRxi3Wp~23)T!XONuxVw>lCcH;h zruHnE+1|bHPS0{P{0VML!)qLRBkiKhsHwhXxoCC=K6(O?&esMsRf$)P4|%ap&M`>E zHN8WDe1h)54Pw9E7k$lKsmn9CX!LY9Ny4G)V}8OE11dNwSFW;^G0Bh_{)8Z9`f1+D zdOGxd88)_nntnnLUDLGV8huSmE=x09yUCje5mN<=e0}ei9JK9qs^LJR(8VhQOkHxJ zm)2*LdubwS>>F<{Sk9272_xs1Bx!C<>%b->mI0}nw@HBir z<8pTQ;QKUrFKAEL-X#AHs9)kpYUaJN3)^fj5si)yA^sG;Eh|y#JIidTNNgiCK^{R; zry0Z;uIMrqV`RD_g2*-P)V*74{7!jM@m_s|NE>3;eX$OOS=Cr1*ai$7W)?sCX=X`z zQM}S*>wTY(#uoI{0$0-C(twHDyWNvB5TVC;cy( z9g|vE78a}~m{~Oe2jg6=hCWo{9cOb-d*baF8wa8IiVrn|fq)vEG0v&_bO)Gb+?+dH zRcwlzHdB^Ju8WyrGE!#Mid=CN6=wTl^GdHD$=#4%zNTQyQjtQR?ds+1;EHycQFR|# zSNUl;(L99F=oe7uG!%W&L$5kxdVOSY(38MFt~exIu;;~ zT*&Sby9>+e%vV$Cc^U-MBqP4E;PcL!lp1W!Wh&lF2x4jXxXU*A(;odpaT-k>L9DwPBkiCQ+xPB;0YQJ5Z9+%*F3n)iJ~Y`HC=1a*bFm%phMakazxU zzb7s7q%2|iBFx{xUeO@nfU29}Vc97fqF26vXvu9zPsc&%vkbG;WR-$q-5UY*>p9uR z2ak$FO2#G4duGNS*flhy1hAXLaNSHNdaL~<`d@aF!z*(|!_82S!B7b!%YZfqh)|K4 zvn)TtD5(-}+U1@R#fdD0hAqQUO;s`4Q~lls*k z9&wRBHPovd-K}g0>Ay3SFH9yihYI~gC3gZy$yYW0&?>W2|8rNjz#E_*QN_dirB|5zAIkFru16)axWrLj7H4_EY_D|$*-Zy!}cx@_?a)L zC9Ld(O*OyWXC=;wqvcmO)h!>D9tBEIOiu%kgLl;B=OxQFA=~~B2KJKY`iiRC!C8fVp)?w3HGn0GrAPvJ5F zb{y$KxaJNGmak8R|9Te7OnjnO?NT9>`h*5Pbfz*Zv8I)WrTQr%QO?n_CaQC$Z{>$| zPT${Rx`K{RT9f71FEB!OP`o?Xoy#v4|3sfs<2Ti2n78$B1JLF!1ua#A=(#PtYfJSAf8#-POiiKg@l67= zglJVdTnf*u@zQx&>Y(zc$;XFLfQ3?$=XYf!sGe+b?It7~<@W*(XXYwiGii(#2GGng zo`ppGb9-bG^^iQIWL6kHq&T?4U?klX_ANGmqydSD&<`xKF_IQd-uV^t*`e=c=G-4; zLiX1kiT{XbEO1*(8u@>jD5KM9i)DF@5&-HwUN8DU{p|QgM;^UZ@H@?(=U?={rE2e{ zu7Xr5n*^o9%7}|`@FE~$C%piS1L=-VaSydJfP~B@_7jPH>o-Tcs7?KI=5Y8U6ea96 z^7TczL9&!6mn%l!HT%0N_L{rU!qiGat*fJ$$%YJ&Ca-l63vkHHc7L3o98dZxWN`5t z3xd+fF7yWW9sz&N`#7kKXL$LJ({ItX^x6)wzQs@KQF6Vd7GJ-b(-R<%ot({@W=rpk zVT|?-sts^A4SW8_&vuC3B?Jmb^f4NvY9(ijFm;)^JSr~%$S5hbM{K97%gG-PCaTodo&o1v z*?3m3EiadCAegS0A<;Q%h1DMv@g z{N@E#mQVM7tQ()Zgg zq|)0yc_np6v;V?VU;wYs`x=w@{q#gJ_o!dKn2aQ%#|!pAX2flsP1j@H`fXJE-%dao zpFj=tgsmEfz=zU!fPngD(^z>eM7d#x#4HrH3*AWdz?;n)BI=$pk=}{MqF8SfTc@_i zU`0t`Vh~^UTu4&2+)1Is?*)6<>?Og(-mBZo7aw<(cFIJU`2^jLh41T8v7;hyAD&wZ zg|Ow%b$SryW$|HrQM)6HsEtKfP=RY*Ml7Q10nbq-M<5O{dh+ue57hg zwS$j6$N8+O^>YQ@VddBLwFLOh2KJ13k2S5dD@u_&v}NzQ-X#b;_Y(lAG77eS4exGA zMf+>#JqslMttfY1u}qjo$(+Am_>bsu;8pJ}u+37uQ;~YVI#aQ#dYhrn{u=@wsgXE0 z&3R^g89At2vI+GX3@V+SHhT^12zTSy2XUNp&VM4j;xFW754KNR>j^OtUGqtk^LCT+ zBKxz zQ*t8s*-@XfdKZz&bHMY88kc>u>zC*AOK6a(yvGt!I}KF4*&&%qMS89%S9DYv!t=8M zVZa8z99lzHbWFqB@(bDHJk@l>`_Ils+>Wo+ltf1w>Z)Z&$TN=K@8?l$Z8J|`&E@8D zrNJ3{%>HSb4Q&krbq`G(n9qxt)A#&HEBXDf7lqX)ll*uHdEdfvT0~+eM>L_bvi?!T zrVx4)u6!F<08_HYU}Y78`j5B!%+BjKiGS>RU5ws_Iv3uAj}Tx*+&E6BvYT+ro0o)1 zaoFc9cU^_rE%6?OB)j<{(v)7sg(Cu9wV!*&OPeRUq)nc~R?hx0nY{0c-rZgI7h#I$ zD+>po)UmR^yO}%;mGUl@B4+lz=4F*)FP)frb$dR;7Vacfzevluv+=?%$J?3cqAdgE z;nlAo`ZPm#Y51UQuTP%UeB9XxrleZOC$X(sc5^b(Ywvs+N2n3c7vA248xg(j zl@H^a$6^)!BjRu(pu{0ez||jwqB%BC*r!Mj zH(%b7IqoIKT;Ey{xfK3VNDR89vi^A@OI$J$)V^Tvv>|u02P@oH@Koj1>?7jPc|bzw z*%GM}&(jjQ%Zx1c?O~N-wi9!M9W&N?#KgA~MQ@cdRyA})Q~s_K|5zsGgQ+i$+ZFNS z`&f@KiQ(+Z@_82aHv2?vQV{CPMA*Oe8uyz>Vpze?{bzvX98Ym< zQ_dreUU!8nPj7EsR=@SRqOc}GU+v(nCh$g8{xl8^9K&AvW0A13AVQ&j+pu{XE?Iba zb#=>5$mhTi$C)vV7$J}~s;wEQZ0wNR_qVEaFZr+~M_Z!*5pAvG#sT3e=LE>`Be@ii zy7kfKE$PXR`|FGsxGD@t@d&k!!F2i%Ovk+$q!**Wfy#2C#>LjLvBTXJ^rL` z=f$!@qr$;F)5;^4-k*e<{r#VVhXO#gxSX;fBcG@y+v^_Ae1}oqE^%r{AuLyRxp5_ent6- z5UM}R*UmK9%ZBj0&C64cn_zd19o_KG#P7ozd*?^-24#f%o}7&wt|zK14-v~>Ek$>X zL@P00lPxJlh0}-7Esn$}5*;|iXZg1+D$#8kHMJ&`nYTX7#Jj)k3ZOqKx0tdvhf6nw zt~|H;H-ocmrx^W@h|zjqU-w+PZAra7$ZtNLqn5HJCQKycnOdIyq#~Kc45%{1a-Xg7 zPaPp-huV7`uS9z-{eiAIm;LpBMC8l^^L=r&2NNUHBEbKMP=D+>tfI?$sC0csmd6b~ zGWK2&1Qgi$#FDHN@8)%uZxaTc@7%M)TRKNF$0}$ix6a~o;W=OtsciXcfAh#coaupP zg&zGz^oCsFd**XVXAUKngb%r=y-^_35@chPDoM?w=#T z_#cgp8m7X+*RmD3O?JVt#dHpXzj#|`citNVz9k`gFx`WGy>39`{sbV+ePB1ueS*6J zQ3XJJGdwvL>gDft7;DBFmIV*QCu5|{iTRL<}f9( z^Jq9!5wSZUniJ&22%oI|K%fL6nl3hi9=eOIeO>jM(9{}|E6&1%inN?r!Db5rF&$>B z39Z>n5aYjlwyiXhw@|WQEpfhyWOgY$N7*|57nx9rRIz`8z^45C%gC6~6Kz%D@I{uE z#<+odpS2qsC?!94mlOoiXe2y+sTuQ{R!#gf00&AE!uIy^)akx?LO511pXWKNsa7pZ zBCo@jlpcsBh#e1>TzmyI8RFz8sZxsusuxbI~B|x!!6z;~Ze*gVQXq=$1FQ zz&r8$DSl?OMNNTy{Kgc(t{mHp^G!MvWVGhDHwr+arpc|WU0jQ22a8zv@2wS)TOo#q zhEnBvdD^*rn9(Xmo?RD%s~ta6Eqq|C2eb2W!hfe-jidsK52|r06Wk#G1{$>LsT`zX zncAx7ceT$dh#5_Xa+pJG>YHx+2Z&kx>vsvd*OzL3BL<560@xM9O6jYz+*6C=Y*n4q zO#f|fKQnRU=WJLY{qUD(sL0T2y{pP(mZksP2rg2?FiBEY4b+M>Q#;cP9qykG8_9-G z9G_!4J)|Pb)JgQM+ii@DbA3;t$L*ZXouS3f?oWea(o;yGkz9}dqV;E7%y=_B%FU~y zYJCb6CUV9AH1#jp8FHRDd8!H}hKPC%iByi*W%R#abr<71o2Q`Nb4rBM9)#v_oAtuvhW?Ah2Aj#N~T|3&7t={9lvU zQ0!`Vvyj$Z2To3*k+-Jv+s4p5xAFT4L<|oG9fE0ip|hWq0R}QbpJuzoml#+6#Dr|J z8P4CS00sC~HqBPOFt?NpHPE(Jb@FqB&9<&j%}QX^{VUUV;)6tvb7__hUA4L2LAPAF zP6t0ZI`0)UePfA?av}3gxR3q5GcS@RNJGzOZ(a%qzaV#E0HMJg)??HsBUwrxl+NAAqlVRW<-9q_v+>8a3knO1>bFt@{5PHmlZ_FADf2(2^g(384wzshQ4)2tX!OIz{A-8apt5~p1B z@Au@{K2D-z(QS#wyr-`DE&;f*YQ_JK?2WhkJ&bc72B9ruPFMSjV6D#@>sXrGWt=?8 zFmi&ROBvf>d{?h3LNjgchCm`o{fOUZJXB$R-=M@v#VNWvo%BZkT-AEn)Ywv0;>l=+OG_y zL8X$-V=25pqW-UJ;j2Vb8pbK31=GdKg3Y{2THI1id=KwM0yli5e|SYdjAX< zhbU7uWos2fuDsr?FzeUs@2waYUs{PscYSq!<_hU@*$H|PAVOOJ)LlE&kT^TbJ??F< znew#}3f$`SZTP~#l`5W$@I{9@hB9}6a&@}>3?z(|-29@p9)M?~(?1;c%$Wvee2~wk zs~fq(G=7Uc?ALU0;VBqZpsCy11Mj)Ir~hlT$X~8#Ni&|D^B=AH6`TI^vr)}g@Z-yy`=fjEvP&7GcJ*V`0F3Z) zpokE_#a>FUXIMC)Ua&8@A0QU{v>{n)*@q-0=KAkI*xU2&h131@xHfqHp|#Gz8?h}f zP3KZ*S$RSJw$%QYfv2JQDy@-ER^nJDV#yg}Yc$XAEm?k8V@bLkN>w__x#HRDI*_A_vi#6mc`C=*^t-JF15%4TktvmJfI5RY%z|1{u2MG487%CW=%SQMj!vgC3AJK9%XN z#Gq)3o!%}jELZYdt00Wu5#2Nf%%rwM(r*L1RR6u|(WG!!A*%OCNSR1nc~dP&c6^1i zw4ZZ%k?9HozS>?k?zy=6b*h#=OZ+bM@%?stuS$Y)oUI{Uz?F zXtR)H%PJ3uJezXFO_u%oNF&x8#d4t?M65!KSEA+LmxdmU{nyc~*;^4Ob%;0y} zC9TDbcn$siKhkYh3d5i6i2%Xyi=|dLrYOp^&)Vb?wgj83XIQo@{=>n zWpT6JJ$h4bdXj0=1cj6d**1Yb)9UeDH`Knn&$ytDbW9tvB`>FaH#f{w0vqWD`YGU} ziX6P$FGKWRyUO}K)~d~n|Eo=_YEKac9;49V%_g$iBC2~Jg9x~ycm>JuKq zFMkyItvb#96q$v@1^8%xS1ThggRzp* zkOj}kQ*AX$I=hT(kM_bd_R}x>UQ0RV^L6rXkT+J}o^NfLuIEtSsgqfi1Lw$gJhBegfK`Ym~qP@IU zDhYaKw%0;}ShvU0D0f+&j@8_b=taAUf?5|{aP$MILcBZ?8i!f3d7adC5H+QDh-?K9 z=|7Ic;W1rZ`LcgnY<`~*fLo|>TmOOa*`IVhn#ZpeQ0O@fp&eBa^wA^_x5@An7~#i@&#DtZywd)~>VfWl08G-z{8j zltbR|RLtM}E#8PQ8CU6ra0Dvh_#Z{R8s4Ih6gzS5(~a^VrYQ>U#>5swmP$~E*upZ@ zWUXFUdMo1rTfkuiHfnHhtuVu>#mh`22_6^h%e-6ZIFd|@6+DY$CPzMF-+M=_OBTdE zS4AT=k3xRWyZw}_yGV?<6@ysix!qX17e`Y5niTpS5rUjjLKOG4wpQ#*FSN^;{S6hb zu3crmPJ5bT8xX~+p^KYkKE$H-rAdPVAW8qn$Wc#PBQx|ZE0|MdI8dEVo4cQ3jGntx zk~a)T_oe&AmtHH9S=m=5W|%OQ7E``DdwoAiBS4Ds36aIRl@^W!l?2&SJB##0GJ?;l z^gfUt9|f|ZFZ{g`QZ5x^@^T(Qfi@GF6+CpQi zEuo^#t`Q3q13upA`OVe|(wZT7jubmk0f+2WZv=K8gsz%+C#{OcgWmp7)=@AFA}NXb zjZTBW>mp!wi$8t^M14rJI{o6AHXn2p4#QpDT)%%ib!vR~l=1!6*Bc|mVLzBHFSw8h_-{MXCy~DBpHW@NyT_0sd%uq8D zc2|1M(rT@nWGQA@?8V_&*?z{FOckI%pIAjr54OSC4%qLJyg*u~Mp1Mq%9^2h2HQ@D z9X=oTOH7;ou=}vz21w!2T~>Q$+|<~T;nU~Ii!XN5g2wB|>y3Phj!FoM$x%BwstIw^ z9Q5iMKXKh(+11`h%_!2aeLUhp7pl!$Znyt&Xpu?9ah75Q^@CXpKp~LQjT_?tWPAzc(HK{58ea2EO48kWnmHQ9Jtnmp4%tr{qG9DOIwpM6ssE;Y$ORljysG#AE=MHk@SQ6^ z<7Lh+_2+hQXtqPKl>*NQ)tmbp9|zuKUVdK`v&LxpYs*OkB${SKkx?yxcjJxCH_$N) z9f7Yn02kF-ank%RnQkFJje;Bu&*q^O4U{E0Ez7C-?8R&~YNBZRV_7YDF5kFLY@Ul{ zjN{R>H#5B(RNPVYTLo@IK8$>-Yt%-1gj5r3UXIka+Uu6w(rIm-H%yQdH3}O{*o&yZ z3cj&da=>y;HvAH#mSES7b?c;FP>GHm_^RzG1ZYc3m0+ix9daRwD*GxNi2?h9SX6zO zi^WO!jv}{%NV^SM;4k809XY-nL5^a?gRI{Att&5xbNTS-T-L;2$x6t(4_-C29i~hz zOR&84sq`wxi)adA zEl4L>s^4{XMqJW$aPxjAuqoIj@awbdapXEVXLu4AlPM?83{MtWe2df!Ye~JlZtk4R zsjJ%w^MrU+hPO1ic8cyokHD}U?XJX?)v(+j2ehhFAcY@dF>nwKU!6^!Om?b{vQylj zv^QlqDYJ3f8E3E6(kuF%L|px_Wm)5pL|lFC;_w_FduN_@g~sd?O_K?*aUzZ5&qNk? zrX10f=R;6xo#$~if@tx4x3&+-d0A9VwSl3-KP8@y2viW$u9tnLp6hx1`g3(F?ICpn z-GHYlN0RMrK=qu5-RJFz5c2wCwrxAR2D2gBTEh4e@6l8BX9@r1E_2xPjOZ@x7<=-M z1rUK>{ik|7PdUAS*f5iQNO^qu@zM^vziN{2@MuGA z|Hp<}p`YLiar3DhXENl1ftA@e&_+j9IrL|6`haf^^$Xe|-pCKGbgG`cWRyD}pFa=W zuggoV`6 z?r}(Hi}FH{YMd$WpA0NtZ>Rr<8DjY5x@h*hBdxpX&W>V(?yfn{Cbr$uFrN_bJ`VpY zzvf928<2#CKEC3kDjd$Cg{Wrn_Nx7xz|50-sBP7=3a?jgcI@l~U~gOaVJSOx6QK^n z>a>w9A*=DL6188rXT`D2?kQ?FfZ-U@zS5F)O}2$6Ed`Jy4K`M3Ql8HkZ}M8~WpNJ{ z6H&mRhWHC=cjHD_8;!%EsNKBQ5i6aE-pfY)`$hmLo%H zm1^}yaTC4#a_sEnSHpI zPNDJaiG&fx%htkD&K;laVXoGb&u7gEK1dRuKA};j3i?{Zf{i&V=tQcD9y=VZ7WkiP z%2~CARB-5Mw#(N<tLam{6}A2{^;%KDZXfZ18>&`xf&B+lf~sZ`P2W-Vg+D< z%v5I`V~d_-c6=mN{tO?~(5Sl;#67GMpT|xxx$`)tCa20DbD?%?@$`~Xg=dQ5&y#`? z=4S>JYoyN=`x8Dt4Ys@-q#Mu3=P>YG$b{!;mzTnFv?tasjp22Pm)=VQo;g7?@_<#3 zX7d^zYm>;x!M>j9G3Ks>OYMu0|C*cH8r^^H=?N?Fbs$nuB0thO!z;FV%R-`kexISv z_qrm4Cxgq2D2iN`#Wa{-8gm`i&60FW8mAZt_JB>xLPFA9rwi-rbom5M&(SL_~!Qx6NW6obL&QVJMqw`X-nI=4_ zg6K%&OiN6&YQjgNTck}=zAw27mYI;QxmB35|LjmqebRioGe+fLtg&UPlKX+V+O<(L zB^k78X?}DY@Y%wR*#E?Q%5&7lp4EAbb6iD51hr!7^|Ff5=mWuAL47lj&9Pl~?O0oW za&gJOjavp$vv5=6(VgA3(BTyZ1d5m=)#u3e3}`*ELFnPu&Uwp5g=XJ!@pu72*?I3- zLs-eAJp`K@xqio%A}T*s4EdG2`KrsPi`Ckr3?jY`iH!|-dB>`#lb2up{4#DJ!oT~N z`(SnGJ6$zvL;ENDHn{Csd13r5(Mcai?rT_zhL0qe)iHg$)!4V8-fTKWm&d^jicpaK zsCM!yyd$9mU3GyI-jqVIn+_ zO5M)qg{EN{+!ZBhGwV z04a@)L=ScOUoAwD2BvMCsgf%=09Qv`OwXeHe89#`Nj}24qy6&~>YF_oZy3M9&P0Dc zu6x7BPZS@RzIKD3XF{JF@q9?;QZo!6MJEB(R$6@F(43B0t((h9s0KVbYvscSlMY0C zXMOhU88k4_gY#U!+=!GFnSo5V*7PQ4jtInG%UFnH;Wp5=CFsp;iEbS8*e)C1>-?BUm zST_fudbVb;LjGkCCMsw%gx9$xZJ&|8Za;^cM%*GubAAuDt#a*y_JmYODMThMTeT-1>Tp{*~RU5u?OdCr3w%SGrbQU z&RgG5kKt$SfSsUYzxEdK%vH>FI0jZ7zpN}>S{*A@-E>-dz~@X#(d5R|$iEX4Z#|mb z31Ix5<>g<{xp!&Hr+?tMq{boWI>=v0SS}6MVXtq^5^$CRl!Uje7DsoV=wNlb^-YN( ziD`M^hhhNHOW@hW@@zG~tN0Deu{Vt;oj^sY8dbigZY{K0uEo`r4nbM5#euOpH`8oK=`_jSK32~zK3i;?QN_VWZxty_DQM|N zc6DQeOz$I1&{$O&ySNXjBYB+cjHr*o4*oX9p!kX<==C-u@!}$)sNmwS^m~n|RgcRl z25I{u>3iP@*A?H8t@Ev_yBBx`0b7;U-l3^$olzDaMM;a>{D$7kI5X|tyd*;Zl094e z8@x@=7#jKEXw}>AE=_kO5LMK!dt30YVF_^+t9JU_4iH}VUC4_r256Zm+O1In)8G65lDvzGk86!E5Q}NbPFfTAzleicFnyR7NdAF#0Gs0&z0M zlq1RT7gthpOZH=AjC0Wt&GCAlF8tZ4&rw+T*EfFN(~J}OLMwONH6yTt$h3n}=Fv2_ZgaEHX8;wF0 zTyiWz6sFFq0Vqgh>QqoyO^Mg+!i;;xTD7$vM$TGKZs32Lro~y3_t3So-7V1WaQVDo`eS>F|IRPsZ z{BG+ES>!iF-o4kYhdpgC^cA0BPK7cSz=@o=FQr5GJ`F}h6@^7fpQR-+5y(^B1)Q+A zoQ!QzeY_JwbNrHLX%Td1q(BE|xYzDW*gQS;q$I3bt@Aou?V71{GxqYT+HY}X*ewnK z29O(al-W2i=@zGuZ*eK>7tnu`9FZL5pG`{A5rwxM2Q+q#Ck%=hB$v_*3{>be-gPiLvdobUe(mgV(YQWcz=edUg^t*4QtB3(u=X-h8u|M za|j8>zQ0Z9A$pS!-w@`0QDe9A7|BON*- zuJap5uIK_-Jg2rLpJXY7B2my84E7HI8u1447gL)o8nDYpXZ8 zMhh0Xn@b&ed@DKIB}bxSp+R-cv`?A5uL05Ryw4j8svr9j$n{Jr*6%5!7s@MEa>Wb- z>XygsZv0f`?tWOPdSae0T&X%+3p2h|-sH+qp-`c*K@Q-aCMSoXk&E($U#wdHa&_YV zv2l2ri!54=da35i2~kc77%|Uss?A0@Wx6e7AJr{PHU6mnP{_pv&yRsn7M{-{%KaDB z>gt;RPE}xQEs9|L5AbGf8TVC#$(w}-_QcsEg1n=p-K;Th`}ef72df1`BpPPBSlpmS zzwWKraqXRiyH~v#9r9;c;;u|#g*Zql5aK(dN+vbX&q;UxhEYMxTyU~iR27m%k#?1s zG1>?wBF2ARjn9IEp2X)^oDCO4s{^L7*NEA^{y^tA9rM>-pF`YnO`(E}PK?UeS}i>O zRSYqAtcJ`I4XwmXv=$wc)8_`?y(6IB1g)uXAfLTje zKq$(7rTJEe>TUN7l#ng~YdgOkB%5IFZ1>U^W*bkO(Io$`?Ax~$+cTB~#k6g{G#{T0 zlpT*BQBI(71JbZL$3XRQvCFL|qnVTGKb*)6d6rbF04C@0nJ16qgj~8wYh~Y#I6tW` z1cr#!%>}jrw|ZQ7_d*yN9-s24_*`cD5c2(u9a&p5DCJ}TP7FdBzW~{bu}vPqO??at zMd`|8Pa4a7Lr#|CQb3w8E@M~i-ZYT8vTFE+xftgdxRyaYuPqzYxU<_1ExZYWrI;Vj zR~i?Zo*8C26-|g$ATIwx$|3b}77f9Hr)Q?~{D&6=f1rsDS=ypW3`a|(3@E?0&5$?x zMDJ^dJR+^mJ~g?6Et&M8@aAh&0078$WXAgqr0P4XB*Iy=P5%{DZ`X=dUtW{SR1q_M z6*bo*x8^T9GgqnXv8!FSY}Oy*Y;TSIFPFSylF+=3C;X>rpLFbc4rfn2(xuHpc;B79 zw2Fq$!TXl)Fqb`*>WSv9%8oWyccLGtsqFq>e>%n3U&QimT(i81%Qh|Iu2D z+dkmC+j1S?3Z^64ww|kTPG|_Mby<`kQ4I+316J)1u2v8~8OKA>nZ5H}E>mFrFQHsL zA$-`hJD+;GIl9+-BFx#HZRzvbyPvMccGYgvytBG9`^hKU8iQ|ITwYdzlxqh@p~&Dn zeTvJk9JYS$0d#~74B3sUj=Vlo-0_zh38J7f!T4MYY>*FnvfVT!bU9+7h5l7VwLQZM z%I6Zm^A)@#i!gy2YwoIsBYw5p+RDC`R(W&QC#zp=;11qLx$~5vj@o7Fn4Ie83lIBY z=E#Gqt1w6r1iF^^V1i~+nU*#BGi1p=_2G-jOdV_YY)R3iEo-z6ZU8~0Q2)&6BDiA1 z7R3GmbTIM8h7qqgtAnrJ0^{6IYt`-KpecG=<{Dnfd1f|VLHOG!(@VsxW9Fkq9|bE3 z0c4s~B1vGdfqa@RdRd)U+OJIGSTr-%VOn3BXNzI5+mTpj&Tzt!!UhvqEpGy>oH;r{RO|xJh+$>b z_VT<=^?)?#K;E^DOY2>Fj%fn#Vmeg~g>y4@17kGlU0=j7vjBM_5bw<#Y-zuzy7u(y z3OD&+%yp+UmJcoi0pe>dfpE(WG0w^WSlbdi3S$inGC!P*j65ePi^ODQC!Fs6ocG*pghg;D0YZ3>6Rq%^iDp>A-ZVI=lFTbk%e!2j zbfk*29;`#z(o_=iuUi-RVxd2pXV2S%#bhcAuT;F9nnL*hhqkMLodHMD#g;Xcdd(o0 zH(_DrE`$67aNVx z7$@I|&J_SXt4BDY^L1&{zjQ^C?IGbe=Yub!tmYiBd4Rv7u?#whx3u58Cvo_4(qVo` zIQkMb@Z^+$o-`Rpa!}5%fJ_dT0Y?ly(p6Nru2-xIiIOSSE}c0yKe}v!k6a(17Wz`9 zq|R5PN45j;B@g5pgQc)t?=&*M|rZ9E`4<;jl1}JEa2PMPR}1HA#3Q1 zgSL<>*~75=%O`w*{vH$*wpbDbLv~JeTtvu0BRD?Hg7$06=KPUJYRDTRw#J{WFc7up zw6``wn_0JGTU0SlioL4?!*uHv&VwE-q>An0!c;0_0O-uVsyvhAJAthi%EZK`SnyQF zcb)oR6SH|ngyy`zrB{lf-e;MHDu5E!mg&XHOxT{5mG$T3sb2WY|46WI>reKJG%?8`>V(04eJAUd2sK;iJg}lzcOJE|Vyc)In?J;RIl5EG=h+2!OPyd=u07Nn z*`rtZIOS?so|f%qP|Bqh$3r~E-CU4GzQyg=%ndJQrT-Q@Avpvti#YPC7!#@OW3QI} z%BJQ^mTn%@&{xLiNpzG z<37O_+0j@Zhe%&2Y~%ZWC`02x;&`K|c`RZiD#X)af% zb;`#5cozjH8%PK2JCj*-UluXFP#uAn(u|4}6qFx-sFt9vmfH4QReW`MlcY+VDM9WG=b*v2NQdy#X)NuN9fY;ces`oUjQa71Q+f0JOxv3Lz1nCaAu0;D8&W2lW z5z`~lbk#ADEWxy<A%t#mmM(>6#-yA&#FYZyVkT@AzXG{kLv%^ zf9xx9OnX3X&AHO?*=6HvEq@h~MVFqH`_j|#XR9UitTl;>m#EPG)$K-XO6Mp`v#oD2 z`YLeEBQl`DAzpeoUv?(v!D(QVEpgCJNTjXM?SdPI(9ZMQYoA4l-*mPiy#9`}QEzyE zwUCpknkm%+ne1HI67U(A{4Kg!;z78XEJV`GHkLAC!jm+XeTw2+j?Z9=}Zip4-w{5{%^SyoIk)EFmyOWa<8JCgs6T{$I!$9a} zp8jfQE#%VQ^C}RQR9^4yelfck)LEZ5Z^qNUx`tG3TItQ})BZ7YSjSp)BctPG7Ka43 z^Yz!13FUDb`wpiMuxiqYyml(g{RqvlQsBGTEq*%-?G(3J>|Sk@Q5!Mm-0E;#d zw6?TRzx?u(&(XHEBR?$HBWE<5KQBz(Wm`FR*tL#EF++FpGA%~5&QHIs808JH2oBvc zo-ZXEx#aqjOL=d=y4QQl)qr^5TL%a7GPIiQ==R4f^!PFe17>{z+RyiCBi zku@fe5n-D}i6UrDu=HXp+|o4H*f!lZqt)ZY+;0I;5^7k&r;Q3ja}h`Gk!^-*+X^wU zDz8Yp1~bunH;HO;&Y4l>V7{YGjed{oHg8{W%F-%(;cUv*8LSXhSAWAbw;i2Te+jz+ zE-#C={LKWmyMCAVKs$8`BtTJy=3s@_*1Ek5zezSHdnrhMFGa7IFAWf}eGz!=B;~~3 ziPwjn_Xn0PFIy$W?{$J?@)4EtI-MPj>b})(J=0Ak2(|nq*0EP&eR%Y-k0V1i_@phd zoka<6&bB@+>^gW5m?{Si5lx(Nmyh?nk%7Hgi}c6&admn#Kg%j1WM(?zRjoBbgpkeu zfy?97JUnsfO8*%4MrGs;k6=7EjWmz$$`9j4Z5?P^;=%+U!|_fS{ke%qwr-9wa0#~D z-nLZJX;crIw*)-@^S7qlg0CQ`NhKl_#@e95|5|9W4*%;XV?wr-k>(olYrLo2J@%jc z!(JHbxGVXwZ7;xA22s8}I3T(a@f8`zfzhE3&X=QR@{XfibvgO{<`JJWZ7Eg{7yTGA zM(FN~xXhK@U#Cz|O%SEgVQG~~A&qhDF8f4RB-XAceJ(`4OYiuPs7BBDoS!&kQ@$r9 z&CZ_b`!lwyLhZ1^B3a30X=Wx-w=Qn9PbPz~kS;8g359SZtUF?UG2QAb|J_bNWa zS~H3xTSU``Ax1>ggQWkv5o@fGesuP=#!F2j{b@5zpY4S0nXQjXA>7O6%qnf#F)UvQgNQ0fYBy6DYiVFUvt9mE^ESb+wXn?Bfj5Y9W%TgTJhx88;c-Cwj@yXY zYI)ee9xw`#HuO{yky!0%6GghZVA*7i*#^puE# z43`w!GPc7-FS)E|0bY;If<6@4%b1TksA{nCn}lnPKv|wp^RO^7!nIDfwUfpWb-Fv^ z8EoUT&7@h}AJp+=ob9~QCbE`ovN;pD_hB2Gk{+9<)ksl~9IRGcM ztbpm*xtroOzLT$-$V$O>YRv6Tq}b6+scv!zXRlzQzKO}Ms~HEEIchzM$CA0^Q zx6a_V3FMR@HAjsZrGrx;g8zI#8h?F0SvRcz2)ZK`xrE(AqZ-29>-RwqQ`R_;0q8WQ z5Ka8Hosku-mczo5+eLdPS)?OkvRK;oY5wp|bCc#yYD2TcKA^(Q9Gy~IFkmnEl~xxf zjLk;n@%xa|e;ycP(kW$)t&VkCP9@ywY!d$U$6mv&=-~nv6H$POfbZ zXswcr;EO0d>l3|hj0D|~HObQiw8ABN4oVzX^fF7S+B6*Z1YC)K$Ey>%tg2c1Wm6!@ z!+dw_*McDg++xLWGIx`fxJCtDLjq2~rH{dTH=6ee3V(8o8>0?sO4Pcab`azh_sbwC zn$Qx1Y4lKRS1D(30u2B~^1@>oV2*KDD=gkU*^A*7Wq2|FCaj%jtl7O)LGd5XFw?!~ zKb+ZanF-8jrz1Cwc@bmLEcT9W6$-fWwn9jnauYBee zLID$hkKOq!5wb%Y_&sT{3OKTO-|qM^0)GUE!o^SUzt{-wGg6;aVxX7T$aC2*yLrwqkUSZ@e42_U1 zrO!kz-eCpiz2f++aw#o8Eb?E1OIHVr{15Up2m-d$09QLbBi`Cmvr(5*53o@WaF)BX z*0!0Mv3V8sJVaH>ckjVPoAvb}7Z5K!g{k2PtRQF{CBGh7Q>{vFNZcuqT?}q}P*Np- zuYkOP6)${@{P{ms5-SfjY5qD=nDkpmUejl4sYOj8FUp4K{}fw96?G16C=&j!4_phY z=Wg9?-x}EXA>_iC{<^wG86)pquRrQzq6E-b`Lp}t3ZPfKvx1dE@#_EK2q16PVX;hm zcUMyt3cc7hgkaV3qRQ+2v?%2D?x%P)Ju7MZvq||<1lGraMI|Hu;Yi-$pOp=Upce7v zB0}z;%I$m0DGcvp(fxN(m7&sscTdRQw)%^Z3OLS)D#}2Zm z#Q)K?rHTx(`eYi|(38DX3oA%f8uZHq;lE4%lsfpek`?ccTL>h@f|Xa39aAN@7>^mG zZLpA_aC`jcl==<19r`msVlFIakun1Gsx}oJ%_D=EpM*>`q5cyqS9J3{!8}O4~o4 z%_#~wzmtoI%GrYB4E%33-4Nv6|I}?w0G8fQDDe7!FC1aF%aEc4dl2^Sv8{s&do4Ta z*GLV`{dK0e2wXWVMG#-~ONFoA?SDa&(tGE73!gr{S27SLc%9lGbl|hTsE{4W9J#7+ zqRg~JeA!wIKp%hP)jOO=_ZglY^UJ!PtgAP9JqfNc%BrC&X1Ws~+rMFi`1rjJ>Rb$$ z^27F@TTY0q9GD+fRPhyGo}n-Iy73o_!_VMIbqrP*KaDJ!pN|>b{2_)FEkmaBR(tkY z3sI8oy*@z8L4DUtDKxc(Ja>L&d?oFV(0YgZ;@}b1P1L;T-PD=VebYajKj31R!l6h& zM0L0+#!n#OfeNA3ySNq9C)S15>r-!WULq=b(+bcK>&CIruzZiez_n(1%UT7V=G3?o z)W|&e=a}HmXJ_|ju{@TB2^ux3JPI+W%oyI!!>Y`P8UO(4p2UL)=0808170{-IN;oC zX>BPIPYes$$TpYymd6pilc?(8?_^?7s~SoCu-tv(wSE|VtF2j!nflYAcguTc(s_22 zclJyAEmik(v3oV;(yy~kN2mb)ipU7t(YL2f;&z$G!d>FY1+Gq6 zS&SJs^VBU&=2;8X0iMMY7%Dx`(8>75gdv`USk0vv-*_F6MW&pOvS6jo1>%Pxy)ETd z2Z>1bVIi0nmV+1Rxd-Z_Dr-uRmaawzH=3FxF?`@pOuk}N3(R&H!vO`|g zdO^<2{h4O#8jGYI?*(~?{J^(56;wOMpFa>5aK5%Vl_kwgm*hB``ZlB&dH$=+d2tu# zQg%yD+Gj}i3}s>*%Z=Wt(S4LBOtrw?GS4BI(|+Ec=7^oO z&nX)dVjg0*JP1<=zkqWW6r`Qx>ew2m&f~ezsKrW|l>06WY>*5b1$$*~llZKh5=bIb zw=z=oR9r# z+`erRs~ZO#J+|IwtLOdW6gcW(=3wUFheO1ImLuGJXZ-2E#d97@1F56sgD`|JtR=Qc zr31d9~w`Am&=7TlB~sYViR;cmg0r8@GvzbT+cX8g4m3WHc=!n zFsGfblukZ{9|p7xdiNWeI;z12vvhr$^WU#0!)DuAtJbULx|^GOB7=26%HMgCb>+mD zF{J&2PlzDVx}7lCOv!AA_LG&k4fBv4JM%5wP7U97(-pcHsCI~53QU~@tj}7&^-ODY zOARFX&HDKPmMpIUT!X*j)}(;8%Px|&6xBW^e3R|S`BsVHm9TPaV_W?fxAb)jm%Qx8 z-}g=0Fh?p}uuJx?YZBqd30zI5;Ask%-&voTgm4(cbg?0rSLS9eAl)gWRi1MHqxu%< z?95Z-m{X?lOvSDIve-7H{4wS1Fkh{#aVBY%d>LsjYq)4?j}ni{Ub>HaI~l#7&({AJA-F+49eRo@tr0ahv0 z0r8p_gZYXxkP{%%??Xc_& zkb5*r0!&!RSQ?@N>;>ClU@nZ0YAbLWVFZ2u9MTc}_zYpV5Oq52i9K``A*z%6`? z>uYo_u;6nD2lh@J!}z8Htq>PmJ`_J#C=dsh#fgI zu;XK73%B&t9e+!{LHm7j-&*ZF&=nQbb-x@|HW|vtB@JA=sX+xp*A~LWXZLp?rB*7C z-%AI=0LW!rd7WE2kB-NbY`Sa9<6rVKZbm?(Y@>~Q7f#v!uW`&e3uW*N89;1vOWq9d z9c4~i+?lN1?&<1ViS&5qOvhfUM--Vhrd>MY?MtfOIfSkedzdbQKiv*Mag=7@XX0ih zQDS;Ti$LyfEs%@`Fk)JfQP3Q-)hxZ8q0U>x-VDHa*7Ku)+c}3L>;*F#Hq4s#AkEmp z#jr5%Mox~M?9^S^(9XLSgHvtYe>kpdD~n6b0qv}HK=YZPD?``%YMxF}6Z1UdnkcV& zcN6b@ad5g9yOeAL;er15C7k%dzp<&-0+aflKQ*5YhG_5x#xK-E&XGfLlZ(30L|0F~ zBi5LS$C-ku;)zNg%DQBn>7sVp!Tm=A(V`jbDrRmfDzgHf;ra|^Xy&PqP<_Vb4bNjL zhj-uf_W%z4c7pY_?Y&Kuz_w$To2*O13QRrck!?$hFwPHX=lHvxvchkv8p|5n0nf-b zZ7H4NKj)jVTZ~G(hOs%_l-JcCHoG3c-H!NCiTmg6U6<=dK>n-McF%VD`PzlHfz;Bf zHH+ZX(PQ1YXe`)Ew;mb9-DsY~$zbk8@{U6-;eBJQo#lcpn|1^R*6Xry?GLXXds3gv zvNk1=O9V2P72!!>zoqwPP&RQ${E(4stF7+EvZ+>=A(wrO7%blO%A3;9JJ{9ee=qC% zy;gsKB;%VpOq0N5<*+@AV9BVI&-}*yD?3cHL(_}i#5|05Aq7b3&@b#cM<%FM!SP`| zfJf4>vn1M<2vomNe}!p7sLodgG={b}xBTVvSQ{yW1}?0I0FkB0n)%}Jhw;3*oNgkU zS@v5ki(oIaInj0Ys|R_5QFNwh(|U8kVD~Z=N$(O1u8C199Yfz)eOMp@mxrevg_1^Q0*7q7Xw@lRx)xf1AL3j)X?hlfhY}c zCq5@xfzQd139YOjMpXT?r7o)C5Nyawwm4)5q4(=&4IwWT$>xetsd2firFf?CWjz@< zrH;act+9n?<{$^vRKF1L=cCqVe0;C5bfs<5Gv|-NgMvB|96wO&b9+o*=&!b&DF*H& z(D-+3*2H%Vkd7jUn=fC^ciU~0n3lye{^2+uC{4ZJyqWc=-pwUbjvpQHaKYbV4;vq>-jXbf~;@P_{yoFe`noK=ta_n<~~N|GQl$*WKDXC zi3b1I<9qh23zP7RLsr#mivH|)YWm`K>h6D~lEPFdMq=Y5R^seJ|4=w5!6eJ2k_l`- z)tF+y^gs-G9w=?U|HBE0>?Sw57mHe0p}x3Xc?GK>#g8}-x(~feo95lBSD=-6DaF86hx=4 z1ia@n=rgn(>MZHy5ur|9HY}$ggt)u0zj1u_%i`nHDCNrJh)^`<@;|{TJVFdQGuggd z*6(<#+Wj0+4{q_iii*$ks>m^3EY*%obF64tSX>Qv+)~1V&29h8hA23nbm8tj*tS9J zi~R1cA&}Hfzd=cc8yp4evz5i+E)l|iI4>;!oMjd_VQh$e(l9x0U(zB&eSS@b3`F?q z=_7~W=!?4uLE^}j(T6cC1Mi2%`sjoJh6=9Dl7vV1VW8`G9JqT`?*_oX>~a(}jKY%T z7u6Q*zT=N?b3Tp={*>0A{*ri0ok8Ye2&Q*EG;8QYt`qdGw8Fto`V9RAB?GZ=Rd~Uq*Vy7- zGezp2XIyycZE^(`_Y-djriUq|3>Lp=n8XeHne}7MeV;7W5TD;$c%X57k1coPI&}-= ztvGT%DgWpm0(G}ku{^noWnZLIeHfdKT$^|npBYlOO1%Zz*a((XX+Q+W2J*H!o_^7~Bb)JC|#;?E>}8n!XrvW5UU-Lc0kj_oMg z*Ntp;n~5gqCOHN%Q>!RaPL0ph?SZ+NTjMsBeZ4a^&lEHIolNccTFa=tKf>C6b=yY~1)?r7IO!i&&>&TP$wn}T^Ape+N_?g(vo zfHRJ@xCo1^eg}A8meON<=`0)Ikj(Pn_qlCtMCQ_*^%%BjY%=3nKihH~=3Y_IcD?E! z;RU@}>t7Bi!%{Ia%}8fJ~P|Eh-I&TJY85U|ET^vjhIsh z=nQbid~&hOUR+_VMENbqi`PyqH-Qq?s442Yty_E2Kaj)|@gGMnGs)yUtEGZkM+}lE zVms^PVKMj7%$oZcw)K1W{r$1W9v=37?|shBdB4wj z-d;T>Cq6_=R6Pg)n(3KSwdpPQL|^JP!g*3lYHP@0Ys{uS5H?bJ<weV>0N zm%D0qyMKwwX??etgGPKi!UX zD`*As@B7}nl4K|0_|cN^^{axY4kWH{=&O^pt+KVudBSA>@|0FFWb9l^{PwgBYfGQ_ z_T5Eawa-E3Hb2iM9+!%G$y6{;CDSPSHFO~CWi}M(^IGNaQ>RsO1IMHtwnZ%8_y$+L zJ5vAf$%)R$SL^m6d)^+Q1BV_wBkGof$1nb5#T5P&9jApbGRD2O0xGZnX%+cag_ClM zo!XKZaYuXR>Fv;WJ~`C;AWdIb`<|_ezo0DOix)PH+vHWEo__us%INL z6U!r)UDN_rqy)s;w zoP-r3>iMJmpDiZ)UpDkGo$YsXa;pn04GdMLsZa(NqRXYtss8J?d4$(p0;a|(Ey(ST zgNn$UCpA62H6_}`wngbmQAiZ&X!6OxDP5`VDy<8WRC&D;5efM!)t8^tZqGuZsdX66 zT->|3%E4O`o9+qK>K53W7hWy5JJib^{rH&hcqajDWdyRXoh?Z|{;35g`rpKV%l3ZC zo43;=-d}s;uOoKMfxAL6S_`~X|J~sU~?tFo%rjC+} z%I~VvM3Par@@GF=P3h(u3{Y}g4yQjI>J{*JN{JU{eQrf=Hii@dxh4KD%AOT<3x+RL zeaBHf(y0P9-%qT0RXj;|e0lxhKr+>Zt?NGbQXpS}6aDj7Zb`8!%X>VxQmq~m)TP&H zt+t(I2{p)<`Cn7|%xrfqBV#nPJOWayPW)-6xOkjB?e^BwRN`*6i~Ad8lFzqGY_EHt zTs$>Ym8COb*nn8H59S_z`=>B7c##Je_NlLB`}N7Q!QZ*&_T8ij2~94xt+akI{sEXiL2vSUzUk=1^3>ss=elEX#75COCDGs-nR8Q7`lBZ= zdswZlyN^D*AL?NKR)5^UODn0)SK@^&f^HsgF{S5t(IR*7^=Q>slO5;3MklMxWVjS2 z?#sm-{kaq^X_6$nIzCS5U#L#?Pcf*E>?*_xB(7w_pX1@oaaMujwT7#QWa(Aw8;GQnAWw^Wy65Q=YOEF`g4t z9yTs(>5=ph=?w-DpLr*fp8YGW%J5{X3Y=X8z z93m9(V@?g4SsY*G44%Xy^Y*+>)bWztiezFfEUbJ=MZJv${)~%@i+MPeWfQ2Sgr(0- zBlb<>XlcV-x$5Xgzb1Cuni8J=w_q4w)+Gw&o$5MW$DXMpia6^Dlf&}0Ux{GDhWTca zM3me))y`qy;46NhC2w5O6{cRFz*$gVe?JCBO3K_Ee;MMPL30_2QW`WkbyBqa*bDq# zRt2@Ne3oh1ulBtd_aU=3AbFBt4TvgcZc5i`-{}@OB7ZyxD^{{c+ZEe7#TOeHH$U%< z*Vv9wT~WY#zCIpvuD9%uiOF#*3(4Zx`ddRk?nd!qer|2)UCA0hP(Qqk=#YeZ$PnNj zw;$6jH#)sehRHT3E8Oly#pVK`ymOrKl|Bi+3;j1L>o+eY@ST#43%Y%O!f!!k%ZnB+ zXFX(7YW^jvkh193881Esdn}q$LCtO2E4Ypb(7@_6zsi!VAzk)!8OmQ8|KRYGVBukE z5r(f#2DTydspS?=8+x2jj$2CEiqCP%j1$P@z^`EcJOheo)-o&GJU@RvW4HkA zDhX5AXbm3s(!3pJXuW=lp^Q8h{#}28JUbNbhN(N3*eAufR6x0y1iL6@_Gr|kb+~P! z?$2YuoO8(PgMK$7Ys%5blHub}o-(7FrNC_HsMH@#?v=}NI;!{RfeQvUu2!D8!+iy& zdzg%bxa-$N8Y^o@Z`@F1E`G1B{#IRERax_DXlQ7b-_X$Ti9=m&O-*h5v%1>4SJ(Bv zyyDH%`w}hsWHJ8nxyRgWo9Stn%?b;2Zx&D;vr;9StqQX9_q#$b*Tks+PjKMSc`_Q1*ngDam-EdWP!RR@;6I1mYHN zKP3zP#$K00+v8qqBcb;xJ&L4a4bCki%?!>*bN!}_n2}2O8-@h;)9=L9>%xW z>SsKoa{9r-wlSRx8{ZzSm`16TOL3!bS`C@f^GB^~G5<4?t>*p1^tW8V##Q*E0dc({ox?hyx%?J$FZbDtw90x)eHTO{Dd%j7D$D`%)rBWcdG05sTv=_sqQ z+>fF87xd$wXAf|a#c^rfWi`SDAt3QQp|0#UJVn2Kmk5!=7~^&dYt0EcZ40b$HF9{k z|2}#jyOWDV{bP-=bW=o1CKJllm4H>`P@uAc$oq$WWJ5i99b*9B+33Um1=%G4jKKm1 zu^kJt63=5F1;TT`9pe*fol7YAADaX81}iwnaGTZCM%jcO%%SOlxhXp=1fD_b6&JQa z&M|$55KKgbEJl?9sboQ*X)QA7e-1-t$b-=A2I{^ad8goiMW#=fT_L)3Jig+{M(3dQ zEp2(n?d)gk=76&0jUm2qB#q3SAs04vU_a#;zIGB*c#`j^!2DA`Vu`naAEu#01gx=i zKx&{VK>~0L6uH!ZWo~}SE43vg*uS=%fbE}gCeH!gdQi*^R{-L5{(@BV4%XocLt zJkB1PjfzGk0`brQ`*JZ>bsb=D5JlzO?c#ZiZB}?wxQiUt4#D}073Neo8gUV*KSTq5 zh=V!OXoB%Js$2kwUj&*&VTGSK!r>>xfI|nNF$IF*2ds2}+!4wXi5qnq$`i?!mDj~rGU54=xD1fpoh4Evu9%2IqaQF`*oGj7PdAYbstmP2?wk~?yJH9- zk}L|5RYMj5R2ZWes0#1>Q|g8qEdzE(iZ&ZF_;@e| zYB%=J;)(%SqE+s6Mm+<&Ma7T#t-HNXSEDJWfzP zc%6P;%}FE!WaXkt6G-q>p=1UU@q}_duoxePw4UgVWQJ_(=(np3u^nXY^vcW8i2}n% zwg8ffYa5U9M8zI~H;@x@4gyH{dfs^%@5pw>zMverPlH$l`{3J)VCrs@AdNuLa=;7< zbY9y>Zj?QlE|i5Zuma}FzY)x+Vb3RRimurfZml?S_~8BH-K$=h5Cl48hV$~zjq1=v@kO?C0Ad#rE55B z{6{dxHOqZnm8U{oH!V7wK4D(f*voYdhWdZ84l?exdQ;VZ9s71r08dR9gT~-c#@h*Y z!Cm(*WV4BE03!);YPHkBJLqyY;pE%Wn396&>(6hhZw*~~ndw;*mty36AV80k7UsFc zp)Kj}fJ=8pPsq2)hj^CbNUR`eO%da4+U_o&0cF=lk>o#l>M;P&irBsVmwcSK!i0*1S@pW#bDSq>};U72q zN{HW?a#5A4ZlTSfeqSkqs8WzBqUVNR-q8q~QQ6~75srbys9-#Q5%)7#g>9}Vy0Y1# zS9EmVqVcaiqIBA(u%WTqB4Ht>7x6vFtk=66-FQ<_cu_j?IZ(knwaI57pc5dvq8U8y zO^>E2(mnZTl06ag2XlBIJ{Yn^_u7r2D-qYR~? ztI(NE$u&YvwIISoMC8W_*iGsN-;njE0-BAHs!_pVLz|O1#FjiT8nBjv+;!g%v$Kuw zyiF}0x~YxjUOwYqK9reTLHmy1H0)xAljFebplm>4A|MniuP_rX>ph$H5_?z8AA`U^ zi?$SdpFcf8LaLQ4@o4U^zXHR$7h5#vZZz(rw>79?cp57}%|o~seq-1XY&5=RdVOEJ zrI$dk%|F&&*L1!&C-;r!6P;5*BAI&`_C5Qfi(J&7*G?B-dYK){QQq<5>8z{uOmiyb z8f!DLd(+)TH|_htd$0JAP()Yz$2kLdhQcwHRVj1CsfyX|Rf zjjWimrTkhci0w9YOU^GV`(W*p<>xZ4I99zm{*Dwk%haxSyWAr>16WHR$g;Jn#(Im-zXo@x9=E zp}JAp!l5r({$k{WWAZ)0=BU@&7y3F?GM;nXkS!dW9r(PN^?v)*Qm~zT-1U=pm99Ds zO8OWZ$pGfMxyR15njJmz0qs zEwu8tr;BWR0&gaX*Xu?PZQa6%zBpN!ta|jT@I;P~Xj2`|vmEV5`9$?(e5N<|U*!LN zEY-TITkf3Vjf+|rN`DLpKjmZ(`si$)Km8o`vdVBSE-%!FmTb|AhNF#eG#B%N#}apQ z0}Wx0f0hR)*JiV*EsaaI_D}wT9A;;gQ%ZD_SHb$p13HabySfdA4Pr=RiK+8dd=}29 zcg>lj#o|A3Kbfzu;-uDgnu?R$sYO-wH?($d#9F?%X!`c~jd73NCTKR>ok+(M1^VBQ zwY^{XY=I1=YOYP`-^duUTr<>n`#rG2lcN`tbium&aqfpio1V(|)o=7XnjiWnl6~F0 z^L}!C{u2DaC*SCDaHq2Pc#u+ zq$&Qbb^1HDb>p_JyDD16L6+q*O2=x(p8OOcmUwdS z5bi5so4rPeRUeu({cNYoci9zW!Ys$W|8v^*NpgX=MU58rFfgH>ltT7EUh zp#$L7i_#a8g9Jj}?|t}&OBpZXe^gXjv$KmXC`)NAV=6L}o9|DhMbJ>3{Wr*AN{bSr zkzBL3x9uYA+P^Avp3xzg^_`A@sj8q$IzaOd+4@*tOjzd50au~hw%4xNraBpMLE2B^ zi7q&{`sU#MyVJ^f`BkeEPDdlG|5UDe%Y+RkEM9BVOLTmt0~QcAUx9MOkv7qJL*k(V z9y+b3YDvvW+8%f3om+ec6pYZ~p83-VX|-+%k*Wc!^947p*1~`jNtUca$&AoGAtJP9n*O#+l+=6)v|iMM|5)ha`XqX zro9t23nYUvLT|kHHz1X9NZD|=?U>!#%}cv!-5%;)BMokdlPebouT{KkOl`P2R&kGG z9{NisIZFTNv-*ORk;j!|DRxx#u~7TzI;rfb{_%_g5YRn$ls`PC^{5UguL z-R2yA=d<;(XC@YHUV%fr*HKoCJbKOId!xX`z<7Vd@{7NB2i6!XAs(yNifE<6#Qp+p zo~B>}W#eNhv)v-G?a=B|!FcamNV-;$H+eO53#%*b6;4lbhi5<4I#hbwcz0kjaXI%?vSMCqhh zZB6kP7oTv{o(aXJO6Rte<+&;r43y`2mX26|)lBP(LKh?M&^{Cm2Ed1mhLO~lVEKxZ)d6V{-*Vfz)AnHNY+Y?Q3>UR@WpG=Xu15zi_&WFFY%vLyh z`Ms9<-DmbQ{Z2k{E45okBTuINS2rcbHgLARZpmO^up)!%CQc2VRJS{9{W=957uas7N*WK`b`m4f$s9-jSgK7l>X$Y~h5 zxo$vyXZdT~UiT@qS6WP+oOM}~`qBEp<&^xo^0(Yuvqs&?-$iVy_>Ysi)uJnJ=_y8y zQm^@)KmE?Os3xVqK1oM6%T20F@zq)E<+nNpCH(Q72RCi~_R7|scl4=ME7^0;>-^Wq zHPuZPQ-`J38@K)N zJH_{Nj9@NLG^z<$^?Z#NF-!7P9OpX|zFTswExqEu?->eLf(nB!-u1Fw`Ze;lL%y(U zIBoMLIinlDH+9R9vxE&Nt+AZSAL%7B4QYJPmsDkNS%uMWXPDKi?etEdX&=$U^;Rtl znN()!e0$2Hw>;cc@&0RAeYE8*(fUV+@O)`hNSSQ!=xH7OV_h~UZk#$LKrx6nsERFu zYP`w=Ny2C6hI1w5#wVRG1y~vHmQ5KG7A72# zINxgn6T4AeCmr6k1#u)_{ZRMmZ1=My`>%L@mxa@)G-{x1drpNzl$}$%s(aI$c<;E2 zUE+JZH_4lBffFOzUM{j#ua4Va_ZU0!MdVlB5BE%vJkR6DFlywZ#PH(hpBfY69zinQ zD^@ivUW~d9Y>nI2RBcg~n7&+m2A(jVnXR6hs?j||-L24aFAv@mC{sOtUEKWlv(vc+ z?U8R}31JjP`Fu@NgCC-=PRyDoDHkUkdk}pR?IA_Gc>0-}RJKEUQPk7mbH5*!4TOCf zU;cjo*Bi+-m-l6n4iCMvEk#w6b)Vio_gh`|A;wquQ-pkXWhYHcOyiLUPV5Z1{zyP& z?;SB-EF_#$AFLU53z_LodHiAB^ZBvd5v8(<*`My^xvF1Zn59%--qjChV$+^6nI-$y>_>+2SgB*_ZeF&9&(XQxky zspr2nU|BPNTs@kyoOA!w=T{3lzOOTXWVbtw>u@~;*Xp_-WY6&2JC|LrNs2^rhLDQt z$#x$Fj-O9ycJ4|S{ZQC2)l%!pxQ#q2t*kQG$QB00JS?~eFTInhWLTV|5sq6+7(D^&lGhBm1)~e)W zRSGs_)dUY~l4)Y3Y*j{$f2bg30~Zqkg*>o6XpeFCdUygdEmW zm5JzIY$45G`qOr(4Ij%OF+>pGF&zoQVYXxE7uDS;b0?jX4HrDl>wmfi#1qY#q!@45 zN1JJ+;={C_8od6dzQDC(c6bxfQ3XBE&}sB~`xoSH9IxioRW8SPx7K=z!DDUDP4Cou z_oLRTt{ZWdOzh0ynTlM-3cX(N;v>{9del@uw-ACsl?Qz&Ot(w0^ZHY9_SF?r27{Ak zFoS~%7txAE!t`3_GJV=Hx$D{Qg*;Nm@+%8NVzLS1CK=bZ)pK4EXFb)yKRr8VELfhE z)of}rYc~VyxLQ+P9qCx#*pU9&F<|5Vmfo_7$)^a!e*ngaqF;@nE*zR=-L#u%K6mL4 zabt8xS3QV8^sm`XSUg?IcNdCUn2R!B%~lw@kqovhBXoZYQqXI@%b_+Xavo8$K55N5 z`Tg)Bt9N*6n!!OATnLxx8NO3#ys6MVGDtLjhp#x7mtnqH_YP$;zSG^n(HpMbwdFje zD*CqiSK2Afm7_jjUKR3s!Wh2iw}6Lof$^;_N$-hYak?#LMO_B+OYyB(jl$aI#|Z@; z8_i~Mn>7uyTLp%CEj+l)8L|NM8|Q&v-L?=Be5PKxs7E!Rc6xy=Ioi$ z3+21DL%r8^**uR^uVDk-NeEinfPXlDH+jm2G7?nReNnzQ*_s~p#De`q`cXb7vzZSMl%}9YpU~G^;#dSn)s{#+Qhxj$r z#x|seG&1&a%&Rf(@t0%E$G97XjR9!=+qZ{bbhsDGHwpqhAmlKkQqLL28hcV7rbbKz zn!^O!n}#_0&HLPupNW7XegCbiShnJ;y6hro`(fhnA*YW*?6MjtB>|z;fvK|#aY7d< zt^@T3o41Wbk&^(tD7Wvl-O<6_Oe}&N_!F~R)M%>n508xKuR=?JDtT-u^zZ6pKy=*U zt5^wz6)j-u6bWqKIjx_42f!u)yfkK?D3K}T4HTRTBx-~>@g4|Uom}!xT2&=88t1b$ z>jgf88fX}=?Kv@#oF!Ao13w5NP0-jgD;V?iLEWBi9TWz|hK0NMc;is;*O_q5X8+y3 zoTL36v|ZXdzKA#s)Hsyn@hR+1W=Jh$kwa|MjMZ2%V7W(jP%{#>Vd%fKxYZx2}OpEj&i;hL3RBFjk7`m{sHz9P~mOhXAzr=Wk0B| zc4A~hvjlkpmXwJ9)(yfT0f@v0FPkOkXO#T;PCf zn-UQcvb6I@O$^Pxz0<)*oSWm#IYt8F_k`xKf-wc`3k(NFp3HEkQ%`jETL^U} zf>DTc?9ie0_N3k6dR@5M8uvp;+feX2E7TMrvrRrg?)1t)mk=~26f+eo4iFm&`z*vK zVf;>8X;>Fybhj6xL zg}@==^9M);G6r8q%9enCf+hgQnurT?gpE7_(k~LF7b?6_kWa>pG1a_T-WbxIQ=HEK zu1#*1mxEU(m#Sz`?`gY5*-nrT>Qnc38ASfG7}pg*cdd%5*V6L2+fiL|Ldyl9Yqi@N+uW~EZeqzSPLf1VT*`< zFgil}N2d{~^oPQD+RHq~Ap-at3zJY02;u5OpzQyF`OpKV>H#iDLr81Mn@$ozGIbzo zxHc>tD08_{n5fVX*`%VDSD?KSm;Qpv_jgD;n7^Q}iN4vv7|%BWP;8rUQo+#+V@x@W z28~@1pcky{Ne95t(v0B-Wg#?!sDuMVwm72~npRY#IUAAvQot zUq=FrNA;Tn|9`Cx#MI%xLDuSykllYB{!l55z3VraS%)NrY zE@8q^{hTWOnsY^fzb&a3ab0B{_24jDfs8^77WVt`l2Mn{3p@H_I&m zbsd8oEFuW5vx1vC@kMS2oF(qlHLYLrU2E|n;eXDcGWb6SUvp;+Oyl(d>aT?x=Ti9D zNF8`VZ^#&u-l7!s$cbNIm`DrYnbpCK|we2{%`PiXx z5HQ-68iTA&V;1n;URB-lmnj`~N@Kb)6;9&vPe(KmUu}(VEO-@_%J)KBxwa%!_%!Q9 zx8SHHi?+x`_c?ZF%-K!u@wUKsEw-1mmB*hD3W}ajmKH57R^4ji30OJgYpc^4#vhK< z-TJ(SgFEdjhdrW0H+|>Ln*m8|(}Gtw^i9bAe@QN=bIpPkbTzkJP1`B=#^sL%*=SBZ z3IF`*IjaFcCaHE7Gt_Z6G&13?3Mtd)c&LL=^HT?=Tl2H|gkub?VYG$}aqa}&sh7n+ zW--{dvG?9jP^R1J`j*3o=Fyt>hJ&X+b_tYCtTpeTG3!%c)(Jqkcyx(Aj|b9%S}#)& z-~WPQrCUd2cJb}#v;7O<;x-0lrn(y!YupxPV!ZDrpT%BGUkI1C)Olos$?96&2=k3b z-SVzC_~5wXFW&z+ieR-hnCz`@JE=-8x{uB7-Y9pzx!`@SxMoi*$T*1n1ATF=uG%8C z9J-Brcyh^stpO4(3sAoH2LhvMB2Y7=>Z&m?NYM=)Xfl?FVenr#ycc9aZH)Ot-aK5u z_hhME4=!(3+LX~BhhGXRZx=1kR2zB^R8}vFse@qJUuY~#V47Z}kDI@8{y5sV@IkDC zs7a#Rs%-l2$MGfyfCsAJ=5?6Qu0Q|i?6RFDWkzZ(f&E;n!$yT2{)~xB*$112=ii%y zKP~~;yr;wNw$HN@$FSU5XkV6P!)h@L4a14u>?l770)+U>fZ8F!Y1@bo;1VqpZ0dxS|_x0{xVf2#UZ)85Jhc;#>=ZWGDZq(N2Zsp#6rtI8@Xp? zFv32T-56InriCd63)>tl5jUyEbxloG{;307zb77Q>EBwrUhB6ETb6AEkhbvVBQGE8 zMZP2PK|+WJdwZ*L^vAxLwOWvqy=oPZZ^lRC(8k^w0uI+*L~-Lq-zz0eVVfyUZjVDt z6%Q;4_SYLm2=uyc^LV(~<81Tst7n0Hcaf&hPaha1qPXLqBp&!mo@e(NU2=_0H1Pm(#NpTZj&dIZ-dZ$3PkK3ou1P?*2qY~3 z4pmMdqEB06i}w$t8$6yB_rCQgS5lEaKa$?j;GB4x$GzCZtKKVCrTf9w&CI|MuXvW= z>5@~F3|iJ_YqeTbv9(Qk{+>c{{2Q!mn(DbXNORw);6(-B=3e+Su7roOAa-aMO$@(5 z;x^Sx1|(*R2uTeI?v9E=X|`nRqxqO)l2>M!wHjS-5EN0^YMmVR`4Pxzp&fo3WOe>ol6&_v(Vj*AK1EmWF45fjp^RJ z&O{#(RTb=F$wP*amY6ELMxfvwYP}Q6)Eib;t(U3y_3QkS+Sv-(AoVm3HTDR7Ue$gO zKCf%%64&pCKg3}Lk4j)4Rt8fwM-}v&e%?qiGfCdF@>JVXQJ8gKmkyFFF@;ZMS^58$ zIW2Z6V4vS+dh^4VKvCLS!Ya6ZFEIPkCL%iQv4C0R7m5`;f7zrx)H?JnYm)0O6yb=M zO-kjcs$#TzA4=VlR3799zq)Vv%)eLkmA2*8Bs~@JP5F;kj&+!!?B~t9dNgm0-W62n zZoQ6EX5tFz3D)1Hz+y*6SwcRtAl^Sd_2}oLz_txK)z+0dY_%d>jl$eKZK#(UJ&R>s z^osS8dK%5kDE<;XXF4YH3@M&?%jI%6&!b~ccH=C@9k%NoNHCvV^1#WSDOZd4%dWSV z^)2l^Dw-#^>NN#RU&rg+x-VJcQ(Ol=t(4bV73eynH22u|Fj)TU1?;duQu`2Sy{`{b zp}K_cfN}`V?Y3>Ew?jAO0T8)ptusF^VAcA{ZeL#?`gg@3>y*ghOEMuWVaj^(di%rU zGbS2Rr6k@yvBw+B6lL$%&6%%!VAcwB2i7Sz05~=4y`%}jwcflZ^Iqn&S?cR@{|xA0)RQ<&t|UtR=`V))hya z{gYd!YMWBt_EpxnK3n?waJlF)%*0c_I=Rt~IBwmFpZvwbRrcE?e41aPQR3n@J2dx) zRJjXOI@YtZ^aa%e81Rn_q!l1Ivxj=Rg`ErwpI4u0F`Day9t-Oxrd~8RzmqbS$;QIo z^&kY#GmgIG`WcSZCOhkI44TM0GR4MBRI|Jpp7)F)^E|8^U^E%{t9@=y@)3 zQ8>ylVJ+;&NJsx)5W*}mTwY;}ycre-N6FLdIwHt|D9+L|%!Eiq#{YVo1 zr8kCmN7elBs4b`~FpQ{)vI`BD5064zZX_|d4R<^6jA!5k8BIw`0=;ll{Rve`5DKhg zx+r=J*6P9K9&f9>&R`vXtBCpisNK3Gs<*s!|9J@lD9j?jY(W2d2Xzs?OaKynAB={b zDF7MY5r%Di{4OmkR}+c7%bghFZ8^kQEjzqa8loryvkudrn+e0}hV$b?=X?c}@5L8L zPLE5-xIF%8WjdmmY&>HKYlGNfc9Tx)$~~z13JPpkaEMn85RJ%@TysE12!!B?X+Ys! zhAq*UhmIP|%EkLrb#}+96eP(kU#)^1$es7FSEEY2^HO^@OQ0s-(rKN)IY~)+;16 z*3s9Sw-_I?hdkb6ou#AQs~n;1K@{vb&aRR7I?EE5Ly{2hxh{%*Zu zClgb;_ys24ZI&S7Q3Jl&zg6HjHFC53GGz(g#Tv5{#Z?<0vs}52185eWi>2ops&AWU zDY#7Cm15-mzF8AbBrmf!-}#go-*Y!%sI$IAsZttS{faHHUqmEX4{N7#q*Qw7(NoTL zKS5nsUdhf5`XhE@1iO7Zq1@Cjt*S^Ti+8IAb~ZM^*KKw$b9tlmwwrT8aUY>yp7ts~ z&(vjg^bfh^NtJzI>NB)56$Y)M&m{ z**xfZKf$x4a_M7Uq`u^JCud3&;w@YVkU8FT^E$sO>~KaLxwShrI=RO2b>pN)TXhrR zj)*q$!sX1X&z%`~t;LQ?B#d9=zzHpA48!CUO!H?tN&vU_Rn>Nk2Gcuk53QD}8yUUo z8{#G*r9|caywh^{CqzcE=eFO%@u`~J^@0?OH0Ae?3sMhULm;H?(*4veektjxsi|ED zpADP2S-ZE6*S9==T#C?i+^Tp5 z1aB5UBip(!3ptIHI~KTAXQxrz{xq!q=dGY`P?lldl0RxC<-vbbYS%8c<&O~}G_+@# z+S7N-Ms)82>~zwgN7BGrujWes(F5FB$EN~kL(k^Ku_tnKu*7nDL8?l=)yY8Z53m4| zku0}E$vk^1S@Ql%Sy@AlS5IEbbu1xY3v414rW(f_c%E}7*QBOeNjl}tgdc)PzwI6FS}j%29Av50I`u)PAm}%gLc?!?pqY9J07NB=z)r~XNjPhB!-xV z0H;bX*e25fmsG3zJX$L0r=p3z!rMjNq>K8teJ2G>9GizG*-T|^zek+Ba)|_=+Nt?i zyEXl(aLUb)n&;**O0buaPUWlrcI@pHp*-{qAB~*J_J>R5c*H*YHxZnwNap!)wQ$IH zduIj*a0~W#=NIKkUh^8ks2(VqKT;>qhs1OJNvPe@nkbrg7DjF z#?|WG2K3ENQ}dZN=c<&R+N3r~F_Y+RIm?O1k&WHNVjb7Npr#@v^V~XJSXy<4=U!8+ z)%7NbfTneP_oPYZn75}UgV=uw{)kE5DlMH^r8NPmN@M3axlv&km?wzn65?ySn2ojt z;hu!}>?_8n7<_aG;NkLK=$g~%8}BzrotO9Gygc4N1&?vQb_nz;xRaOGIR3o4<{dov zh4xYWUdtgA(a{FofT3R@9LAb0=8d`G!>sGITaK(T`rM+WQq~#Iyer>z=eann=nn05 z$`$iGwRlBA?>zet*sI4VySF`|q*QzIpI2JwnJ`o+>A$;h;EoR^0*b!~xe zeNJ7&D99{f%M6y^sQfvs61F!kanqv^u!b4`nE^D>B-TtDueI?wT-G+|^zMHfAF(O7 zHtBU{35#6ah^oQs@&1}3Iia3NlZr)D(l_JZvtqmA9y z1qAewGwOPy9#q9cac;lZsaZwd1z%e}0Jp$z=O4hKTByyuY-qn=3m3W$&$CT!P$u|z z1CDckCA^(-SHb>MsvLKykv^085<#x)ZL>601;iJog$e@KX27&1^a&Jj8F8_6K5o z0}0lM+!4VggRq`O_~BuA`g(#H3xPENsk0z|L230ONm$`%33y8j0#yWPl~MQv?2h&RG3 zS-Qe#vLT?XwA%rtW9#sgxbW~c=A+l>nO-nCdyYg-^fgSvEJ3>nMIv>4R9ze3gg|CW znj$Ej1cEmUaq0><5#nfK1=2x+#}Ps=gQz&+AKqGjPSRFXR^WMU@cKNUYgJhY6fEZ< zC=@|!0U)WCaEUt@ZWER_koljxM5cq@koLdUW_p&)Ji%6Q^ z>j0zxibcXKG}?HZpt(1=#?ZF*bk@5qbfs&~sHq0Dg37JBgg^ zi^Z>K%Lqc$LqY&>(EzFmZ)r=T<*;k!2|@q}i$?#AY*7K;w=rnikhatfxjEeSL1=c% zK4mn53!YaCMQ^PiWXjlYADHOkfUya{kmk;83PaGYZHk_8n0LoYxQ;$AQLr_g3L`N9 z3{!ZUmXrDL$a&Dek*ucXI|L@piITu541VQJ96}l@fP`LHpU4CPhX6e6SI+UJ06_d6 zfjxQ<4v{km5hjs=upgkZ2~r&Zt??AyRcAKMPh^Y$*LFe|5~4L%WWSB-68H;>k`il! z67iJ)Xc~}n48ZhVps?vZOalptFf;s@6$7LLg^n;0_V^qy@J&$QY-Iox><)*pJ~3Pn zPykKcryZC8hXa?10pgN)b2jvc9=!||Zg(i6WMg6kLi~5uS>eVcz5JK*CowB>1cHcW zI^U|q7|4WWT=Wn7KIOR#!FUqEP$Z{1t{9ZVvbTB=Ifvh&?3<90S#3fn(ss_pJ|Lh7 zfu(apwIWf=k&$yHyej$A3JK_i$T<{xf2rgO2&O6mp5EKZVXp%VWg?6V#EAz?gn{Ss zQH}%>24cLx3K@+Ce-R#>{tH4nvjNB=1>UwWo52SQ7MiAk+Z^V$i%gha%y1^4Sr(Z{ zOiJW}%iTGxTerUpd^B7_0qZUxjP}}KtdRd4mt*PfL*!OLg(-z#xO|Y{7D6+`X@jC? zsdHQ>)Caszgg}c2>uD5Rb~TvB`tKzaYX$(2A0_w>5Sc8$bZ}f;_9SBi4hZdOCGst| zIpwCE7$|#m2rx|8#>@iQhvPCMUuWym1Br10BMl)=+gOAz)0u7TpA!JVt`Be|dqDRD zGF@(S2J;HBx)@CH({s--ByN2#K(hL&{;7SHi=^fq!}Z8zqJ7#_JWvhxalO2joC$O*&DyTV;1X0l)bZq|V5A zz(H!210t@xKBe~pSZQkvo%Mk_`0F*UejVr^BEY1qvpE;8YcUM>kt7Pm@FPw5Q;y8m z#aK@oYwIs)?jD219XXbKTRJ?!6KaB5zQaWWCXUv=sZhwlJc+_mfozYagdl=}wBoY> z;j)((;u~$(yaj3dBAkK;sPEL#C}ZJb znkWE0Pv7A)A~To&*Ratwvt(Z3FTx~X4nCVJB4UJQd|A5l4rA=Ye%O6dc0{P@Mf-KG z9|3?wirM%(o`U(IO74RWG7kRDln8{L4Y49*S9k%KFqse4k`DGX+tS#J@QR;thlBgE zr;As+#CZ8gNl6&{kYfi3U`J~AD(=Wj^)RDxYfqO0cR161c_n@B@df zZ*xNJy~z`aRheO{vRbREyA*Be#9V||OY;P20LqVeX8en|i##-AxB>e3GmJZ9Ubn;Z zx~s+Y=JN6OjLwOL(|fO(spE$ok*su}FT?3!c)3o+Z}e$x@%6s1`nb^Wcegnc41-&e`mNbsb&FA7jujH< z4d+u=Dd|?W%B@+A!aZC)b95!jZv1feZ_0cORca$;QM=4_-J^h^vr!k@%ClMp;_O3I zhe4p-RO#R$@8A7yg?GA-4DyO{{V)c!@f+H0bO~(djSM5}-6xyI@zs494}gZ9r~zIK zqgM+Tytl86G(*dU`KZs2eSEP|2Dkv?l*iFK>Dw0$Df|)>j zCt?yO&dW};zYMgaeD27)odwND7~t@y@(<#u+Zp0L#sKnw@@*E zK{bILUfepTgGGAn*fxtIZ@ko8?3aF57Iy!>M%IsStqOa_Gw4rY7XNB>0mtbwG@h$T zvW8edji5NX*WxU?@TdH%fT;Jt(HlQZ9G%`t?~+P6jY1yPr(7>?neKcQqHZ+s5rvr5 zIfr{h2=P}TrTk8`+r3!Y`aT)A`jLr|I-rc~=WRS6bOh)$V$P7PT=tCbuy=ONxm!V3 zh!C)sJsLg6*@YTMT>!rSeA|4n-6i?pxvHOQO_#ylt>@`Q8y4M1?!>HXdvSH^DP6n; zKH=VtnvFZF9aI4@AxFD`{non`t+wj6|4>tB-Z)4f*uQF9xb~2n{UhScoa^EpaH1plUENSwuYaIdn=_ zFDRM}AKy?|bUiV4USCEy+EJUm@=OGXubt<&Ra&Radn@(okhV^**bE>OrqLC3Cd{j- z8D0?eJBm$P)y5Nq>Jxg4&r{5l#AQ$hMb}yglNjwyF>;l>ABpd}_@md2hstwlhJlUd z7S>Sp;0ACZxE4ezdcf(O(1kM73v|kE;lkCy)QDRL=F8aVX2bswxG;6})Kd~u=I(fT zZ03=`@Z5nL0>nCvbA4r)=%CN;wcD5*`p;7@#rOJXNv`Avut(xGPSq$$1-4FjkB~`U zzi-v`M`cXvJEPZX@@jXjq%Q7SyPHn~f)H6bOd<3Z7hLv4(NVDy!Ql2G^~?wa2S;`g zt@Py4t=eBwh3S=<+DEIP1F|Qd5dZV>&IE;cfXuV%Vi;OMo$5yH_KgAT|5>eM6b#m} zM|`vFGj_mu%Eg+N@VKdmsS{q{m0I_Hqn9R?QzkuYTx@r6I<@$v6pF*q9iWgR646x` zcA>9V$0aTuw4*}25(hjtFU+=x7}Je5tu2$x^yrT_4J`sCdHmXxjAT9E88Q=LF zuN=9#4HHtV63XIiT`=74X7{}~o3qJT}-y-%-TJa5x z>xbpXL!yeYYe)f-+G0;5jw?8 z3DCFw90|^T!f4EZ1u+C3`G4;=u^5L0f3@3lv$v)e4uapKI-DYA7Pk+bLo|K(&oDY9cKh6hFOz~g1o)rH8gLgmRrJf?171ew< z@F&2LI}P)AtK&Lec|Zh~4SW5ibvA_jLH(${1o%!O z6V6`;ct^*-5GILAg3B9gQ~WoL+pY^Lu6f2fb5-IjmW%hZ3JccDDi`yykKLG!yn6x1L;wg$;JsCzz6CvpI`w8lag`V ze`a0^{{Vwp{tj8m1fLRrYwwF*B#do07Ty8y4}kmvk`c?SS3V*?6DEyYI1P>CB;*_c z_K(Bw_%~1f37z1_hF=l*OXAnXiK4+{@eAW8itVlDU$S{IxL^_x=?IlCoR-S4&5&n!3KN+e5CO4Q5k%#+@YXetL`DS5NFI-^pwD zqx}8eNZ?ZU5=RPSmzmZS9=|k%4lqV>gOCs2=d>#?+db=SlmFtpe8!zf@F%5?^iu-sU&B>k|oP09V1K8^y_5_ zZKvs0Hkx&m2%rFvTG_=7yh;WzsTzUDpsy;w9#B_UY`(1SuNhXY3Vp8JVH%f7y_D7a zo`pUYs@hfYP*KwU&Jut5G@Mqy;dXv@xB0PrEB^q3JO2Q|Oa3sJB=GO-k?{w^8hpV& z;%o6<_ro6vEnr6j6HBLf-&oUpP|>Qk=37q=T+M(2M9eUMP5u#o!LUEIKZzR7=i^uH z2k>9vO^l&rxYN81qIk37=Dz}*Z-Pm+MEGN&!*B*inQwEdKpf;57lZx15`cA4`F1%Y z{PZS*K^!n2i2OPJeS3~;#l&&0Z&f8mIBYUsYMm!icJq~KPA|^TP5Nkhbhu|Pg`C}5 zud0-sV)RRBTT5Qr`deH706PBw2LAxy+E3VDz~5rK__5<3jlUjsD7G7`Eoa5{-wymE zbjnn?k45-xr|25|P_q`yH(oN-2~rj1bC$2yPl5jcuy5>V`!{`>Pl7+QH^IM$`jwyy z2Z=P#1Zel3GGYMvu6%8*Tk1Y9y>pM6OTBJ+7>&%#*=qX4l-vk(9nZ`&`g-%%-=9bB zPRzXj0JJ&%e;>@(&*HOe%NhRhjl@)o`wpa`O% zl1cJK%FE5B{{Rr!xhH7ObI^758R$=PKb~nvBa!tS{{UXzfYW!Nz%D;9PwDj(d5PD0 z@tpj?{{SL?&syO5-}>0>vRWl&G*p4=ADXW^v-vJ4mijo>(`H8 z&#z_Pop&#O}S)7u%yqy7it0+IFobN)}~_<=wl=l=k$*!uMTbcL7Id-Wq6 zb`pC>7U#$L1{`&!snVkK!Hrk?M2#ewd&#o&y4YzfbWWP(c(2>AQc|<)G?8$LaX= z@88q4CiOh-A3{LrPI&g`KS~QI0FpWB@86H}=|}bbb{OhTpVvRHra#A;O~Z~yIU}6s z9dYZAZj_*oIR`l-k=&DW#NWEC&a_pvn9|r<&5?GX#T&i z>+k_j^68KB{{YtYrKH@xqmWPFI{sbg+&xF(}t4;~Wu=dK?UNJv}|U_oUpsoQ^S`$F@B?k?qYN*Y)$*2Y!A30H68C{{XIvOpe5U zf1l<4aYjcRj(U6jDE`051)`I3pW+;x4o4^2mpy&I!#~!K>-yVZ3Nij4=j%<}yz)5z z06&l6PW?K6o_%NlALsn_{Q0B&kMsU`q|dm)>CgGkJ$dw`Vh2<0*Vm4n592@zG26dC z%l`naN2gvsy}16rjWm@FfMw5HzOnh3CG>f Up*a}AJcG|%_5&0L_5Cyd*;T)CU;qFB literal 0 HcmV?d00001 diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn new file mode 100644 index 00000000..679bd163 --- /dev/null +++ b/node_modules/.bin/acorn @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@" +else + exec node "$basedir/../acorn/bin/acorn" "$@" +fi diff --git a/node_modules/.bin/acorn.cmd b/node_modules/.bin/acorn.cmd new file mode 100644 index 00000000..a9324df9 --- /dev/null +++ b/node_modules/.bin/acorn.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\acorn\bin\acorn" %* diff --git a/node_modules/.bin/acorn.ps1 b/node_modules/.bin/acorn.ps1 new file mode 100644 index 00000000..6f6dcddf --- /dev/null +++ b/node_modules/.bin/acorn.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args + } else { + & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../acorn/bin/acorn" $args + } else { + & "node$exe" "$basedir/../acorn/bin/acorn" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/eleventy b/node_modules/.bin/eleventy new file mode 100644 index 00000000..e888e106 --- /dev/null +++ b/node_modules/.bin/eleventy @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../@11ty/eleventy/cmd.cjs" "$@" +else + exec node "$basedir/../@11ty/eleventy/cmd.cjs" "$@" +fi diff --git a/node_modules/.bin/eleventy-dev-server b/node_modules/.bin/eleventy-dev-server new file mode 100644 index 00000000..33063cc6 --- /dev/null +++ b/node_modules/.bin/eleventy-dev-server @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../@11ty/eleventy-dev-server/cmd.js" "$@" +else + exec node "$basedir/../@11ty/eleventy-dev-server/cmd.js" "$@" +fi diff --git a/node_modules/.bin/eleventy-dev-server.cmd b/node_modules/.bin/eleventy-dev-server.cmd new file mode 100644 index 00000000..43b65da2 --- /dev/null +++ b/node_modules/.bin/eleventy-dev-server.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@11ty\eleventy-dev-server\cmd.js" %* diff --git a/node_modules/.bin/eleventy-dev-server.ps1 b/node_modules/.bin/eleventy-dev-server.ps1 new file mode 100644 index 00000000..a11fe50c --- /dev/null +++ b/node_modules/.bin/eleventy-dev-server.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../@11ty/eleventy-dev-server/cmd.js" $args + } else { + & "$basedir/node$exe" "$basedir/../@11ty/eleventy-dev-server/cmd.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../@11ty/eleventy-dev-server/cmd.js" $args + } else { + & "node$exe" "$basedir/../@11ty/eleventy-dev-server/cmd.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/eleventy.cmd b/node_modules/.bin/eleventy.cmd new file mode 100644 index 00000000..ea94423f --- /dev/null +++ b/node_modules/.bin/eleventy.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@11ty\eleventy\cmd.cjs" %* diff --git a/node_modules/.bin/eleventy.ps1 b/node_modules/.bin/eleventy.ps1 new file mode 100644 index 00000000..ff074738 --- /dev/null +++ b/node_modules/.bin/eleventy.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../@11ty/eleventy/cmd.cjs" $args + } else { + & "$basedir/node$exe" "$basedir/../@11ty/eleventy/cmd.cjs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../@11ty/eleventy/cmd.cjs" $args + } else { + & "node$exe" "$basedir/../@11ty/eleventy/cmd.cjs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/errno b/node_modules/.bin/errno new file mode 100644 index 00000000..b2abba51 --- /dev/null +++ b/node_modules/.bin/errno @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../errno/cli.js" "$@" +else + exec node "$basedir/../errno/cli.js" "$@" +fi diff --git a/node_modules/.bin/errno.cmd b/node_modules/.bin/errno.cmd new file mode 100644 index 00000000..609af3bf --- /dev/null +++ b/node_modules/.bin/errno.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\errno\cli.js" %* diff --git a/node_modules/.bin/errno.ps1 b/node_modules/.bin/errno.ps1 new file mode 100644 index 00000000..2b2d86fa --- /dev/null +++ b/node_modules/.bin/errno.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../errno/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../errno/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../errno/cli.js" $args + } else { + & "node$exe" "$basedir/../errno/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/esparse b/node_modules/.bin/esparse new file mode 100644 index 00000000..601762ce --- /dev/null +++ b/node_modules/.bin/esparse @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../esprima/bin/esparse.js" "$@" +else + exec node "$basedir/../esprima/bin/esparse.js" "$@" +fi diff --git a/node_modules/.bin/esparse.cmd b/node_modules/.bin/esparse.cmd new file mode 100644 index 00000000..2ca6d502 --- /dev/null +++ b/node_modules/.bin/esparse.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esprima\bin\esparse.js" %* diff --git a/node_modules/.bin/esparse.ps1 b/node_modules/.bin/esparse.ps1 new file mode 100644 index 00000000..f19ed730 --- /dev/null +++ b/node_modules/.bin/esparse.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args + } else { + & "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../esprima/bin/esparse.js" $args + } else { + & "node$exe" "$basedir/../esprima/bin/esparse.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/esvalidate b/node_modules/.bin/esvalidate new file mode 100644 index 00000000..e2fee1f1 --- /dev/null +++ b/node_modules/.bin/esvalidate @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../esprima/bin/esvalidate.js" "$@" +else + exec node "$basedir/../esprima/bin/esvalidate.js" "$@" +fi diff --git a/node_modules/.bin/esvalidate.cmd b/node_modules/.bin/esvalidate.cmd new file mode 100644 index 00000000..4c41643e --- /dev/null +++ b/node_modules/.bin/esvalidate.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esprima\bin\esvalidate.js" %* diff --git a/node_modules/.bin/esvalidate.ps1 b/node_modules/.bin/esvalidate.ps1 new file mode 100644 index 00000000..23699d11 --- /dev/null +++ b/node_modules/.bin/esvalidate.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args + } else { + & "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args + } else { + & "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml new file mode 100644 index 00000000..82416ef1 --- /dev/null +++ b/node_modules/.bin/js-yaml @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@" +else + exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@" +fi diff --git a/node_modules/.bin/js-yaml.cmd b/node_modules/.bin/js-yaml.cmd new file mode 100644 index 00000000..453312b6 --- /dev/null +++ b/node_modules/.bin/js-yaml.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %* diff --git a/node_modules/.bin/js-yaml.ps1 b/node_modules/.bin/js-yaml.ps1 new file mode 100644 index 00000000..2acfc61c --- /dev/null +++ b/node_modules/.bin/js-yaml.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args + } else { + & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args + } else { + & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/liquid b/node_modules/.bin/liquid new file mode 100644 index 00000000..d35257a4 --- /dev/null +++ b/node_modules/.bin/liquid @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../liquidjs/bin/liquid.js" "$@" +else + exec node "$basedir/../liquidjs/bin/liquid.js" "$@" +fi diff --git a/node_modules/.bin/liquid.cmd b/node_modules/.bin/liquid.cmd new file mode 100644 index 00000000..40e26807 --- /dev/null +++ b/node_modules/.bin/liquid.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\liquidjs\bin\liquid.js" %* diff --git a/node_modules/.bin/liquid.ps1 b/node_modules/.bin/liquid.ps1 new file mode 100644 index 00000000..417990fd --- /dev/null +++ b/node_modules/.bin/liquid.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } else { + & "$basedir/node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } else { + & "node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/liquidjs b/node_modules/.bin/liquidjs new file mode 100644 index 00000000..d35257a4 --- /dev/null +++ b/node_modules/.bin/liquidjs @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../liquidjs/bin/liquid.js" "$@" +else + exec node "$basedir/../liquidjs/bin/liquid.js" "$@" +fi diff --git a/node_modules/.bin/liquidjs.cmd b/node_modules/.bin/liquidjs.cmd new file mode 100644 index 00000000..40e26807 --- /dev/null +++ b/node_modules/.bin/liquidjs.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\liquidjs\bin\liquid.js" %* diff --git a/node_modules/.bin/liquidjs.ps1 b/node_modules/.bin/liquidjs.ps1 new file mode 100644 index 00000000..417990fd --- /dev/null +++ b/node_modules/.bin/liquidjs.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } else { + & "$basedir/node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } else { + & "node$exe" "$basedir/../liquidjs/bin/liquid.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/markdown-it b/node_modules/.bin/markdown-it new file mode 100644 index 00000000..2222df31 --- /dev/null +++ b/node_modules/.bin/markdown-it @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../markdown-it/bin/markdown-it.mjs" "$@" +else + exec node "$basedir/../markdown-it/bin/markdown-it.mjs" "$@" +fi diff --git a/node_modules/.bin/markdown-it.cmd b/node_modules/.bin/markdown-it.cmd new file mode 100644 index 00000000..2851bbeb --- /dev/null +++ b/node_modules/.bin/markdown-it.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\markdown-it\bin\markdown-it.mjs" %* diff --git a/node_modules/.bin/markdown-it.ps1 b/node_modules/.bin/markdown-it.ps1 new file mode 100644 index 00000000..eebcf6e5 --- /dev/null +++ b/node_modules/.bin/markdown-it.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../markdown-it/bin/markdown-it.mjs" $args + } else { + & "$basedir/node$exe" "$basedir/../markdown-it/bin/markdown-it.mjs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../markdown-it/bin/markdown-it.mjs" $args + } else { + & "node$exe" "$basedir/../markdown-it/bin/markdown-it.mjs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 100644 index 00000000..7751de3c --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd new file mode 100644 index 00000000..54491f12 --- /dev/null +++ b/node_modules/.bin/mime.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %* diff --git a/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1 new file mode 100644 index 00000000..2222f40b --- /dev/null +++ b/node_modules/.bin/mime.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../mime/cli.js" $args + } else { + & "node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/nunjucks-precompile b/node_modules/.bin/nunjucks-precompile new file mode 100644 index 00000000..b2306bdb --- /dev/null +++ b/node_modules/.bin/nunjucks-precompile @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../nunjucks/bin/precompile" "$@" +else + exec node "$basedir/../nunjucks/bin/precompile" "$@" +fi diff --git a/node_modules/.bin/nunjucks-precompile.cmd b/node_modules/.bin/nunjucks-precompile.cmd new file mode 100644 index 00000000..b208dd87 --- /dev/null +++ b/node_modules/.bin/nunjucks-precompile.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nunjucks\bin\precompile" %* diff --git a/node_modules/.bin/nunjucks-precompile.ps1 b/node_modules/.bin/nunjucks-precompile.ps1 new file mode 100644 index 00000000..d98c48c2 --- /dev/null +++ b/node_modules/.bin/nunjucks-precompile.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../nunjucks/bin/precompile" $args + } else { + & "$basedir/node$exe" "$basedir/../nunjucks/bin/precompile" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../nunjucks/bin/precompile" $args + } else { + & "node$exe" "$basedir/../nunjucks/bin/precompile" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 100644 index 00000000..97c53279 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" +else + exec node "$basedir/../semver/bin/semver.js" "$@" +fi diff --git a/node_modules/.bin/semver.cmd b/node_modules/.bin/semver.cmd new file mode 100644 index 00000000..9913fa9d --- /dev/null +++ b/node_modules/.bin/semver.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %* diff --git a/node_modules/.bin/semver.ps1 b/node_modules/.bin/semver.ps1 new file mode 100644 index 00000000..314717ad --- /dev/null +++ b/node_modules/.bin/semver.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args + } else { + & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../semver/bin/semver.js" $args + } else { + & "node$exe" "$basedir/../semver/bin/semver.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 00000000..56ebebff --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,1534 @@ +{ + "name": "AgentPipe", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@11ty/dependency-tree": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@11ty/dependency-tree/-/dependency-tree-4.0.2.tgz", + "integrity": "sha512-RTF6VTZHatYf7fSZBUN3RKwiUeJh5dhWV61gDPrHhQF2/gzruAkYz8yXuvGLx3w3ZBKreGrR+MfYpSVkdbdbLA==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1" + } + }, + "node_modules/@11ty/dependency-tree-esm": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.4.tgz", + "integrity": "sha512-MYKC0Ac77ILr1HnRJalzKDlb9Z8To3kXQCltx299pUXXUFtJ1RIONtULlknknqW8cLe19DLVgmxVCtjEFm7h0A==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.7", + "acorn": "^8.15.0", + "dependency-graph": "^1.0.0", + "normalize-path": "^3.0.0" + } + }, + "node_modules/@11ty/eleventy": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/@11ty/eleventy/-/eleventy-3.1.6.tgz", + "integrity": "sha512-ZlSiR1PLdS2lv7TelBgWAhcvMiLNZkPBlLEb+lh7kGYZ+Mk0bo9qcYgVsewvw9W7Em0RH3wd01h5fAstNDh0zA==", + "license": "MIT", + "dependencies": { + "@11ty/dependency-tree": "^4.0.2", + "@11ty/dependency-tree-esm": "^2.0.4", + "@11ty/eleventy-dev-server": "^2.0.8", + "@11ty/eleventy-plugin-bundle": "^3.0.7", + "@11ty/eleventy-utils": "^2.0.7", + "@11ty/lodash-custom": "^4.17.21", + "@11ty/posthtml-urls": "^1.0.3", + "@11ty/recursive-copy": "^4.0.4", + "@sindresorhus/slugify": "^2.2.1", + "bcp-47-normalize": "^2.3.0", + "chokidar": "^3.6.0", + "debug": "^4.4.3", + "dependency-graph": "^1.0.0", + "entities": "^6.0.1", + "filesize": "^10.1.6", + "gray-matter": "^4.0.3", + "iso-639-1": "^3.1.5", + "js-yaml": "^4.1.1", + "kleur": "^4.1.5", + "liquidjs": "^10.27.0", + "luxon": "^3.7.2", + "markdown-it": "^14.2.0", + "minimist": "^1.2.8", + "moo": "0.5.2", + "node-retrieve-globals": "^6.0.1", + "nunjucks": "^3.2.4", + "picomatch": "^4.0.4", + "please-upgrade-node": "^3.2.0", + "posthtml": "^0.16.7", + "posthtml-match-helper": "^2.0.3", + "semver": "^7.8.1", + "slugify": "^1.6.9", + "tinyglobby": "^0.2.16" + }, + "bin": { + "eleventy": "cmd.cjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-dev-server": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz", + "integrity": "sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1", + "chokidar": "^3.6.0", + "debug": "^4.4.0", + "finalhandler": "^1.3.1", + "mime": "^3.0.0", + "minimist": "^1.2.8", + "morphdom": "^2.7.4", + "please-upgrade-node": "^3.2.0", + "send": "^1.1.0", + "ssri": "^11.0.0", + "urlpattern-polyfill": "^10.0.0", + "ws": "^8.18.1" + }, + "bin": { + "eleventy-dev-server": "cmd.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-plugin-bundle": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.7.tgz", + "integrity": "sha512-QK1tRFBhQdZASnYU8GMzpTdsMMFLVAkuU0gVVILqNyp09xJJZb81kAS3AFrNrwBCsgLxTdWHJ8N64+OTTsoKkA==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.2", + "debug": "^4.4.0", + "posthtml-match-helper": "^2.0.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz", + "integrity": "sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/lodash-custom": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", + "integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/posthtml-urls": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@11ty/posthtml-urls/-/posthtml-urls-1.0.3.tgz", + "integrity": "sha512-1YvhnkaNlFnnJic1rBMWmTC2adbuy+JQiBfl1Hecr1Wjjik1pQZmGyk/eC9zKX/FQv52s2Nht1Gi/UwhYqrBeg==", + "license": "MIT", + "dependencies": { + "evaluate-value": "^2.0.0", + "http-equiv-refresh": "^2.0.1", + "list-to-array": "^1.1.0", + "parse-srcset": "^1.0.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@11ty/recursive-copy": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/@11ty/recursive-copy/-/recursive-copy-4.0.4.tgz", + "integrity": "sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ==", + "license": "ISC", + "dependencies": { + "errno": "^1.0.0", + "junk": "^3.1.0", + "minimatch": "^3.1.5", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bcp-47": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/bcp-47/-/bcp-47-2.1.1.tgz", + "integrity": "sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-normalize": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz", + "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==", + "license": "MIT", + "dependencies": { + "bcp-47": "^2.0.0", + "bcp-47-match": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/errno/-/errno-1.0.0.tgz", + "integrity": "sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ==", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm-import-transformer": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/esm-import-transformer/-/esm-import-transformer-3.0.5.tgz", + "integrity": "sha512-1GKLvfuMnnpI75l8c6sHoz0L3Z872xL5akGuBudgqTDPv4Vy6f2Ec7jEMKTxlqWl/3kSvNbHELeimJtnqgYniw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/evaluate-value": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/evaluate-value/-/evaluate-value-2.0.0.tgz", + "integrity": "sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmmirror.com/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.15.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.15.1.tgz", + "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-equiv-refresh": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz", + "integrity": "sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "license": "ISC" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/iso-639-1": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/iso-639-1/-/iso-639-1-3.1.6.tgz", + "integrity": "sha512-ZFar/L4ngX7wZh2QX+Fiftmuf0igWJsrJtfizrovWifF1gAWkfmRa5Z1m0LQZbm0hKCHRDYhLRSLFrSqNe4EJA==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/linkify-it": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.2.tgz", + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/liquidjs": { + "version": "10.28.0", + "resolved": "https://registry.npmmirror.com/liquidjs/-/liquidjs-10.28.0.tgz", + "integrity": "sha512-b6tmBXYMQTuGPnM5vB0CuZMo5kvmKMtSB/gvUWP6RFn2pIB5s+bJkBfIyJnattkc5bgeAiflrZVptx3iaLLioQ==", + "license": "MIT", + "dependencies": { + "commander": "^10.0.0" + }, + "bin": { + "liquid": "bin/liquid.js", + "liquidjs": "bin/liquid.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + } + }, + "node_modules/list-to-array": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/list-to-array/-/list-to-array-1.1.0.tgz", + "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==", + "license": "MIT" + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/markdown-it": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.3.0.tgz", + "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.5.0", + "linkify-it": "^5.0.2", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "license": "BSD-3-Clause" + }, + "node_modules/morphdom": { + "version": "2.7.8", + "resolved": "https://registry.npmmirror.com/morphdom/-/morphdom-2.7.8.tgz", + "integrity": "sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/node-retrieve-globals": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz", + "integrity": "sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "acorn-walk": "^8.3.4", + "esm-import-transformer": "^3.0.3" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/posthtml": { + "version": "0.16.7", + "resolved": "https://registry.npmmirror.com/posthtml/-/posthtml-0.16.7.tgz", + "integrity": "sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw==", + "license": "MIT", + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-match-helper": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz", + "integrity": "sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "posthtml": "^0.16.6" + } + }, + "node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "license": "MIT", + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "license": "MIT", + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "license": "MIT" + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slugify": { + "version": "1.6.9", + "resolved": "https://registry.npmmirror.com/slugify/-/slugify-1.6.9.tgz", + "integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-11.0.0.tgz", + "integrity": "sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "license": "MIT" + }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/node_modules/@11ty/dependency-tree-esm/LICENSE b/node_modules/@11ty/dependency-tree-esm/LICENSE new file mode 100644 index 00000000..cb72e93b --- /dev/null +++ b/node_modules/@11ty/dependency-tree-esm/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Zach Leatherman + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@11ty/dependency-tree-esm/README.md b/node_modules/@11ty/dependency-tree-esm/README.md new file mode 100644 index 00000000..5684472d --- /dev/null +++ b/node_modules/@11ty/dependency-tree-esm/README.md @@ -0,0 +1,53 @@ +# `dependency-tree-esm` + +Returns an unordered array of local paths to dependencies of a Node ES module JavaScript file. + +* See also: [`dependency-tree`](https://github.com/11ty/eleventy-dependency-tree) for the CommonJS version. + +This is used by Eleventy to find dependencies of a JavaScript file to watch for changes to re-run Eleventy’s build. + +## Installation + +``` +npm install --save-dev @11ty/dependency-tree-esm +``` + +## Features + +* Ignores bare specifiers (e.g. `import "my-package"`) +* Ignores Node’s built-ins (e.g. `import "path"`) +* Handles circular dependencies +* Returns an empty set if the file does not exist. + +## Usage + +```js +// my-file.js + +// if my-local-dependency.js has dependencies, it will include those too +import "./my-local-dependency.js"; + + +// ignored, is a built-in +import path from "path"; +``` + +```js +import { find } from "@11ty/dependency-tree-esm"; +// CommonJS is fine too +// const { find } = require("@11ty/dependency-tree-esm"); + +await find("./my-file.js"); +// returns ["./my-local-dependency.js"] +``` + +Return a [dependency-graph](https://github.com/jriecken/dependency-graph) instance: + +```js +import { findGraph } from "@11ty/dependency-tree-esm"; +// CommonJS is fine too +// const { find } = require("@11ty/dependency-tree-esm"); + +(await findGraph("./my-file.js")).overallOrder(); +// returns ["./my-local-dependency.js", "./my-file.js"] +``` \ No newline at end of file diff --git a/node_modules/@11ty/dependency-tree-esm/main.js b/node_modules/@11ty/dependency-tree-esm/main.js new file mode 100644 index 00000000..4e9a9b45 --- /dev/null +++ b/node_modules/@11ty/dependency-tree-esm/main.js @@ -0,0 +1,173 @@ +const path = require("node:path"); +const { readFileSync, existsSync } = require("node:fs"); + +const acorn = require("acorn"); +const normalizePath = require("normalize-path"); +const { TemplatePath } = require("@11ty/eleventy-utils"); +const { DepGraph } = require("dependency-graph"); + +// Is *not* a bare specifier (e.g. 'some-package') +// https://nodejs.org/dist/latest-v18.x/docs/api/esm.html#terminology +function isNonBareSpecifier(importSource) { + // Change \\ to / on Windows + let normalized = normalizePath(importSource); + // Relative specifier (e.g. './startup.js') + if(normalized.startsWith("./") || normalized.startsWith("../")) { + return true; + } + // Absolute specifier (e.g. 'file:///opt/nodejs/config.js') + if(normalized.startsWith("file:")) { + return true; + } + + return false; +} + +function normalizeFilePath(filePath) { + return TemplatePath.standardizeFilePath(path.relative(".", filePath)); +} + +function normalizeImportSourceToFilePath(filePath, source) { + let { dir } = path.parse(filePath); + let normalized = path.join(dir, source); + return normalizeFilePath(normalized); +} + +function getImportAttributeType(attributes = []) { + for(let node of attributes) { + if(node.type === "ImportAttribute" && node.key.type === "Identifier" && node.key.name === "type") { + return node.value.value; + } + } +} + +async function getSources(filePath, contents, options = {}) { + let { parserOverride } = Object.assign({}, options); + let sources = new Set(); + let sourcesToRecurse = new Set(); + + let ast = (parserOverride || acorn).parse(contents, { + sourceType: "module", + ecmaVersion: "latest", + }); + + for(let node of ast.body) { + if(node.type === "ImportDeclaration" && isNonBareSpecifier(node.source.value)) { + let importAttributeType = getImportAttributeType(node?.attributes); + let normalized = normalizeImportSourceToFilePath(filePath, node.source.value); + if(normalized !== filePath) { + sources.add(normalized); + + // Recurse typeless (JavaScript) import types only + // Right now only `css` and `json` are valid but others might come later + if(!importAttributeType) { + sourcesToRecurse.add(normalized); + } + } + } + } + + + return { + sources, + sourcesToRecurse, + } +} + +// second argument used to be `alreadyParsedSet = new Set()`, keep that backwards compat +async function find(filePath, options = {}) { + if(options instanceof Set) { + options = { + alreadyParsedSet: options + }; + } + + if(!options.alreadyParsedSet) { + options.alreadyParsedSet = new Set(); + } + + // TODO add a cache here + // Unfortunately we need to read the entire file, imports need to be at the top level but they can be anywhere 🫠 + let normalized = normalizeFilePath(filePath); + if(options.alreadyParsedSet.has(normalized) || !existsSync(filePath)) { + return []; + } + options.alreadyParsedSet.add(normalized); + + let contents = readFileSync(normalized, { encoding: 'utf8' }); + let { sources, sourcesToRecurse } = await getSources(filePath, contents, options); + + // Recurse for nested deps + for(let source of sourcesToRecurse) { + let s = await find(source, options); + for(let p of s) { + if(sources.has(p) || p === filePath) { + continue; + } + + sources.add(p); + } + } + + return Array.from(sources); +} + +function mergeGraphs(rootGraph, ...graphs) { + if(!(rootGraph instanceof DepGraph)) { + throw new Error("Incorrect type passed to mergeGraphs, expected DepGraph"); + } + for(let g of graphs) { + for(let node of g.overallOrder()) { + if(!rootGraph.hasNode(node)) { + rootGraph.addNode(node); + } + for(let dep of g.directDependenciesOf(node)) { + rootGraph.addDependency(node, dep); + } + } + } +} + +// second argument used to be `alreadyParsedSet = new Set()`, keep that backwards compat +async function findGraph(filePath, options = {}) { + if(options instanceof Set) { + options = { + alreadyParsedSet: options + }; + } + if(!options.alreadyParsedSet) { + options.alreadyParsedSet = new Set(); + } + + let graph = new DepGraph(); + let normalized = normalizeFilePath(filePath); + graph.addNode(filePath); + + if(options.alreadyParsedSet.has(normalized) || !existsSync(filePath)) { + return graph; + } + options.alreadyParsedSet.add(normalized); + + let contents = readFileSync(normalized, "utf8"); + let { sources, sourcesToRecurse } = await getSources(filePath, contents, options); + for(let source of sources) { + if(!graph.hasNode(source)) { + graph.addNode(source); + } + graph.addDependency(normalized, source); + } + + // Recurse for nested deps + for(let source of sourcesToRecurse) { + let recursedGraph = await findGraph(source, options); + mergeGraphs(graph, recursedGraph); + } + + return graph; +} + +module.exports = { + find, + findGraph, + mergeGraphs, +}; \ No newline at end of file diff --git a/node_modules/@11ty/dependency-tree-esm/package.json b/node_modules/@11ty/dependency-tree-esm/package.json new file mode 100644 index 00000000..40b8cd78 --- /dev/null +++ b/node_modules/@11ty/dependency-tree-esm/package.json @@ -0,0 +1,26 @@ +{ + "name": "@11ty/dependency-tree-esm", + "version": "2.0.4", + "description": "Finds all JavaScript ES Module dependencies from a filename.", + "main": "main.js", + "type": "commonjs", + "scripts": { + "test": "echo \"Error: run tests from root directory\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/11ty/eleventy-utils.git" + }, + "author": { + "name": "Zach Leatherman", + "email": "zach@zachleat.com", + "url": "https://zachleat.com/" + }, + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.7", + "acorn": "^8.15.0", + "dependency-graph": "^1.0.0", + "normalize-path": "^3.0.0" + } +} diff --git a/node_modules/@11ty/dependency-tree/LICENSE b/node_modules/@11ty/dependency-tree/LICENSE new file mode 100644 index 00000000..bad64170 --- /dev/null +++ b/node_modules/@11ty/dependency-tree/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Zach Leatherman + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@11ty/dependency-tree/README.md b/node_modules/@11ty/dependency-tree/README.md new file mode 100644 index 00000000..0910ca42 --- /dev/null +++ b/node_modules/@11ty/dependency-tree/README.md @@ -0,0 +1,109 @@ +# `@11ty/dependency-tree` + +Returns an unordered array of local paths to dependencies of a CommonJS node JavaScript file (everything it or any of its dependencies `require`s). + +* See also: [`@11ty/dependency-tree-esm`](https://github.com/11ty/eleventy-utils/tree/main/parse-deps-esm) for the ESM version. +* See also: [`@11ty/dependency-tree-typescript`](https://github.com/11ty/eleventy-utils/tree/main/parse-deps-typescript) for the TypeScript version. + +Reduced feature (faster) alternative to the [`dependency-tree` package](https://www.npmjs.com/package/dependency-tree). This is used by Eleventy to find dependencies of a JavaScript file to watch for changes to re-run Eleventy’s build. + +## Big Huge Caveat + +⚠ A big caveat to this plugin is that it will require the file in order to build a dependency tree. So if your module has side effects and you don’t want it to execute—do not use this! + +## Installation + +``` +npm install --save-dev @11ty/dependency-tree +``` + +## Features + +* Ignores `node_modules` +* Or, use `nodeModuleNames` to control whether or not `node_modules` package names are included (added in v2.0.1) +* Ignores Node’s built-ins (e.g. `path`) +* Handles circular dependencies (Node does this too) + +## Usage + +```js +// my-file.js + +// if my-local-dependency.js has dependencies, it will include those too +const test = require("./my-local-dependency.js"); + +// ignored, is a built-in +const path = require("path"); +``` + +```js +const DependencyTree = require("@11ty/dependency-tree"); + +DependencyTree("./my-file.js"); +// returns ["./my-local-dependency.js"] +``` + +### `allowNotFound` + +```js +const DependencyTree = require("@11ty/dependency-tree"); + +DependencyTree("./this-does-not-exist.js"); // throws an error + +DependencyTree("./this-does-not-exist.js", { allowNotFound: true }); +// returns [] +``` + +### `nodeModuleNames` + +(Added in v2.0.1) Controls whether or not node package names are included in the list of dependencies. + +* `nodeModuleNames: "include"`: included alongside the local JS files. +* `nodeModuleNames: "exclude"` (default): node module package names are excluded. +* `nodeModuleNames: "only"`: only node module package names are returned. + +```js +// my-file.js: + +require("./my-local-dependency.js"); +require("@11ty/eleventy"); +``` + +```js +const DependencyTree = require("@11ty/dependency-tree"); + +DependencyTree("./my-file.js"); +// returns ["./my-local-dependency.js"] + +DependencyTree("./my-file.js", { nodeModuleNames: "exclude" }); +// returns ["./my-local-dependency.js"] + +DependencyTree("./my-file.js", { nodeModuleNames: "include" }); +// returns ["./my-local-dependency.js", "@11ty/eleventy"] + +DependencyTree("./my-file.js", { nodeModuleNames: "only" }); +// returns ["@11ty/eleventy"] +``` + +#### (Deprecated) `nodeModuleNamesOnly` + +(Added in v2.0.0) Changed to use `nodeModuleNames` option instead. Backwards compatibility is maintained automatically. + +* `nodeModuleNamesOnly: false` is mapped to `nodeModuleNames: "exclude"` +* `nodeModuleNamesOnly: true` is mapped to `nodeModuleNames: "only"` + +If both `nodeModuleNamesOnly` and `nodeModuleNames` are included in options, `nodeModuleNames` takes precedence. + +### `getPackagesByType` method + +_Added in v4.0.2._ + +```js +const DependencyTree = require("@11ty/dependency-tree"); +const {getPackagesByType} = DependencyTree; + +// With `require(esm)` support, some targets may be modules! +// Return separate lists for commonjs and esm lists +getPackagesByType("./my-file.js"); +// returns { commonjs: ["./my-file.js"], esm: [] } +``` diff --git a/node_modules/@11ty/dependency-tree/main.js b/node_modules/@11ty/dependency-tree/main.js new file mode 100644 index 00000000..b7dd2d29 --- /dev/null +++ b/node_modules/@11ty/dependency-tree/main.js @@ -0,0 +1,157 @@ +const path = require("node:path"); +const { TemplatePath } = require("@11ty/eleventy-utils"); + +function getAbsolutePath(filename) { + let normalizedFilename = path.normalize(filename); // removes dot slash + let hasDotSlash = filename.startsWith("./"); + return hasDotSlash ? path.join(path.resolve("."), normalizedFilename) : normalizedFilename; +} + +function getRelativePath(filename) { + let normalizedFilename = path.normalize(filename); // removes dot slash + let workingDirectory = path.resolve("."); + let result = "./" + (normalizedFilename.startsWith(workingDirectory) ? normalizedFilename.substr(workingDirectory.length + 1) : normalizedFilename); + return result; +} + +function getNodeModuleName(filename) { + let foundNodeModules = false; + let moduleName = []; + + let s = filename.split(path.sep); + for(let entry of s) { + if(entry === '.pnpm') { + foundNodeModules = false; + } + + if(foundNodeModules) { + moduleName.push(entry); + if(!entry.startsWith("@")) { + return moduleName.join("/"); + } + } + + if(entry === "node_modules") { + foundNodeModules = true; + } + } + + return false; +} + +/* unordered */ +function getDependenciesFor(filename, avoidCircular, optionsArg = {}) { + // backwards compatibility with `nodeModuleNamesOnly` boolean option + // Using `nodeModuleNames` property moving forward + if(("nodeModuleNamesOnly" in optionsArg) && !("nodeModuleNames" in optionsArg)) { + if(optionsArg.nodeModuleNamesOnly === true) { + optionsArg.nodeModuleNames = "only"; + } + if(optionsArg.nodeModuleNamesOnly === false) { + optionsArg.nodeModuleNames = "exclude"; + } + } + + let options = Object.assign({ + allowNotFound: false, + nodeModuleNames: "exclude", // also "include" or "only" + }, optionsArg); + let absoluteFilename = getAbsolutePath(filename); + let modules = new Set(); + + try { + let res = require(absoluteFilename); + if(res[Symbol.toStringTag] === "Module" || res.__esModule) { + modules.add(filename); + } + } catch(e) { + if(e.code === "MODULE_NOT_FOUND" && options.allowNotFound) { + // do nothing + } else { + throw e; + } + } + + + let mod; + for(let entry in require.cache) { + if(entry === absoluteFilename) { + mod = require.cache[entry]; + break; + } + } + + let dependencies = new Set(); + + if(!mod) { + if(!options.allowNotFound) { + throw new Error(`Could not find ${filename} in @11ty/dependency-tree`); + } + } else { + let relativeFilename = getRelativePath(mod.filename); + if(!avoidCircular) { + avoidCircular = {}; + } else if(options.nodeModuleNames !== "only") { + dependencies.add(relativeFilename); + } + + avoidCircular[relativeFilename] = true; + + if(Array.isArray(mod.children) && mod.children.length > 0) { + for(let child of mod.children) { + let relativeChildFilename = getRelativePath(child.filename); + let nodeModuleName = getNodeModuleName(child.filename); + + if(options.nodeModuleNames !== "exclude" && nodeModuleName) { + dependencies.add(nodeModuleName); + } + // Add dependencies of this dependency (not top level node_modules) + if(nodeModuleName === false) { + if(!dependencies.has(relativeChildFilename) && // avoid infinite looping with circular deps + !avoidCircular[relativeChildFilename] ) { + let { commonjs, esm } = getDependenciesFor(relativeChildFilename, avoidCircular, options); + for(let dependency of commonjs) { + dependencies.add(dependency); + } + for(let dependency of esm) { + modules.add(dependency); + } + } + } + } + } + } + + return { + esm: modules, + commonjs: dependencies, + } +} + +function normalizeList(packageSet) { + return Array.from( packageSet ).map(filePath => { + if(filePath.startsWith("./")) { + return TemplatePath.standardizeFilePath(filePath); + } + return filePath; // node_module name + }) +} + +function getCleanDependencyListFor(filename, options = {}) { + let { commonjs } = getDependenciesFor(filename, null, options); + + return normalizeList(commonjs); +} + +function getCleanDependencyListByTypeFor(filename, options = {}) { + let { commonjs, esm } = getDependenciesFor(filename, null, options); + + return { + commonjs: normalizeList(commonjs), + esm: normalizeList(esm), + }; +} + +module.exports = getCleanDependencyListFor; +module.exports.getPackagesByType = getCleanDependencyListByTypeFor; +module.exports.getNodeModuleName = getNodeModuleName; \ No newline at end of file diff --git a/node_modules/@11ty/dependency-tree/package.json b/node_modules/@11ty/dependency-tree/package.json new file mode 100644 index 00000000..f140f821 --- /dev/null +++ b/node_modules/@11ty/dependency-tree/package.json @@ -0,0 +1,42 @@ +{ + "name": "@11ty/dependency-tree", + "version": "4.0.2", + "description": "Finds all JavaScript CommmonJS require() dependencies from a filename.", + "main": "main.js", + "files": [ + "main.js", + "!test", + "!test/**" + ], + "scripts": { + "test": "npx ava" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/11ty/eleventy-dependency-tree.git" + }, + "author": { + "name": "Zach Leatherman", + "email": "zach@zachleat.com", + "url": "https://zachleat.com/" + }, + "license": "MIT", + "ava": { + "files": [ + "./test/*.js" + ], + "watchMode": { + "ignoreChanged": [ + "./test/stubs/**" + ] + } + }, + "devDependencies": { + "@sindresorhus/is": "^4.6.0", + "ava": "^6.4.1", + "semver": "^7.7.3" + }, + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1" + } +} diff --git a/node_modules/@11ty/eleventy-dev-server/README.md b/node_modules/@11ty/eleventy-dev-server/README.md new file mode 100644 index 00000000..2d745903 --- /dev/null +++ b/node_modules/@11ty/eleventy-dev-server/README.md @@ -0,0 +1,60 @@ +

11ty Logo

+ +# eleventy-dev-server 🕚⚡️🎈🐀 + +A minimal, modern, generic, hot-reloading local web server to help web developers. + +## ➡ [Documentation](https://www.11ty.dev/docs/watch-serve/#eleventy-dev-server) + +- Please star [Eleventy on GitHub](https://github.com/11ty/eleventy/)! +- Follow us on Twitter [@eleven_ty](https://twitter.com/eleven_ty) +- Support [11ty on Open Collective](https://opencollective.com/11ty) +- [11ty on npm](https://www.npmjs.com/org/11ty) +- [11ty on GitHub](https://github.com/11ty) + +[![npm Version](https://img.shields.io/npm/v/@11ty/eleventy-dev-server.svg?style=for-the-badge)](https://www.npmjs.com/package/@11ty/eleventy-dev-server) + +## Installation + +This is bundled with `@11ty/eleventy` (and you do not need to install it separately) in Eleventy v2.0. + +## CLI + +Eleventy Dev Server now also includes a CLI. The CLI is for **standalone** (non-Eleventy) use only: separate installation is unnecessary if you’re using this server with `@11ty/eleventy`. + +```sh +npm install -g @11ty/eleventy-dev-server + +# Alternatively, install locally into your project +npm install @11ty/eleventy-dev-server +``` + +This package requires Node 18 or newer. + +### CLI Usage + +```sh +# Serve the current directory +npx @11ty/eleventy-dev-server + +# Serve a different subdirectory (also aliased as --input) +npx @11ty/eleventy-dev-server --dir=_site + +# Disable the `domdiff` feature +npx @11ty/eleventy-dev-server --domdiff=false + +# Full command list in the Help +npx @11ty/eleventy-dev-server --help +``` + +## Tests + +``` +npm run test +``` + +- We use the [ava JavaScript test runner](https://github.com/avajs/ava) ([Assertions documentation](https://github.com/avajs/ava/blob/master/docs/03-assertions.md)) + +## Changelog + +* `v2.0.0` bumps Node.js minimum to 18. \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-dev-server/cli.js b/node_modules/@11ty/eleventy-dev-server/cli.js new file mode 100644 index 00000000..04be1cad --- /dev/null +++ b/node_modules/@11ty/eleventy-dev-server/cli.js @@ -0,0 +1,89 @@ +const pkg = require("./package.json"); +const EleventyDevServer = require("./server.js"); + +const Logger = { + info: function(...args) { + console.log( "[11ty/eleventy-dev-server]", ...args ); + }, + error: function(...args) { + console.error( "[11ty/eleventy-dev-server]", ...args ); + }, + fatal: function(...args) { + Logger.error(...args); + process.exitCode = 1; + } +}; + +Logger.log = Logger.info; + +class Cli { + static getVersion() { + return pkg.version; + } + + static getHelp() { + return `Usage: + + eleventy-dev-server + eleventy-dev-server --dir=_site + eleventy-dev-server --port=3000 + +Arguments: + + --version + + --dir=. + Directory to serve (default: \`.\`) + + --input (alias for --dir) + + --port=8080 + Run the web server on this port (default: \`8080\`) + Will autoincrement if already in use. + + --domdiff (enabled, default) + --domdiff=false (disabled) + Apply HTML changes without a full page reload. + + --help`; + } + + static getDefaultOptions() { + return { + port: "8080", + input: ".", + domDiff: true, + } + } + + async serve(options = {}) { + this.options = Object.assign(Cli.getDefaultOptions(), options); + + this.server = EleventyDevServer.getServer("eleventy-dev-server-cli", this.options.input, { + // TODO allow server configuration extensions + showVersion: true, + logger: Logger, + domDiff: this.options.domDiff, + + // CLI watches all files in the folder by default + // this is different from Eleventy usage! + watch: [ this.options.input ], + }); + + this.server.serve(this.options.port); + + // TODO? send any errors here to the server too + // with server.sendError({ error }); + } + + close() { + if(this.server) { + return this.server.close(); + } + } +} + +module.exports = { + Logger, + Cli +} diff --git a/node_modules/@11ty/eleventy-dev-server/client/reload-client.js b/node_modules/@11ty/eleventy-dev-server/client/reload-client.js new file mode 100644 index 00000000..fc0ddd12 --- /dev/null +++ b/node_modules/@11ty/eleventy-dev-server/client/reload-client.js @@ -0,0 +1,336 @@ +class Util { + static pad(num, digits = 2) { + let zeroes = new Array(digits + 1).join(0); + return `${zeroes}${num}`.slice(-1 * digits); + } + + static log(message) { + Util.output("log", message); + } + static error(message, error) { + Util.output("error", message, error); + } + static output(type, ...messages) { + let now = new Date(); + let date = `${Util.pad(now.getUTCHours())}:${Util.pad( + now.getUTCMinutes() + )}:${Util.pad(now.getUTCSeconds())}.${Util.pad( + now.getUTCMilliseconds(), + 3 + )}`; + console[type](`[11ty][${date} UTC]`, ...messages); + } + + static capitalize(word) { + return word.substr(0, 1).toUpperCase() + word.substr(1); + } + + static matchRootAttributes(htmlContent) { + // Workaround for morphdom bug with attributes on https://github.com/11ty/eleventy-dev-server/issues/6 + // Note also `childrenOnly: true` above + const parser = new DOMParser(); + let parsed = parser.parseFromString(htmlContent, "text/html"); + let parsedDoc = parsed.documentElement; + let newAttrs = parsedDoc.getAttributeNames(); + + let docEl = document.documentElement; + // Remove old + let removedAttrs = docEl.getAttributeNames().filter(name => !newAttrs.includes(name)); + for(let attr of removedAttrs) { + docEl.removeAttribute(attr); + } + + // Add new + for(let attr of newAttrs) { + docEl.setAttribute(attr, parsedDoc.getAttribute(attr)); + } + } + + static isEleventyLinkNodeMatch(from, to) { + // Issue #18 https://github.com/11ty/eleventy-dev-server/issues/18 + // Don’t update a if the _11ty searchParam is the only thing that’s different + if(from.tagName !== "LINK" || to.tagName !== "LINK") { + return false; + } + + let oldWithoutHref = from.cloneNode(); + let newWithoutHref = to.cloneNode(); + + oldWithoutHref.removeAttribute("href"); + newWithoutHref.removeAttribute("href"); + + // if all other attributes besides href match + if(!oldWithoutHref.isEqualNode(newWithoutHref)) { + return false; + } + + let oldUrl = new URL(from.href); + let newUrl = new URL(to.href); + + // morphdom wants to force href="style.css?_11ty" => href="style.css" + let paramName = EleventyReload.QUERY_PARAM; + let isErasing = oldUrl.searchParams.has(paramName) && !newUrl.searchParams.has(paramName); + if(!isErasing) { + // not a match if _11ty has a new value (not being erased) + return false; + } + + oldUrl.searchParams.set(paramName, ""); + newUrl.searchParams.set(paramName, ""); + + // is a match if erasing and the rest of the href matches too + return oldUrl.toString() === newUrl.toString(); + } + + // https://github.com/patrick-steele-idem/morphdom/issues/178#issuecomment-652562769 + static runScript(source, target) { + let script = document.createElement('script'); + + // copy over the attributes + for(let attr of [...source.attributes]) { + script.setAttribute(attr.nodeName ,attr.nodeValue); + } + + script.innerHTML = source.innerHTML; + (target || source).replaceWith(script); + } + + static fullPageReload() { + Util.log(`Page reload initiated.`); + window.location.reload(); + } +} + +class EleventyReload { + static QUERY_PARAM = "_11ty"; + + static reloadTypes = { + css: (files, build = {}) => { + // Initiate a full page refresh if a CSS change is made but does match any stylesheet url + // `build.stylesheets` available in Eleventy v3.0.1-alpha.5+ + if(Array.isArray(build.stylesheets)) { + let match = false; + for (let link of document.querySelectorAll(`link[rel="stylesheet"]`)) { + if (link.href) { + let url = new URL(link.href); + if(build.stylesheets.includes(url.pathname)) { + match = true; + } + } + } + + if(!match) { + Util.fullPageReload(); + return; + } + } + + for (let link of document.querySelectorAll(`link[rel="stylesheet"]`)) { + if (link.href) { + let url = new URL(link.href); + url.searchParams.set(this.QUERY_PARAM, Date.now()); + link.href = url.toString(); + } + } + + Util.log(`CSS updated without page reload.`); + }, + default: async (files, build = {}) => { + let morphed = false; + let domdiffTemplates = (build?.templates || []).filter(({url, inputPath}) => { + return url === document.location.pathname && (files || []).includes(inputPath); + }); + + if(domdiffTemplates.length === 0) { + Util.fullPageReload(); + return; + } + + try { + // Important: using `./` allows the `.11ty` folder name to be changed + const { default: morphdom } = await import(`./morphdom.js`); + + for (let {url, inputPath, content} of domdiffTemplates) { + // Notable limitation: this won’t re-run script elements or JavaScript page lifecycle events (load/DOMContentLoaded) + morphed = true; + + morphdom(document.documentElement, content, { + childrenOnly: true, + onBeforeElUpdated: function (fromEl, toEl) { + if (fromEl.nodeName === "SCRIPT" && toEl.nodeName === "SCRIPT") { + if(toEl.innerHTML !== fromEl.innerHTML) { + Util.log(`JavaScript modified, reload initiated.`); + window.location.reload(); + } + + return false; + } + + // Speed-up trick from morphdom docs + // https://dom.spec.whatwg.org/#concept-node-equals + if (fromEl.isEqualNode(toEl)) { + return false; + } + + if(Util.isEleventyLinkNodeMatch(fromEl, toEl)) { + return false; + } + + return true; + }, + addChild: function(parent, child) { + // Declarative Shadow DOM https://github.com/11ty/eleventy-dev-server/issues/90 + if(child.nodeName === "TEMPLATE" && child.hasAttribute("shadowrootmode")) { + let root = parent.shadowRoot; + if(root) { + // remove all shadow root children + while(root.firstChild) { + root.removeChild(root.firstChild); + } + } + for(let newChild of child.content.childNodes) { + root.appendChild(newChild); + } + } else { + parent.appendChild(child); + } + }, + onNodeAdded: function (node) { + if (node.nodeName === 'SCRIPT') { + Util.log(`JavaScript added, reload initiated.`); + window.location.reload(); + } + }, + onElUpdated: function(node) { + // Re-attach custom elements + if(customElements.get(node.tagName.toLowerCase())) { + let placeholder = document.createElement("div"); + node.replaceWith(placeholder); + requestAnimationFrame(() => { + placeholder.replaceWith(node); + placeholder = undefined; + }); + } + } + }); + + Util.matchRootAttributes(content); + Util.log(`HTML delta applied without page reload.`); + } + } catch(e) { + Util.error( "Morphdom error", e ); + } + + if (!morphed) { + Util.fullPageReload(); + } + } + } + + constructor() { + this.connectionMessageShown = false; + this.reconnectEventCallback = this.reconnect.bind(this); + } + + init(options = {}) { + if (!("WebSocket" in window)) { + return; + } + + let documentUrl = new URL(document.location.href); + + let reloadPort = new URL(import.meta.url).searchParams.get("reloadPort"); + if(reloadPort) { + documentUrl.port = reloadPort; + } + + let { protocol, host } = documentUrl; + + // works with http (ws) and https (wss) + let websocketProtocol = protocol.replace("http", "ws"); + + let socket = new WebSocket(`${websocketProtocol}//${host}`); + + socket.addEventListener("message", async (event) => { + try { + let data = JSON.parse(event.data); + // Util.log( JSON.stringify(data, null, 2) ); + + let { type } = data; + + if (type === "eleventy.reload") { + await this.onreload(data); + } else if (type === "eleventy.msg") { + Util.log(`${data.message}`); + } else if (type === "eleventy.error") { + // Log Eleventy build errors + // Extra parsing for Node Error objects + let e = JSON.parse(data.error); + Util.error(`Build error: ${e.message}`, e); + } else if (type === "eleventy.status") { + // Full page reload on initial reconnect + if (data.status === "connected" && options.mode === "reconnect") { + window.location.reload(); + } + + if(data.status === "connected") { + // With multiple windows, only show one connection message + if(!this.isConnected) { + Util.log(Util.capitalize(data.status)); + } + + this.connectionMessageShown = true; + } else { + if(data.status === "disconnected") { + this.addReconnectListeners(); + } + + Util.log(Util.capitalize(data.status)); + } + } else { + Util.log("Unknown event type", data); + } + } catch (e) { + Util.error(`Error parsing ${event.data}: ${e.message}`, e); + } + }); + + socket.addEventListener("open", () => { + // no reconnection when the connect is already open + this.removeReconnectListeners(); + }); + + socket.addEventListener("close", () => { + this.connectionMessageShown = false; + this.addReconnectListeners(); + }); + } + + reconnect() { + Util.log( "Reconnecting…" ); + this.init({ mode: "reconnect" }); + } + + async onreload({ subtype, files, build }) { + if(!EleventyReload.reloadTypes[subtype]) { + subtype = "default"; + } + + await EleventyReload.reloadTypes[subtype](files, build); + } + + addReconnectListeners() { + this.removeReconnectListeners(); + + window.addEventListener("focus", this.reconnectEventCallback); + window.addEventListener("visibilitychange", this.reconnectEventCallback); + } + + removeReconnectListeners() { + window.removeEventListener("focus", this.reconnectEventCallback); + window.removeEventListener("visibilitychange", this.reconnectEventCallback); + } +} + +let reloader = new EleventyReload(); +reloader.init(); \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-dev-server/cmd.js b/node_modules/@11ty/eleventy-dev-server/cmd.js new file mode 100644 index 00000000..695b8459 --- /dev/null +++ b/node_modules/@11ty/eleventy-dev-server/cmd.js @@ -0,0 +1,77 @@ +#!/usr/bin/env node + +const pkg = require("./package.json"); + +// Node check +require("please-upgrade-node")(pkg, { + message: function (requiredVersion) { + return ( + "eleventy-dev-server requires Node " + + requiredVersion + + ". You will need to upgrade Node!" + ); + }, +}); + +const { Logger, Cli } = require("./cli.js"); + +const debug = require("debug")("Eleventy:DevServer"); + +try { + const defaults = Cli.getDefaultOptions(); + for(let key in defaults) { + if(key.toLowerCase() !== key) { + defaults[key.toLowerCase()] = defaults[key]; + delete defaults[key]; + } + } + + const argv = require("minimist")(process.argv.slice(2), { + string: [ + "dir", + "input", // alias for dir + "port", + ], + boolean: [ + "version", + "help", + "domdiff", + ], + default: defaults, + unknown: function (unknownArgument) { + throw new Error( + `We don’t know what '${unknownArgument}' is. Use --help to see the list of supported commands.` + ); + }, + }); + + debug("command: eleventy-dev-server %o", argv); + + process.on("unhandledRejection", (error, promise) => { + Logger.fatal("Unhandled rejection in promise:", promise, error); + }); + process.on("uncaughtException", (error) => { + Logger.fatal("Uncaught exception:", error); + }); + + if (argv.version) { + console.log(Cli.getVersion()); + } else if (argv.help) { + console.log(Cli.getHelp()); + } else { + let cli = new Cli(); + + cli.serve({ + input: argv.dir || argv.input, + port: argv.port, + domDiff: argv.domdiff, + }); + + process.on("SIGINT", async () => { + await cli.close(); + process.exitCode = 0; + }); + } +} catch (e) { + Logger.fatal("Fatal Error:", e) +} diff --git a/node_modules/@11ty/eleventy-dev-server/package.json b/node_modules/@11ty/eleventy-dev-server/package.json new file mode 100644 index 00000000..e413c7c1 --- /dev/null +++ b/node_modules/@11ty/eleventy-dev-server/package.json @@ -0,0 +1,57 @@ +{ + "name": "@11ty/eleventy-dev-server", + "version": "2.0.8", + "description": "A minimal, modern, generic, hot-reloading local web server to help web developers.", + "main": "server.js", + "scripts": { + "test": "npx ava --verbose", + "sample": "node cmd.js --input=test/stubs" + }, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + }, + "bin": { + "eleventy-dev-server": "./cmd.js" + }, + "keywords": [ + "eleventy", + "server", + "cli" + ], + "publishConfig": { + "access": "public" + }, + "author": { + "name": "Zach Leatherman", + "email": "zachleatherman@gmail.com", + "url": "https://zachleat.com/" + }, + "repository": { + "type": "git", + "url": "git://github.com/11ty/eleventy-dev-server.git" + }, + "bugs": "https://github.com/11ty/eleventy-dev-server/issues", + "homepage": "https://github.com/11ty/eleventy-dev-server/", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1", + "chokidar": "^3.6.0", + "debug": "^4.4.0", + "finalhandler": "^1.3.1", + "mime": "^3.0.0", + "minimist": "^1.2.8", + "morphdom": "^2.7.4", + "please-upgrade-node": "^3.2.0", + "send": "^1.1.0", + "ssri": "^11.0.0", + "urlpattern-polyfill": "^10.0.0", + "ws": "^8.18.1" + }, + "devDependencies": { + "ava": "^6.2.0" + } +} diff --git a/node_modules/@11ty/eleventy-dev-server/server.js b/node_modules/@11ty/eleventy-dev-server/server.js new file mode 100644 index 00000000..9fbe898e --- /dev/null +++ b/node_modules/@11ty/eleventy-dev-server/server.js @@ -0,0 +1,1024 @@ +const path = require("node:path"); +const fs = require("node:fs"); + +const finalhandler = require("finalhandler"); +const WebSocket = require("ws"); +const { WebSocketServer } = WebSocket; +const mime = require("mime"); +const ssri = require("ssri"); +const send = require("send"); +const chokidar = require("chokidar"); +const { TemplatePath, isPlainObject } = require("@11ty/eleventy-utils"); + +const debug = require("debug")("Eleventy:DevServer"); + +const pkg = require("./package.json"); +const wrapResponse = require("./server/wrapResponse.js"); +const ipAddress = require("./server/ipAddress.js"); + +if (!globalThis.URLPattern) { + require("urlpattern-polyfill"); +} + +const DEFAULT_OPTIONS = { + port: 8080, + reloadPort: false, // Falsy uses same as `port` + liveReload: true, // Enable live reload at all + showAllHosts: false, // IP address based hosts (other than localhost) + injectedScriptsFolder: ".11ty", // Change the name of the special folder used for injected scripts + portReassignmentRetryCount: 10, // number of times to increment the port if in use + https: {}, // `key` and `cert`, required for http/2 and https + domDiff: true, // Use morphdom to apply DOM diffing delta updates to HTML + showVersion: false, // Whether or not to show the server version on the command line. + encoding: "utf-8", // Default file encoding + pathPrefix: "/", // May be overridden by Eleventy, adds a virtual base directory to your project + watch: [], // Globs to pass to separate dev server chokidar for watching + aliases: {}, // Aliasing feature + indexFileName: "index.html", // Allow custom index file name + useCache: false, // Use a cache for file contents + headers: {}, // Set default response headers + messageOnStart: ({ hosts, startupTime, version, options }) => { + let hostsStr = " started"; + if(Array.isArray(hosts) && hosts.length > 0) { + // TODO what happens when the cert doesn’t cover non-localhost hosts? + hostsStr = ` at ${hosts.join(" or ")}`; + } + + return `Server${hostsStr}${options.showVersion ? ` (v${version})` : ""}`; + }, + + onRequest: {}, // Maps URLPatterns to dynamic callback functions that run on a request from a client. + + // Example: + // "/foo/:name": function({ url, pattern, patternGroups }) { + // return { + // headers: { + // "Content-Type": "text/html", + // }, + // body: `${url} ${JSON.stringify(patternGroups)}` + // } + // } + + // Logger (fancier one is injected by Eleventy) + logger: { + info: console.log, + log: console.log, + error: console.error, + } +} + +class EleventyDevServer { + #watcher; + #serverClosing; + #serverState; + #readyPromise; + #readyResolve; + + static getServer(...args) { + return new EleventyDevServer(...args); + } + + constructor(name, dir, options = {}) { + debug("Creating new Dev Server instance.") + this.name = name; + this.normalizeOptions(options); + + this.fileCache = {}; + // Directory to serve + if(!dir) { + throw new Error("Missing `dir` to serve."); + } + this.dir = dir; + this.logger = this.options.logger; + this.getWatcher(); + + this.#readyPromise = new Promise((resolve) => { + this.#readyResolve = resolve; + }) + } + + normalizeOptions(options = {}) { + this.options = Object.assign({}, DEFAULT_OPTIONS, options); + + // better names for options https://github.com/11ty/eleventy-dev-server/issues/41 + if(options.folder !== undefined) { + this.options.injectedScriptsFolder = options.folder; + delete this.options.folder; + } + if(options.domdiff !== undefined) { + this.options.domDiff = options.domdiff; + delete this.options.domdiff; + } + if(options.enabled !== undefined) { + this.options.liveReload = options.enabled; + delete this.options.enabled; + } + + this.options.pathPrefix = this.cleanupPathPrefix(this.options.pathPrefix); + } + + get watcher() { + if(this.#watcher) { + return this.#watcher; + } + + debug("Watching %O", this.options.watch); + // TODO if using Eleventy and `watch` option includes output folder (_site) this will trigger two update events! + this.#watcher = chokidar.watch(this.options.watch, { + // TODO allow chokidar configuration extensions (or re-use the ones in Eleventy) + + ignored: ["**/node_modules/**", ".git"], + ignoreInitial: true, + + // same values as Eleventy + awaitWriteFinish: { + stabilityThreshold: 150, + pollInterval: 25, + }, + }); + + this.#watcher.on("change", (path) => { + this.logger.log( `File changed: ${path} (skips build)` ); + this.reloadFiles([path]); + }); + + this.#watcher.on("add", (path) => { + this.logger.log( `File added: ${path} (skips build)` ); + this.reloadFiles([path]); + }); + + return this.#watcher; + } + + getWatcher() { + // only initialize watcher if watcher via getWatcher if has targets + // this.watcher in watchFiles() is a manual workaround + if(this.options.watch.length > 0) { + return this.watcher; + } + } + + watchFiles(files) { + if(Array.isArray(files) && files.length > 0) { + files = files.map(entry => TemplatePath.stripLeadingDotSlash(entry)); + + debug("Also watching %O", files); + this.watcher.add(files); + } + } + + cleanupPathPrefix(pathPrefix) { + if(!pathPrefix || pathPrefix === "/") { + return "/"; + } + if(!pathPrefix.startsWith("/")) { + pathPrefix = `/${pathPrefix}` + } + if(!pathPrefix.endsWith("/")) { + pathPrefix = `${pathPrefix}/`; + } + return pathPrefix; + } + + // Allowed list of files that can be served from outside `dir` + setAliases(aliases) { + if(aliases) { + this.passthroughAliases = aliases; + debug( "Setting aliases (emulated passthrough copy) %O", aliases ); + } + } + + matchPassthroughAlias(url) { + let aliases = Object.assign({}, this.options.aliases, this.passthroughAliases); + for(let targetUrl in aliases) { + if(!targetUrl) { + continue; + } + + let file = aliases[targetUrl]; + if(url.startsWith(targetUrl)) { + let inputDirectoryPath = file + url.slice(targetUrl.length); + + // e.g. addPassthroughCopy("img/") but + // generated by the image plugin (written to the output folder) + // If they do not exist in the input directory, this will fallback to the output directory. + if(fs.existsSync(inputDirectoryPath)) { + return inputDirectoryPath; + } + } + } + return false; + } + + isFileInDirectory(dir, file) { + let absoluteDir = TemplatePath.absolutePath(dir); + let absoluteFile = TemplatePath.absolutePath(file); + return absoluteFile.startsWith(absoluteDir); + } + + getOutputDirFilePath(filepath, filename = "") { + let computedPath; + if(filename === ".html") { + // avoid trailing slash for filepath/.html requests + let prefix = path.join(this.dir, filepath); + if(prefix.endsWith(path.sep)) { + prefix = prefix.substring(0, prefix.length - path.sep.length); + } + computedPath = prefix + filename; + } else { + computedPath = path.join(this.dir, filepath, filename); + } + + computedPath = decodeURIComponent(computedPath); + + if(!filename) { // is a direct URL request (not an implicit .html or index.html add) + let alias = this.matchPassthroughAlias(filepath); + + if(alias) { + if(!this.isFileInDirectory(path.resolve("."), alias)) { + throw new Error("Invalid path"); + } + + return alias; + } + } + + // Check that the file is in the output path (error if folks try use `..` in the filepath) + if(!this.isFileInDirectory(this.dir, computedPath)) { + throw new Error("Invalid path"); + } + + return computedPath; + } + + isOutputFilePathExists(rawPath) { + return fs.existsSync(rawPath) && !TemplatePath.isDirectorySync(rawPath); + } + + /* Use conventions documented here https://www.zachleat.com/web/trailing-slash/ + * resource.html exists: + * /resource matches + * /resource/ redirects to /resource + * resource/index.html exists: + * /resource redirects to /resource/ + * /resource/ matches + * both resource.html and resource/index.html exists: + * /resource matches /resource.html + * /resource/ matches /resource/index.html + */ + mapUrlToFilePath(url) { + // Note: `localhost` is not important here, any host would work + let u = new URL(url, "http://localhost/"); + url = u.pathname; + + // Remove PathPrefix from start of URL + if (this.options.pathPrefix !== "/") { + // Requests to root should redirect to new pathPrefix + if(url === "/") { + return { + statusCode: 302, + url: this.options.pathPrefix, + } + } + + // Requests to anything outside of root should fail with 404 + if (!url.startsWith(this.options.pathPrefix)) { + return { + statusCode: 404, + }; + } + + url = url.slice(this.options.pathPrefix.length - 1); + } + + let rawPath = this.getOutputDirFilePath(url); + if (this.isOutputFilePathExists(rawPath)) { + return { + statusCode: 200, + filepath: rawPath, + }; + } + + let indexHtmlPath = this.getOutputDirFilePath(url, this.options.indexFileName); + let indexHtmlExists = fs.existsSync(indexHtmlPath); + + let htmlPath = this.getOutputDirFilePath(url, ".html"); + let htmlExists = fs.existsSync(htmlPath); + + // /resource/ => /resource/index.html + if (indexHtmlExists && url.endsWith("/")) { + return { + statusCode: 200, + filepath: indexHtmlPath, + }; + } + // /resource => resource.html + if (htmlExists && !url.endsWith("/")) { + return { + statusCode: 200, + filepath: htmlPath, + }; + } + + // /resource => redirect to /resource/ + if (indexHtmlExists && !url.endsWith("/")) { + return { + statusCode: 301, + url: u.pathname + "/", + }; + } + + // /resource/ => redirect to /resource + if (htmlExists && url.endsWith("/")) { + return { + statusCode: 301, + url: u.pathname.substring(0, u.pathname.length - 1), + }; + } + + return { + statusCode: 404, + }; + } + + #readFile(filepath) { + if(this.options.useCache && this.fileCache[filepath]) { + return this.fileCache[filepath]; + } + + let contents = fs.readFileSync(filepath, { + encoding: this.options.encoding, + }); + + if(this.options.useCache) { + this.fileCache[filepath] = contents; + } + + return contents; + } + + #getFileContents(localpath, rootDir) { + let filepath; + let searchLocations = []; + + if(rootDir) { + searchLocations.push(TemplatePath.absolutePath(rootDir, localpath)); + } + + // fallbacks for file:../ installations + searchLocations.push(TemplatePath.absolutePath(__dirname, localpath)); + searchLocations.push(TemplatePath.absolutePath(__dirname, "../../../", localpath)); + + for(let loc of searchLocations) { + if(fs.existsSync(loc)) { + filepath = loc; + break; + } + } + + return this.#readFile(filepath); + } + + augmentContentWithNotifier(content, inlineContents = false, options = {}) { + let { integrityHash, scriptContents } = options; + if(!scriptContents) { + scriptContents = this.#getFileContents("./client/reload-client.js"); + } + if(!integrityHash) { + integrityHash = ssri.fromData(scriptContents); + } + + let searchParams = new URLSearchParams(); + if(this.options.reloadPort) { + searchParams.set("reloadPort", this.options.reloadPort); + } + + let searchParamsStr = searchParams.size > 0 ? `?${searchParams.toString()}` : ""; + + // This isn’t super necessary because it’s a local file, but it’s included anyway + let script = ``; + + if (content.includes("")) { + return content.replace("", `${script}`); + } + + // If the HTML document contains an importmap, insert the module script after the importmap element + let importMapRegEx = / + +``` + +* Existing calls via WebC helpers `getCss` or `getJs` (e.g. ` +{% endcss %} +* a way to declare dependencies? or just defer to buckets here +* What if we want to add code duplicates? Adding `alert(1);` `alert(1);` to alert twice? +* sourcemaps (maybe via magic-string module or https://www.npmjs.com/package/concat-with-sourcemaps) +--> \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-plugin-bundle/eleventy.bundle.js b/node_modules/@11ty/eleventy-plugin-bundle/eleventy.bundle.js new file mode 100644 index 00000000..35f571ce --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/eleventy.bundle.js @@ -0,0 +1,72 @@ +import bundleManagersPlugin from "./src/eleventy.bundleManagers.js"; +import pruneEmptyBundlesPlugin from "./src/eleventy.pruneEmptyBundles.js"; +import globalShortcodesAndTransforms from "./src/eleventy.shortcodes.js"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Bundle"); + +function normalizeOptions(options = {}) { + options = Object.assign({ + // Plugin defaults + + // Extra bundles + // css, js, and html are guaranteed unless `bundles: false` + bundles: [], + toFileDirectory: "bundle", + // post-process + transforms: [], + hoistDuplicateBundlesFor: [], + bundleExportKey: "bundle", // use a `bundle` export in a 11ty.js template to populate bundles + + force: false, // force overwrite of existing getBundleManagers and addBundle configuration API methods + }, options); + + if(options.bundles !== false) { + options.bundles = Array.from(new Set(["css", "js", "html", ...(options.bundles || [])])); + } + + return options; +} + +function eleventyBundlePlugin(eleventyConfig, pluginOptions = {}) { + eleventyConfig.versionCheck(">=3.0.0"); + pluginOptions = normalizeOptions(pluginOptions); + + let alreadyAdded = "getBundleManagers" in eleventyConfig || "addBundle" in eleventyConfig; + if(!alreadyAdded || pluginOptions.force) { + if(alreadyAdded && pluginOptions.force) { + debug("Bundle plugin already added via `addPlugin`, add was forced via `force: true`"); + } + + bundleManagersPlugin(eleventyConfig, pluginOptions); + } + + // These can’t be unique (don’t skip re-add above), when the configuration file resets they need to be added again + pruneEmptyBundlesPlugin(eleventyConfig, pluginOptions); + globalShortcodesAndTransforms(eleventyConfig, pluginOptions); + + // Support subsequent calls like addPlugin(BundlePlugin, { bundles: [] }); + if(Array.isArray(pluginOptions.bundles)) { + debug("Adding bundles via `addPlugin`: %o", pluginOptions.bundles) + pluginOptions.bundles.forEach(name => { + let isHoisting = Array.isArray(pluginOptions.hoistDuplicateBundlesFor) && pluginOptions.hoistDuplicateBundlesFor.includes(name); + + eleventyConfig.addBundle(name, { + hoist: isHoisting, + outputFileExtension: name, // default as `name` + shortcodeName: name, // `false` will skip shortcode + transforms: pluginOptions.transforms, + toFileDirectory: pluginOptions.toFileDirectory, + bundleExportKey: pluginOptions.bundleExportKey, // `false` will skip bundle export + }); + }); + } +}; + +// This is used to find the package name for this plugin (used in eleventy-plugin-webc to prevent dupes) +Object.defineProperty(eleventyBundlePlugin, "eleventyPackage", { + value: "@11ty/eleventy-plugin-bundle" +}); + +export default eleventyBundlePlugin; +export { normalizeOptions }; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/package.json b/node_modules/@11ty/eleventy-plugin-bundle/package.json new file mode 100644 index 00000000..21c8405b --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/package.json @@ -0,0 +1,62 @@ +{ + "name": "@11ty/eleventy-plugin-bundle", + "version": "3.0.7", + "description": "Little bundles of code, little bundles of joy.", + "main": "eleventy.bundle.js", + "type": "module", + "scripts": { + "sample": "DEBUG=Eleventy:Bundle npx @11ty/eleventy --config=sample/sample-config.js --input=sample --serve", + "test": "npx ava" + }, + "publishConfig": { + "access": "public" + }, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + }, + "keywords": [ + "eleventy", + "eleventy-plugin" + ], + "repository": { + "type": "git", + "url": "git://github.com/11ty/eleventy-plugin-bundle.git" + }, + "bugs": "https://github.com/11ty/eleventy-plugin-bundle/issues", + "homepage": "https://www.11ty.dev/", + "author": { + "name": "Zach Leatherman", + "email": "zachleatherman@gmail.com", + "url": "https://zachleat.com/" + }, + "ava": { + "failFast": true, + "files": [ + "test/*.js", + "test/*.mjs" + ], + "watchMode": { + "ignoreChanges": [ + "**/_site/**", + ".cache" + ] + } + }, + "devDependencies": { + "@11ty/eleventy": "^3.0.0", + "ava": "^6.2.0", + "postcss": "^8.5.3", + "postcss-nested": "^7.0.2", + "sass": "^1.86.3" + }, + "dependencies": { + "@11ty/eleventy-utils": "^2.0.2", + "debug": "^4.4.0", + "posthtml-match-helper": "^2.0.3" + } +} diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/BundleFileOutput.js b/node_modules/@11ty/eleventy-plugin-bundle/src/BundleFileOutput.js new file mode 100644 index 00000000..332c5b71 --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/BundleFileOutput.js @@ -0,0 +1,75 @@ +import fs from "node:fs"; +import path from "node:path"; +import debugUtil from "debug"; + +import { createHash } from "@11ty/eleventy-utils"; + +const debug = debugUtil("Eleventy:Bundle"); + +const hashCache = {}; +const directoryExistsCache = {}; +const writingCache = new Set(); + +class BundleFileOutput { + constructor(outputDirectory, bundleDirectory) { + this.outputDirectory = outputDirectory; + this.bundleDirectory = bundleDirectory || ""; + this.hashLength = 10; + this.fileExtension = undefined; + } + + setFileExtension(ext) { + this.fileExtension = ext; + } + + async getFilenameHash(content) { + if(hashCache[content]) { + return hashCache[content]; + } + + let base64hash = await createHash(content); + let filenameHash = base64hash.substring(0, this.hashLength); + hashCache[content] = filenameHash; + return filenameHash; + } + + getFilename(filename, extension) { + return filename + (extension && !extension.startsWith(".") ? `.${extension}` : ""); + } + + modifyPathToUrl(dir, filename) { + return "/" + path.join(dir, filename).split(path.sep).join("/"); + } + + async writeBundle(content, type, writeToFileSystem) { + // do not write a bundle, do not return a file name is content is empty + if(!content) { + return; + } + + let dir = path.join(this.outputDirectory, this.bundleDirectory); + let filenameHash = await this.getFilenameHash(content); + let filename = this.getFilename(filenameHash, this.fileExtension || type); + + if(writeToFileSystem) { + let fullPath = path.join(dir, filename); + + // no duplicate writes, this may be improved with a fs exists check, but it would only save the first write + if(!writingCache.has(fullPath)) { + writingCache.add(fullPath); + + if(!directoryExistsCache[dir]) { + fs.mkdirSync(dir, { recursive: true }); + directoryExistsCache[dir] = true; + } + + debug("Writing bundle %o", fullPath); + fs.writeFileSync(fullPath, content); + } + } + + return this.modifyPathToUrl(this.bundleDirectory, filename); + } +} + +export { BundleFileOutput }; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/CodeManager.js b/node_modules/@11ty/eleventy-plugin-bundle/src/CodeManager.js new file mode 100644 index 00000000..809c242a --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/CodeManager.js @@ -0,0 +1,231 @@ +import { BundleFileOutput } from "./BundleFileOutput.js"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Bundle"); +const DEBUG_LOG_TRUNCATION_SIZE = 200; + +class CodeManager { + // code is placed in this bucket by default + static DEFAULT_BUCKET_NAME = "default"; + + // code is hoisted to this bucket when necessary + static HOISTED_BUCKET_NAME = "default"; + + constructor(name) { + this.name = name; + this.trimOnAdd = true; + // TODO unindent on add + this.reset(); + this.transforms = []; + this.isHoisting = true; + this.fileExtension = undefined; + this.toFileDirectory = undefined; + this.bundleExportKey = "bundle"; + this.runsAfterHtmlTransformer = false; + this.pluckedSelector = undefined; + } + + setDelayed(isDelayed) { + this.runsAfterHtmlTransformer = Boolean(isDelayed); + } + + isDelayed() { + return this.runsAfterHtmlTransformer; + } + + // posthtml-match-selector friendly + setPluckedSelector(selector) { + this.pluckedSelector = selector; + } + + getPluckedSelector() { + return this.pluckedSelector; + } + + setFileExtension(ext) { + this.fileExtension = ext; + } + + setHoisting(enabled) { + this.isHoisting = !!enabled; + } + + setBundleDirectory(dir) { + this.toFileDirectory = dir; + } + + setBundleExportKey(key) { + this.bundleExportKey = key; + } + + getBundleExportKey() { + return this.bundleExportKey; + } + + reset() { + this.pages = {}; + } + + static normalizeBuckets(bucket) { + if(Array.isArray(bucket)) { + return bucket; + } else if(typeof bucket === "string") { + return bucket.split(","); + } + return [CodeManager.DEFAULT_BUCKET_NAME]; + } + + setTransforms(transforms) { + if(!Array.isArray(transforms)) { + throw new Error("Array expected to setTransforms"); + } + + this.transforms = transforms; + } + + _initBucket(pageUrl, bucket) { + if(!this.pages[pageUrl][bucket]) { + this.pages[pageUrl][bucket] = new Set(); + } + } + + addToPage(pageUrl, code = [], bucket) { + if(!Array.isArray(code) && code) { + code = [code]; + } + if(code.length === 0) { + return; + } + + if(!this.pages[pageUrl]) { + this.pages[pageUrl] = {}; + } + + let buckets = CodeManager.normalizeBuckets(bucket); + + let codeContent = code.map(entry => { + if(this.trimOnAdd) { + return entry.trim(); + } + return entry; + }); + + + for(let b of buckets) { + this._initBucket(pageUrl, b); + + for(let content of codeContent) { + if(content) { + if(!this.pages[pageUrl][b].has(content)) { + debug("Adding code to bundle %o for %o (bucket: %o, size: %o): %o", this.name, pageUrl, b, content.length, content.length > DEBUG_LOG_TRUNCATION_SIZE ? content.slice(0, DEBUG_LOG_TRUNCATION_SIZE) + "…" : content); + this.pages[pageUrl][b].add(content); + } + } + } + } + } + + async runTransforms(str, pageData, buckets) { + for (let callback of this.transforms) { + str = await callback.call( + { + page: pageData, + type: this.name, + buckets: buckets + }, + str + ); + } + + return str; + } + + getBucketsForPage(pageData) { + let pageUrl = pageData.url; + if(!this.pages[pageUrl]) { + return []; + } + return Object.keys(this.pages[pageUrl]); + } + + getRawForPage(pageData, buckets = undefined) { + let url = pageData.url; + if(!this.pages[url]) { + debug("No bundle code found for %o on %o, %O", this.name, url, this.pages); + return new Set(); + } + + buckets = CodeManager.normalizeBuckets(buckets); + + let set = new Set(); + let size = 0; + for(let b of buckets) { + if(!this.pages[url][b]) { + // Just continue, if you retrieve code from a bucket that doesn’t exist or has no code, it will return an empty set + continue; + } + + for(let entry of this.pages[url][b]) { + size += entry.length; + set.add(entry); + } + } + + debug("Retrieving %o for %o (buckets: %o, entries: %o, size: %o)", this.name, url, buckets, set.size, size); + return set; + } + + async getForPage(pageData, buckets = undefined) { + let set = this.getRawForPage(pageData, buckets); + let bundleContent = Array.from(set).join("\n"); + + // returns promise + return this.runTransforms(bundleContent, pageData, buckets); + } + + async writeBundle(pageData, buckets, options = {}) { + let url = pageData.url; + if(!this.pages[url]) { + debug("No bundle code found for %o on %o, %O", this.name, url, this.pages); + return ""; + } + + let { output, write } = options; + + buckets = CodeManager.normalizeBuckets(buckets); + + // TODO the bundle output URL might be useful in the transforms for sourcemaps + let content = await this.getForPage(pageData, buckets); + let writer = new BundleFileOutput(output, this.toFileDirectory); + writer.setFileExtension(this.fileExtension); + return writer.writeBundle(content, this.name, write); + } + + // Used when a bucket is output multiple times on a page and needs to be hoisted + hoistBucket(pageData, bucketName) { + let newTargetBucketName = CodeManager.HOISTED_BUCKET_NAME; + if(!this.isHoisting || bucketName === newTargetBucketName) { + return; + } + + let url = pageData.url; + if(!this.pages[url] || !this.pages[url][bucketName]) { + debug("No bundle code found for %o on %o, %O", this.name, url, this.pages); + return; + } + + debug("Code in bucket (%o) is being hoisted to a new bucket (%o)", bucketName, newTargetBucketName); + + this._initBucket(url, newTargetBucketName); + + for(let codeEntry of this.pages[url][bucketName]) { + this.pages[url][bucketName].delete(codeEntry); + this.pages[url][newTargetBucketName].add(codeEntry); + } + + // delete the bucket + delete this.pages[url][bucketName]; + } +} + +export { CodeManager }; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/OutOfOrderRender.js b/node_modules/@11ty/eleventy-plugin-bundle/src/OutOfOrderRender.js new file mode 100644 index 00000000..6cafa491 --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/OutOfOrderRender.js @@ -0,0 +1,158 @@ +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Bundle"); + +/* This class defers any `bundleGet` calls to a post-build transform step, + * to allow `getBundle` to be called before all of the `css` additions have been processed + */ +class OutOfOrderRender { + static SPLIT_REGEX = /(\/\*__EleventyBundle:[^:]*:[^:]*:[^:]*:EleventyBundle__\*\/)/; + static SEPARATOR = ":"; + + constructor(content) { + this.content = content; + this.managers = {}; + } + + // type if `get` (return string) or `file` (bundle writes to file, returns file url) + static getAssetKey(type, name, bucket) { + if(Array.isArray(bucket)) { + bucket = bucket.join(","); + } else if(typeof bucket === "string") { + } else { + bucket = ""; + } + return `/*__EleventyBundle:${type}:${name}:${bucket || "default"}:EleventyBundle__*/` + } + + static parseAssetKey(str) { + if(str.startsWith("/*__EleventyBundle:")) { + let [prefix, type, name, bucket, suffix] = str.split(OutOfOrderRender.SEPARATOR); + return { type, name, bucket }; + } + return false; + } + + setAssetManager(name, assetManager) { + this.managers[name] = assetManager; + } + + setOutputDirectory(dir) { + this.outputDirectory = dir; + } + + normalizeMatch(match) { + let ret = OutOfOrderRender.parseAssetKey(match) + return ret || match; + } + + findAll() { + let matches = this.content.split(OutOfOrderRender.SPLIT_REGEX); + let ret = []; + for(let match of matches) { + ret.push(this.normalizeMatch(match)); + } + return ret; + } + + setWriteToFileSystem(isWrite) { + this.writeToFileSystem = isWrite; + } + + getAllBucketsForPage(pageData) { + let availableBucketsForPage = new Set(); + for(let name in this.managers) { + for(let bucket of this.managers[name].getBucketsForPage(pageData)) { + availableBucketsForPage.add(`${name}::${bucket}`); + } + } + return availableBucketsForPage; + } + + getManager(name) { + if(!this.managers[name]) { + throw new Error(`No asset manager found for ${name}. Known names: ${Object.keys(this.managers)}`); + } + return this.managers[name]; + } + + async replaceAll(pageData, stage = 0) { + let matches = this.findAll(); + let availableBucketsForPage = this.getAllBucketsForPage(pageData); + let usedBucketsOnPage = new Set(); + let bucketsOutputStringCount = {}; + let bucketsFileCount = {}; + + for(let match of matches) { + if(typeof match === "string") { + continue; + } + + // type is `file` or `get` + let {type, name, bucket} = match; + let key = `${name}::${bucket}`; + if(!usedBucketsOnPage.has(key)) { + usedBucketsOnPage.add(key); + } + + if(type === "get") { + if(!bucketsOutputStringCount[key]) { + bucketsOutputStringCount[key] = 0; + } + bucketsOutputStringCount[key]++; + } else if(type === "file") { + if(!bucketsFileCount[key]) { + bucketsFileCount[key] = 0; + } + bucketsFileCount[key]++; + } + } + + // Hoist code in non-default buckets that are output multiple times + // Only hoist if 2+ `get` OR 1+ `get` and 1+ `file` + for(let bucketInfo in bucketsOutputStringCount) { + let stringOutputCount = bucketsOutputStringCount[bucketInfo]; + if(stringOutputCount > 1 || stringOutputCount === 1 && bucketsFileCount[bucketInfo] > 0) { + let [name, bucketName] = bucketInfo.split("::"); + this.getManager(name).hoistBucket(pageData, bucketName); + } + } + + let content = await Promise.all(matches.map(match => { + if(typeof match === "string") { + return match; + } + + let {type, name, bucket} = match; + let manager = this.getManager(name); + + // Quit early if in stage 0, run delayed replacements if in stage 1+ + if(typeof manager.isDelayed === "function" && manager.isDelayed() && stage === 0) { + return OutOfOrderRender.getAssetKey(type, name, bucket); + } + + if(type === "get") { + // returns promise + return manager.getForPage(pageData, bucket); + } else if(type === "file") { + // returns promise + return manager.writeBundle(pageData, bucket, { + output: this.outputDirectory, + write: this.writeToFileSystem, + }); + } + return ""; + })); + + for(let bucketInfo of availableBucketsForPage) { + if(!usedBucketsOnPage.has(bucketInfo)) { + let [name, bucketName] = bucketInfo.split("::"); + debug(`WARNING! \`${pageData.inputPath}\` has unbundled \`${name}\` assets (in the '${bucketName}' bucket) that were not written to or used on the page. You might want to add a call to \`getBundle('${name}', '${bucketName}')\` to your content! Learn more: https://github.com/11ty/eleventy-plugin-bundle#asset-bucketing`); + } + } + + return content.join(""); + } +} + +export { OutOfOrderRender }; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/bundlePlucker.js b/node_modules/@11ty/eleventy-plugin-bundle/src/bundlePlucker.js new file mode 100644 index 00000000..5dcad467 --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/bundlePlucker.js @@ -0,0 +1,69 @@ +import debugUtil from "debug"; +import matchHelper from "posthtml-match-helper"; + +const debug = debugUtil("Eleventy:Bundle"); + +const ATTRS = { + ignore: "eleventy:ignore", + bucket: "eleventy:bucket", +}; + +const POSTHTML_PLUGIN_NAME = "11ty/eleventy/html-bundle-plucker"; + +function hasAttribute(node, name) { + return node?.attrs?.[name] !== undefined; +} + +function addHtmlPlucker(eleventyConfig, bundleManager) { + let matchSelector = bundleManager.getPluckedSelector(); + + if(!matchSelector) { + throw new Error("Internal error: missing plucked selector on bundle manager."); + } + + eleventyConfig.htmlTransformer.addPosthtmlPlugin( + "html", + function (context = {}) { + let pageUrl = context?.url; + if(!pageUrl) { + throw new Error("Internal error: missing `url` property from context."); + } + + return function (tree, ...args) { + tree.match(matchHelper(matchSelector), function (node) { + try { + // ignore + if(hasAttribute(node, ATTRS.ignore)) { + delete node.attrs[ATTRS.ignore]; + return node; + } + + if(Array.isArray(node?.content) && node.content.length > 0) { + // TODO make this better decoupled + if(node?.content.find(entry => entry.includes(`/*__EleventyBundle:`))) { + // preserve {% getBundle %} calls as-is + return node; + } + + let bucketName = node?.attrs?.[ATTRS.bucket]; + bundleManager.addToPage(pageUrl, [ ...node.content ], bucketName); + + return { attrs: [], content: [], tag: false }; + } + } catch(e) { + debug(`Bundle plucker: error adding content to bundle in HTML Assets: %o`, e); + return node; + } + + return node; + }); + }; + }, + { + // pluginOptions + name: POSTHTML_PLUGIN_NAME, + }, + ); +} + +export { addHtmlPlucker }; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.bundleManagers.js b/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.bundleManagers.js new file mode 100644 index 00000000..8510abc3 --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.bundleManagers.js @@ -0,0 +1,85 @@ +import debugUtil from "debug"; +import { CodeManager } from "./CodeManager.js"; +import { addHtmlPlucker } from "./bundlePlucker.js" + +const debug = debugUtil("Eleventy:Bundle"); + +function eleventyBundleManagers(eleventyConfig, pluginOptions = {}) { + if(pluginOptions.force) { + // no errors + } else if(("getBundleManagers" in eleventyConfig || "addBundle" in eleventyConfig)) { + throw new Error("Duplicate addPlugin calls for @11ty/eleventy-plugin-bundle"); + } + + let managers = {}; + + function addBundle(name, bundleOptions = {}) { + if(name in managers) { + // note: shortcode must still be added + debug("Bundle exists %o, skipping.", name); + } else { + debug("Creating new bundle %o", name); + managers[name] = new CodeManager(name); + + if(bundleOptions.delayed !== undefined) { + managers[name].setDelayed(bundleOptions.delayed); + } + + if(bundleOptions.hoist !== undefined) { + managers[name].setHoisting(bundleOptions.hoist); + } + + if(bundleOptions.bundleHtmlContentFromSelector !== undefined) { + managers[name].setPluckedSelector(bundleOptions.bundleHtmlContentFromSelector); + managers[name].setDelayed(true); // must override `delayed` above + + addHtmlPlucker(eleventyConfig, managers[name]); + } + + if(bundleOptions.bundleExportKey !== undefined) { + managers[name].setBundleExportKey(bundleOptions.bundleExportKey); + } + + if(bundleOptions.outputFileExtension) { + managers[name].setFileExtension(bundleOptions.outputFileExtension); + } + + if(bundleOptions.toFileDirectory) { + managers[name].setBundleDirectory(bundleOptions.toFileDirectory); + } + + if(bundleOptions.transforms) { + managers[name].setTransforms(bundleOptions.transforms); + } + } + + // if undefined, defaults to `name` + if(bundleOptions.shortcodeName !== false) { + let shortcodeName = bundleOptions.shortcodeName || name; + + // e.g. `css` shortcode to add code to page bundle + // These shortcode names are not configurable on purpose (for wider plugin compatibility) + eleventyConfig.addPairedShortcode(shortcodeName, function addContent(content, bucket, explicitUrl) { + let url = explicitUrl || this.page?.url; + if(url) { // don’t add if a file doesn’t have an output URL + managers[name].addToPage(url, content, bucket); + } + return ""; + }); + } + }; + + eleventyConfig.addBundle = addBundle; + + eleventyConfig.getBundleManagers = function() { + return managers; + }; + + eleventyConfig.on("eleventy.before", async () => { + for(let key in managers) { + managers[key].reset(); + } + }); +}; + +export default eleventyBundleManagers; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.pruneEmptyBundles.js b/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.pruneEmptyBundles.js new file mode 100644 index 00000000..3bcaa72e --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.pruneEmptyBundles.js @@ -0,0 +1,105 @@ +import matchHelper from "posthtml-match-helper"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Bundle"); + +const ATTRS = { + keep: "eleventy:keep" +}; + +const POSTHTML_PLUGIN_NAME = "11ty/eleventy-bundle/prune-empty"; + +function getTextNodeContent(node) { + if (!node.content) { + return ""; + } + + return node.content + .map((entry) => { + if (typeof entry === "string") { + return entry; + } + if (Array.isArray(entry.content)) { + return getTextNodeContent(entry); + } + return ""; + }) + .join(""); +} + +function eleventyPruneEmptyBundles(eleventyConfig, options = {}) { + // Right now script[src],link[rel="stylesheet"] nodes are removed if the final bundles are empty. + // `false` to disable + options.pruneEmptySelector = options.pruneEmptySelector ?? `style,script,link[rel="stylesheet"]`; + + // Subsequent call can remove a previously added `addPosthtmlPlugin` entry + // htmlTransformer.remove is v3.0.1-alpha.4+ + if(typeof eleventyConfig.htmlTransformer.remove === "function") { + eleventyConfig.htmlTransformer.remove("html", entry => { + if(entry.name === POSTHTML_PLUGIN_NAME) { + return true; + } + + // Temporary workaround for missing `name` property. + let fnStr = entry.fn.toString(); + return !entry.name && fnStr.startsWith("function (pluginOptions = {}) {") && fnStr.includes(`tree.match(matchHelper(options.pruneEmptySelector), function (node)`); + }); + } + + // `false` disables this plugin + if(options.pruneEmptySelector === false) { + return; + } + + if(!eleventyConfig.htmlTransformer || !eleventyConfig.htmlTransformer?.constructor?.SUPPORTS_PLUGINS_ENABLED_CALLBACK) { + debug("You will need to upgrade your version of Eleventy core to remove empty bundle tags automatically (v3 or newer)."); + return; + } + + eleventyConfig.htmlTransformer.addPosthtmlPlugin( + "html", + function bundlePruneEmptyPosthtmlPlugin(pluginOptions = {}) { + return function (tree) { + tree.match(matchHelper(options.pruneEmptySelector), function (node) { + if(node.attrs && node.attrs[ATTRS.keep] !== undefined) { + delete node.attrs[ATTRS.keep]; + return node; + } + + // + if(node.tag === "link") { + if(node.attrs?.rel === "stylesheet" && (node.attrs?.href || "").trim().length === 0) { + return false; + } + } else { + let content = getTextNodeContent(node); + + if(!content) { + // or + if(node.tag === "script" && (node.attrs?.src || "").trim().length === 0) { + return false; + } + + // + if(node.tag === "style") { + return false; + } + } + } + + + return node; + }); + }; + }, + { + name: POSTHTML_PLUGIN_NAME, + // the `enabled` callback for plugins is available on v3.0.0-alpha.20+ and v3.0.0-beta.2+ + enabled: () => { + return Object.keys(eleventyConfig.getBundleManagers()).length > 0; + } + } + ); +} + +export default eleventyPruneEmptyBundles; diff --git a/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.shortcodes.js b/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.shortcodes.js new file mode 100644 index 00000000..924731a8 --- /dev/null +++ b/node_modules/@11ty/eleventy-plugin-bundle/src/eleventy.shortcodes.js @@ -0,0 +1,83 @@ +import { OutOfOrderRender } from "./OutOfOrderRender.js"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Bundle"); + +export default function(eleventyConfig, pluginOptions = {}) { + let managers = eleventyConfig.getBundleManagers(); + let writeToFileSystem = true; + + function bundleTransform(content, stage = 0) { + // Only run if content is string + // Only run if managers are in play + if(typeof content !== "string" || Object.keys(managers).length === 0) { + return content; + } + + debug("Processing %o", this.page.url); + let render = new OutOfOrderRender(content); + for(let key in managers) { + render.setAssetManager(key, managers[key]); + } + + render.setOutputDirectory(eleventyConfig.directories.output); + render.setWriteToFileSystem(writeToFileSystem); + + return render.replaceAll(this.page, stage); + } + + eleventyConfig.on("eleventy.before", async ({ outputMode }) => { + if(Object.keys(managers).length === 0) { + return; + } + + if(outputMode !== "fs") { + writeToFileSystem = false; + debug("Skipping writing to the file system due to output mode: %o", outputMode); + } + }); + + // e.g. `getBundle` shortcode to get code in current page bundle + // bucket can be an array + // This shortcode name is not configurable on purpose (for wider plugin compatibility) + eleventyConfig.addShortcode("getBundle", function getContent(type, bucket, explicitUrl) { + if(!type || !(type in managers) || Object.keys(managers).length === 0) { + throw new Error(`Invalid bundle type: ${type}. Available options: ${Object.keys(managers)}`); + } + + return OutOfOrderRender.getAssetKey("get", type, bucket); + }); + + // write a bundle to the file system + // This shortcode name is not configurable on purpose (for wider plugin compatibility) + eleventyConfig.addShortcode("getBundleFileUrl", function(type, bucket, explicitUrl) { + if(!type || !(type in managers) || Object.keys(managers).length === 0) { + throw new Error(`Invalid bundle type: ${type}. Available options: ${Object.keys(managers)}`); + } + + return OutOfOrderRender.getAssetKey("file", type, bucket); + }); + + eleventyConfig.addTransform("@11ty/eleventy-bundle", function (content) { + let hasNonDelayedManagers = Boolean(Object.values(eleventyConfig.getBundleManagers()).find(manager => { + return typeof manager.isDelayed !== "function" || !manager.isDelayed(); + })); + if(hasNonDelayedManagers) { + return bundleTransform.call(this, content, 0); + } + return content; + }); + + eleventyConfig.addPlugin((eleventyConfig) => { + // Delayed bundles *MUST* not alter URLs + eleventyConfig.addTransform("@11ty/eleventy-bundle/delayed", function (content) { + let hasDelayedManagers = Boolean(Object.values(eleventyConfig.getBundleManagers()).find(manager => { + return typeof manager.isDelayed === "function" && manager.isDelayed(); + })); + if(hasDelayedManagers) { + return bundleTransform.call(this, content, 1); + } + return content; + }); + }); +}; diff --git a/node_modules/@11ty/eleventy-utils/LICENSE b/node_modules/@11ty/eleventy-utils/LICENSE new file mode 100644 index 00000000..d52e149f --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022–2024 Zach Leatherman @zachleat + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@11ty/eleventy-utils/README.md b/node_modules/@11ty/eleventy-utils/README.md new file mode 100644 index 00000000..e7b2cc80 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/README.md @@ -0,0 +1,27 @@ +

eleventy Logo

+ +# eleventy-utils 🕚⚡️🎈🐀 + +Low level internal utilities to be shared amongst Eleventy projects. + +## ➡ [Documentation](https://www.11ty.dev/docs/) + +- Please star [Eleventy on GitHub](https://github.com/11ty/eleventy/)! +- Follow us on Twitter [@eleven_ty](https://twitter.com/eleven_ty) +- Support [11ty on Open Collective](https://opencollective.com/11ty) +- [11ty on npm](https://www.npmjs.com/org/11ty) +- [11ty on GitHub](https://github.com/11ty) + +## Installation + +``` +npm install @11ty/eleventy-utils +``` + +## Tests + +``` +npm run test +``` + +- We use the native NodeJS [test runner](https://nodejs.org/api/test.html#test-runner) and ([assertions](https://nodejs.org/api/assert.html#assert)) diff --git a/node_modules/@11ty/eleventy-utils/index.js b/node_modules/@11ty/eleventy-utils/index.js new file mode 100644 index 00000000..b3290823 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/index.js @@ -0,0 +1,20 @@ +const TemplatePath = require("./src/TemplatePath.js"); +const isPlainObject = require("./src/IsPlainObject.js"); +const Merge = require("./src/Merge.js"); +const DateCompare = require("./src/DateCompare.js"); +const { DeepCopy } = Merge; +const { createHash, createHashHex, createHashSync, createHashHexSync } = require("./src/CreateHash.js"); +const Buffer = require("./src/Buffer.js"); + +module.exports = { + TemplatePath, + isPlainObject, + Merge, + DeepCopy, + DateCompare, + createHash, + createHashHex, + createHashSync, + createHashHexSync, + Buffer, +}; \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-utils/package.json b/node_modules/@11ty/eleventy-utils/package.json new file mode 100644 index 00000000..8892430c --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/package.json @@ -0,0 +1,42 @@ +{ + "name": "@11ty/eleventy-utils", + "version": "2.0.7", + "description": "Low level internal utilities to be shared amongst Eleventy projects", + "main": "index.js", + "files": [ + "src", + "src/**", + "index.js", + "!test", + "!test/**" + ], + "scripts": { + "test": "node --test", + "watch": "node --test --watch" + }, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + }, + "keywords": [ + "eleventy" + ], + "publishConfig": { + "access": "public" + }, + "author": { + "name": "Zach Leatherman", + "email": "zachleatherman@gmail.com", + "url": "https://zachleat.com/" + }, + "repository": { + "type": "git", + "url": "git://github.com/11ty/eleventy-utils.git" + }, + "bugs": "https://github.com/11ty/eleventy-utils/issues", + "homepage": "https://github.com/11ty/eleventy-utils/" +} diff --git a/node_modules/@11ty/eleventy-utils/src/Buffer.js b/node_modules/@11ty/eleventy-utils/src/Buffer.js new file mode 100644 index 00000000..8fb0cd4c --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/Buffer.js @@ -0,0 +1,10 @@ +function isBuffer(inst) { + if(typeof Buffer !== "undefined") { + return Buffer.isBuffer(inst); + } + return inst instanceof Uint8Array; +} + +module.exports = { + isBuffer +} \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-utils/src/CreateHash.js b/node_modules/@11ty/eleventy-utils/src/CreateHash.js new file mode 100644 index 00000000..92adb0c2 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/CreateHash.js @@ -0,0 +1,27 @@ + +const { Hash } = require("./HashTypes.js"); + +// same output as node:crypto above (though now async). +async function createHash(...content) { + return Hash.create().toBase64Url(...content); +} + +async function createHashHex(...content) { + return Hash.create().toHex(...content); +} + +// Slower, but this feature does not require WebCrypto +function createHashSync(...content) { + return Hash.createSync().toBase64Url(...content); +} + +function createHashHexSync(...content) { + return Hash.createSync().toHex(...content); +} + +module.exports = { + createHash, + createHashSync, + createHashHex, + createHashHexSync, +}; \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-utils/src/DateCompare.js b/node_modules/@11ty/eleventy-utils/src/DateCompare.js new file mode 100644 index 00000000..a160ace2 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/DateCompare.js @@ -0,0 +1,41 @@ +class DateCompare { + static isTimestampWithinDuration(timestamp, duration, compareDate = Date.now()) { + // the default duration is Infinity (also "*") + if (!duration || duration === "*" || duration === Infinity) { + return true; + } + + let expiration = timestamp + this.getDurationMs(duration); + + // still valid + if (expiration > compareDate) { + return true; + } + + // expired + return false; + } + + static getDurationMs(duration = "0s") { + let durationUnits = duration.slice(-1); + let durationMultiplier; + if (durationUnits === "s") { + durationMultiplier = 1; + } else if (durationUnits === "m") { + durationMultiplier = 60; + } else if (durationUnits === "h") { + durationMultiplier = 60 * 60; + } else if (durationUnits === "d") { + durationMultiplier = 60 * 60 * 24; + } else if (durationUnits === "w") { + durationMultiplier = 60 * 60 * 24 * 7; + } else if (durationUnits === "y") { + durationMultiplier = 60 * 60 * 24 * 365; + } + + let durationValue = parseInt(duration.slice(0, duration.length - 1), 10); + return durationValue * durationMultiplier * 1000; + } +} + +module.exports = DateCompare; \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-utils/src/HashTypes.js b/node_modules/@11ty/eleventy-utils/src/HashTypes.js new file mode 100644 index 00000000..4f7454c5 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/HashTypes.js @@ -0,0 +1,158 @@ +const { base64UrlSafe } = require("./Url.js"); +const { isBuffer } = require("./Buffer.js"); +const sha256 = require("./lib-sha256.js"); + +function hasNodeCryptoModule() { + try { + require("node:crypto"); + return true; + } catch(e) { + return false; + } +} + +const HAS_NODE_CRYPTO = hasNodeCryptoModule(); + +class Hash { + static create() { + if(typeof globalThis.crypto === "undefined") { + // Backwards compat with Node Crypto, since WebCrypto (crypto global) is Node 20+ + if(HAS_NODE_CRYPTO) { + return NodeCryptoHash; + } + return ScriptHash; + } + return WebCryptoHash; + } + + // Does not use WebCrypto (as WebCrypto is async-only) + static createSync() { + if(HAS_NODE_CRYPTO) { + return NodeCryptoHash; + } + return ScriptHash; + } + + static toBase64(bytes) { + let str = Array.from(bytes, (b) => String.fromCodePoint(b)).join(""); + + // `btoa` Node 16+ + return btoa(str); + } + + // Thanks https://evanhahn.com/the-best-way-to-concatenate-uint8arrays/ (Public domain) + static mergeUint8Array(...arrays) { + let totalLength = arrays.reduce( + (total, uint8array) => total + uint8array.byteLength, + 0 + ); + + let result = new Uint8Array(totalLength); + let offset = 0; + arrays.forEach((uint8array) => { + result.set(uint8array, offset); + offset += uint8array.byteLength; + }); + + return result; + } + + static bufferToBase64Url(hashBuffer) { + return base64UrlSafe(this.toBase64(new Uint8Array(hashBuffer))); + } + + static bufferToHex(hashBuffer) { + return Array.from(new Uint8Array(hashBuffer)) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + } +} + +class WebCryptoHash extends Hash { + static async toHash(...content) { + let encoder = new TextEncoder(); + let input = this.mergeUint8Array(...content.map(c => { + if(isBuffer(c)) { + return c; + } + return encoder.encode(c); + })); + + // `crypto` is Node 20+ + return crypto.subtle.digest("SHA-256", input); + } + + static async toBase64Url(...content) { + return this.toHash(...content).then(hashBuffer => { + return this.bufferToBase64Url(hashBuffer); + }); + } + + static async toHex(...content) { + return this.toHash(...content).then(hashBuffer => { + return this.bufferToHex(hashBuffer); + }); + } + + static toBase64UrlSync() { + throw new Error("Synchronous methods are not available in the Web Crypto API."); + } + + static toHexSync() { + throw new Error("Synchronous methods are not available in the Web Crypto API."); + } +} + +class NodeCryptoHash extends Hash { + static toHash(...content) { + // This *needs* to be a dynamic require for proper bundling. + const { createHash } = require("node:crypto"); + let hash = createHash("sha256"); + + for(let c of content) { + hash.update(c); + } + + return hash; + } + + static toBase64Url(...content) { + // Note that Node does include a `digest("base64url")` that is supposedly Node 14+ but curiously failed on Stackblitz’s Node 16. + let base64 = this.toHash(...content).digest("base64"); + return base64UrlSafe(base64); + } + + static toHex(...content) { + return this.toHash(...content).digest("hex"); + } + + // aliases + static toBase64UrlSync = this.toBase64Url; + static toHexSync = this.toHex; +} + +class ScriptHash extends Hash { + static toHash(...content) { + let hash = sha256(); + for(let c of content) { + hash.add(c); + } + return hash.digest(); + } + + static toBase64Url(...content) { + let hashBuffer = this.toHash(...content); + return this.bufferToBase64Url(hashBuffer); + } + + static toHex(...content) { + let hashBuffer = this.toHash(...content); + return this.bufferToHex(hashBuffer); + } + + // aliases + static toBase64UrlSync = this.toBase64Url; + static toHexSync = this.toHex; +} + +module.exports = { Hash, NodeCryptoHash, ScriptHash, WebCryptoHash } \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-utils/src/IsPlainObject.js b/node_modules/@11ty/eleventy-utils/src/IsPlainObject.js new file mode 100644 index 00000000..1d4c7527 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/IsPlainObject.js @@ -0,0 +1,24 @@ +/* Prior art: this utility was created for https://github.com/11ty/eleventy/issues/2214 + + * Inspired by implementations from `is-what`, `typechecker`, `jQuery`, and `lodash` + + * `is-what` + * More reading at https://www.npmjs.com/package/is-what#user-content-isplainobject-vs-isanyobject + * if (Object.prototype.toString.call(value).slice(8, -1) !== 'Object') return false; + * return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype; + + * `typechecker` + * return value !== null && typeof value === 'object' && value.__proto__ === Object.prototype; + + * Notably jQuery and lodash have very similar implementations. + + * For later, remember the `value === Object(value)` trick + */ + +module.exports = function (value) { + if (value === null || typeof value !== "object") { + return false; + } + let proto = Object.getPrototypeOf(value); + return !proto || proto === Object.prototype; +}; diff --git a/node_modules/@11ty/eleventy-utils/src/Merge.js b/node_modules/@11ty/eleventy-utils/src/Merge.js new file mode 100644 index 00000000..c3cfbaf5 --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/Merge.js @@ -0,0 +1,84 @@ +"use strict"; +// above is required for Object.freeze to fail correctly. + +const isPlainObject = require("./IsPlainObject.js"); + +const OVERRIDE_PREFIX = "override:"; + +function cleanKey(key, prefix) { + if (prefix && key.startsWith(prefix)) { + return key.slice(prefix.length); + } + return key; +} + +function getMergedItem(target, source, prefixes = {}) { + let { override } = prefixes; + + // Shortcut for frozen source (if target does not exist) + if (!target && isPlainObject(source) && Object.isFrozen(source)) { + return source; + } + + let sourcePlainObjectShortcut; + if (!target && isPlainObject(source)) { + // deep copy objects to avoid sharing and to effect key renaming + target = {}; + sourcePlainObjectShortcut = true; + } + + if (Array.isArray(target) && Array.isArray(source)) { + return target.concat(source); + } else if (isPlainObject(target)) { + if (sourcePlainObjectShortcut || isPlainObject(source)) { + for (let key in source) { + let overrideKey = cleanKey(key, override); + + // An error happens here if the target is frozen + target[overrideKey] = getMergedItem(target[key], source[key], prefixes); + } + } + return target; + } + // number, string, class instance, etc + return source; +} + +// The same as Merge but without override prefixes +function DeepCopy(targetObject, ...sources) { + for (let source of sources) { + if (!source) { + continue; + } + + targetObject = getMergedItem(targetObject, source); + } + return targetObject; +} + +function Merge(target, ...sources) { + // Remove override prefixes from root target. + if (isPlainObject(target)) { + for (let key in target) { + if (key.indexOf(OVERRIDE_PREFIX) === 0) { + target[key.slice(OVERRIDE_PREFIX.length)] = target[key]; + delete target[key]; + } + } + } + + for (let source of sources) { + if (!source) { + continue; + } + + target = getMergedItem(target, source, { + override: OVERRIDE_PREFIX, + }); + } + + return target; +} + +module.exports = Merge; +module.exports.DeepCopy = DeepCopy; diff --git a/node_modules/@11ty/eleventy-utils/src/TemplatePath.js b/node_modules/@11ty/eleventy-utils/src/TemplatePath.js new file mode 100644 index 00000000..807af54c --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/TemplatePath.js @@ -0,0 +1,373 @@ +const path = require("path"); +const fs = require("fs"); + +function TemplatePath() {} + +/** + * @returns {String} the absolute path to Eleventy’s project directory. + */ +TemplatePath.getWorkingDir = function () { + return TemplatePath.normalize(path.resolve(".")); +}; + +/** + * Returns the directory portion of a path. + * Works for directory and file paths and paths ending in a glob pattern. + * + * @param {String} path - A path + * @returns {String} the directory portion of a path. + */ +TemplatePath.getDir = function (path) { + if (TemplatePath.isDirectorySync(path)) { + return path; + } + + return TemplatePath.getDirFromFilePath(path); +}; + +/** + * Returns the directory portion of a path that either points to a file + * or ends in a glob pattern. If `path` points to a directory, + * the returned value will have its last path segment stripped + * due to how [`path.parse`][1] works. + * + * [1]: https://nodejs.org/api/path.html#path_path_parse_path + * + * @returns {String} the directory portion of a path. + * @param {String} filePath - A path + */ +TemplatePath.getDirFromFilePath = function (filePath) { + return path.parse(filePath).dir || "."; +}; + +/** + * Returns the last path segment in a path (no leading/trailing slashes). + * + * Assumes [`path.parse`][1] was called on `path` before. + * + * [1]: https://nodejs.org/api/path.html#path_path_parse_path + * + * @param {String} path - A path + * @returns {String} the last path segment in a path + */ +TemplatePath.getLastPathSegment = function (path) { + if (!path.includes("/")) { + return path; + } + + // Trim a trailing slash if there is one + path = path.replace(/\/$/, ""); + + return path.slice(path.lastIndexOf("/") + 1); +}; + +/** + * @param {String} path - A path + * @returns {String[]} an array of paths pointing to each path segment of the + * provided `path`. + */ +TemplatePath.getAllDirs = function (path) { + // Trim a trailing slash if there is one + path = path.replace(/\/$/, ""); + + if (!path.includes("/")) { + return [path]; + } + + return path + .split("/") + .map((segment, index, array) => array.slice(0, index + 1).join("/")) + .filter((path) => path !== ".") + .reverse(); +}; + +/** + * Normalizes a path, resolving single-dot and double-dot segments. + * + * Node.js’ [`path.normalize`][1] is called to strip a possible leading `"./"` segment. + * + * [1]: https://nodejs.org/api/path.html#path_path_normalize_path + * + * @param {String} thePath - The path that should be normalized. + * @returns {String} the normalized path. + */ +TemplatePath.normalize = function (thePath) { + let filePath = path.normalize(thePath).split(path.sep).join("/"); + if(filePath !== "/" && filePath.endsWith("/")) { + return filePath.slice(0, -1); + } + return filePath; +}; + +/** + * Joins all given path segments together. + * + * It uses Node.js’ [`path.join`][1] method. + * + * [1]: https://nodejs.org/api/path.html#path_path_join_paths + * + * @param {...String} paths - An arbitrary amount of path segments. + * @returns {String} the normalized and joined path. + */ +TemplatePath.join = function (...paths) { + return TemplatePath.normalize(path.join(...paths)); +}; + +/** + * Joins the given URL path segments and normalizes the resulting path. + * Maintains a single trailing slash if the last URL path argument + * had at least one. + * + * @param {...String} urlPaths + * @returns {String} a normalized URL path described by the given URL path segments. + */ +TemplatePath.normalizeUrlPath = function (...urlPaths) { + const urlPath = path.posix.join(...urlPaths); + return urlPath.replace(/\/+$/, "/"); +}; + +/** + * Joins the given path segments. Since the first path is absolute, + * the resulting path will be absolute as well. + * + * @param {...String} paths + * @returns {String} the absolute path described by the given path segments. + */ +TemplatePath.absolutePath = function (...paths) { + let i = 0; + // check all the paths before we short circuit from the first index + for (let p of paths) { + if (path.isAbsolute(p) && i > 0) { + throw new Error( + `Only the first parameter to Template.absolutePath can be an absolute path. Received: ${p} from ${paths}` + ); + } + i++; + } + + let j = 0; + for (let p of paths) { + if (j === 0 && path.isAbsolute(p)) { + return TemplatePath.join(...paths); + } + j++; + } + + return TemplatePath.join(TemplatePath.getWorkingDir(), ...paths); +}; + +/** + * Turns an absolute path into a path relative to the project directory. + * + * @param {String} absolutePath + * @returns {String} the relative path. + */ +TemplatePath.relativePath = function (absolutePath) { + return TemplatePath.stripLeadingSubPath( + absolutePath, + TemplatePath.getWorkingDir() + ); +}; + +/** + * Adds a leading dot-slash segment to each path in the `paths` array. + * + * @param {String[]} paths + * @returns {String[]} + */ +TemplatePath.addLeadingDotSlashArray = function (paths) { + return paths.map((path) => TemplatePath.addLeadingDotSlash(path)); +}; + +/** + * Adds a leading dot-slash segment to `path`. + * + * @param {String} pathArg + * @returns {String} + */ +TemplatePath.addLeadingDotSlash = function (pathArg) { + if (pathArg === "." || pathArg === "..") { + return pathArg + "/"; + } + + if ( + path.isAbsolute(pathArg) || + pathArg.startsWith("./") || + pathArg.startsWith("../") + ) { + return pathArg; + } + + return "./" + pathArg; +}; + +/** + * Removes a leading dot-slash segment. + * + * @param {String} path + * @returns {String} the `path` without a leading dot-slash segment. + */ +TemplatePath.stripLeadingDotSlash = function (path) { + return typeof path === "string" ? path.replace(/^\.\//, "") : path; +}; + +/** + * Determines whether a path starts with a given sub path. + * + * @param {String} path - A path + * @param {String} subPath - A path + * @returns {Boolean} whether `path` starts with `subPath`. + */ +TemplatePath.startsWithSubPath = function (path, subPath) { + path = TemplatePath.normalize(path); + subPath = TemplatePath.normalize(subPath); + + return path.startsWith(subPath); +}; + +/** + * Removes the `subPath` at the start of `path` if present + * and returns the remainding path. + * + * @param {String} path - A path + * @param {String} subPath - A path + * @returns {String} the `path` without `subPath` at the start of it. + */ +TemplatePath.stripLeadingSubPath = function (path, subPath) { + path = TemplatePath.normalize(path); + subPath = TemplatePath.normalize(subPath); + + if (subPath !== "." && path.startsWith(subPath)) { + return path.slice(subPath.length + 1); + } + + return path; +}; + +/** + * @param {String} path - A path + * @returns {Boolean} whether `path` points to an existing directory. + */ +TemplatePath.isDirectorySync = function (path) { + return fs.existsSync(path) && fs.statSync(path).isDirectory(); +}; + +/** + * @param {String} path - A path + * @returns {Boolean} whether `path` points to an existing directory. + */ +TemplatePath.isDirectory = async function (path) { + return new Promise((resolve) => { + fs.stat(path, (err, stats) => { + if (stats) { + resolve(stats.isDirectory()); + } + resolve(false); + }); + }); +}; + +/** + * Appends a recursive wildcard glob pattern to `path` + * unless `path` is not a directory; then, `path` is assumed to be a file path + * and is left unchaged. + * + * @param {String} path + * @returns {String} + */ +TemplatePath.convertToRecursiveGlobSync = function (path) { + if (path === "") { + return "./**"; + } + + path = TemplatePath.addLeadingDotSlash(path); + + if (TemplatePath.isDirectorySync(path)) { + return path + (!path.endsWith("/") ? "/" : "") + "**"; + } + + return path; +}; + +/** + * Appends a recursive wildcard glob pattern to `path` + * unless `path` is not a directory; then, `path` is assumed to be a file path + * and is left unchaged. + * + * @param {String} path + * @returns {String} + */ +TemplatePath.convertToRecursiveGlob = async function (path) { + if (path === "") { + return "./**"; + } + + path = TemplatePath.addLeadingDotSlash(path); + + if (await TemplatePath.isDirectory(path)) { + return path + (!path.endsWith("/") ? "/" : "") + "**"; + } + + return path; +}; + +/** + * Returns the extension of the path without the leading dot. + * If the path has no extensions, the empty string is returned. + * + * @param {String} thePath + * @returns {String} the path’s extension if it exists; + * otherwise, the empty string. + */ +TemplatePath.getExtension = function (thePath) { + return path.extname(thePath).replace(/^\./, ""); +}; + +/** + * Removes the extension from a path. + * + * @param {String} path + * @param {String} [extension] + * @returns {String} + */ +TemplatePath.removeExtension = function (path, extension = undefined) { + if (extension === undefined) { + return path; + } + + const pathExtension = TemplatePath.getExtension(path); + if (pathExtension !== "" && extension.endsWith(pathExtension)) { + return path.substring(0, path.lastIndexOf(pathExtension) - 1); + } + + return path; +}; + +/** + * Accepts a relative file path that is using a standard directory separator and + * normalizes it using the local operating system separator. + * e.g. `./my/dir/` stays `./my/dir/` on *nix and becomes `.\\my\\dir\\` on Windows + * + * @param {String} filePath + * @param {String} [sep="/"] + * @returns {String} a file path with the correct local directory separator. + */ +TemplatePath.normalizeOperatingSystemFilePath = function (filePath, sep = "/") { + return filePath.split(sep).join(path.sep); +}; + +/** + * Accepts a relative file path with the local operating system directory separator and + * normalizes it using a forward slash directory separator. (Leaves trailing slash as-is) + * e.g. `./my/dir/` stays `./my/dir/` on *nix + * e.g. `.\\my\\dir\\` becomes `./my/dir/` on *nix and Windows + * + * @param {String} filePath + * @param {String} [sep="/"] + * @returns {String} a file path with the correct local directory separator. + */ +TemplatePath.standardizeFilePath = function (filePath, sep = "/") { + return TemplatePath.addLeadingDotSlash(filePath.split(path.sep).join(sep)); +}; + +module.exports = TemplatePath; diff --git a/node_modules/@11ty/eleventy-utils/src/Url.js b/node_modules/@11ty/eleventy-utils/src/Url.js new file mode 100644 index 00000000..7f314efb --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/Url.js @@ -0,0 +1,13 @@ +function base64UrlSafe(hashString = "") { + return hashString.replace(/[=\+\/]/g, function(match) { + if(match === "=") { + return ""; + } + if(match === "+") { + return "-"; + } + return "_"; + }); +} + +module.exports = { base64UrlSafe }; \ No newline at end of file diff --git a/node_modules/@11ty/eleventy-utils/src/lib-sha256.js b/node_modules/@11ty/eleventy-utils/src/lib-sha256.js new file mode 100644 index 00000000..7ebd37ea --- /dev/null +++ b/node_modules/@11ty/eleventy-utils/src/lib-sha256.js @@ -0,0 +1,113 @@ +// https://github.com/6502/sha256 + +/* +Copyright 2022 Andrea Griffini + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +// sha256(data) returns the digest +// sha256() returns an object you can call .add(data) zero or more time and .digest() at the end +// digest is a 32-byte Uint8Array instance with an added .hex() function. +// Input should be either a string (that will be encoded as UTF-8) or an array-like object with values 0..255. +module.exports = function sha256(data) { + let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, + h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19, + tsz = 0, bp = 0; + const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2], + rrot = (x, n) => (x >>> n) | (x << (32-n)), + w = new Uint32Array(64), + buf = new Uint8Array(64), + process = () => { + for (let j=0,r=0; j<16; j++,r+=4) { + w[j] = (buf[r]<<24) | (buf[r+1]<<16) | (buf[r+2]<<8) | buf[r+3]; + } + for (let j=16; j<64; j++) { + let s0 = rrot(w[j-15], 7) ^ rrot(w[j-15], 18) ^ (w[j-15] >>> 3); + let s1 = rrot(w[j-2], 17) ^ rrot(w[j-2], 19) ^ (w[j-2] >>> 10); + w[j] = (w[j-16] + s0 + w[j-7] + s1) | 0; + } + let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7; + for (let j=0; j<64; j++) { + let S1 = rrot(e, 6) ^ rrot(e, 11) ^ rrot(e, 25), + ch = (e & f) ^ ((~e) & g), + t1 = (h + S1 + ch + k[j] + w[j]) | 0, + S0 = rrot(a, 2) ^ rrot(a, 13) ^ rrot(a, 22), + maj = (a & b) ^ (a & c) ^ (b & c), + t2 = (S0 + maj) | 0; + h = g; g = f; f = e; e = (d + t1)|0; d = c; c = b; b = a; a = (t1 + t2)|0; + } + h0 = (h0 + a)|0; h1 = (h1 + b)|0; h2 = (h2 + c)|0; h3 = (h3 + d)|0; + h4 = (h4 + e)|0; h5 = (h5 + f)|0; h6 = (h6 + g)|0; h7 = (h7 + h)|0; + bp = 0; + }, + add = data => { + if (typeof data === "string") { + data = typeof TextEncoder === "undefined" ? Buffer.from(data) : (new TextEncoder).encode(data); + } + for (let i=0; i { + buf[bp++] = 0x80; if (bp == 64) process(); + if (bp + 8 > 64) { + while (bp < 64) buf[bp++] = 0x00; + process(); + } + while (bp < 58) buf[bp++] = 0x00; + // Max number of bytes is 35,184,372,088,831 + let L = tsz * 8; + buf[bp++] = (L / 1099511627776.) & 255; + buf[bp++] = (L / 4294967296.) & 255; + buf[bp++] = L >>> 24; + buf[bp++] = (L >>> 16) & 255; + buf[bp++] = (L >>> 8) & 255; + buf[bp++] = L & 255; + process(); + let reply = new Uint8Array(32); + reply[ 0] = h0 >>> 24; reply[ 1] = (h0 >>> 16) & 255; reply[ 2] = (h0 >>> 8) & 255; reply[ 3] = h0 & 255; + reply[ 4] = h1 >>> 24; reply[ 5] = (h1 >>> 16) & 255; reply[ 6] = (h1 >>> 8) & 255; reply[ 7] = h1 & 255; + reply[ 8] = h2 >>> 24; reply[ 9] = (h2 >>> 16) & 255; reply[10] = (h2 >>> 8) & 255; reply[11] = h2 & 255; + reply[12] = h3 >>> 24; reply[13] = (h3 >>> 16) & 255; reply[14] = (h3 >>> 8) & 255; reply[15] = h3 & 255; + reply[16] = h4 >>> 24; reply[17] = (h4 >>> 16) & 255; reply[18] = (h4 >>> 8) & 255; reply[19] = h4 & 255; + reply[20] = h5 >>> 24; reply[21] = (h5 >>> 16) & 255; reply[22] = (h5 >>> 8) & 255; reply[23] = h5 & 255; + reply[24] = h6 >>> 24; reply[25] = (h6 >>> 16) & 255; reply[26] = (h6 >>> 8) & 255; reply[27] = h6 & 255; + reply[28] = h7 >>> 24; reply[29] = (h7 >>> 16) & 255; reply[30] = (h7 >>> 8) & 255; reply[31] = h7 & 255; + reply.hex = () => { + let res = ""; + reply.forEach(x => res += ("0" + x.toString(16)).slice(-2)); + return res; + }; + return reply; + }; + if (data === undefined) return {add, digest}; + add(data); + return digest(); +} \ No newline at end of file diff --git a/node_modules/@11ty/eleventy/CODE_OF_CONDUCT.md b/node_modules/@11ty/eleventy/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..318db578 --- /dev/null +++ b/node_modules/@11ty/eleventy/CODE_OF_CONDUCT.md @@ -0,0 +1,48 @@ +# Eleventy Community Code of Conduct + +View the [Code of Conduct](https://www.11ty.dev/docs/code-of-conduct/) on 11ty.dev + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, chat messages, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at eleventy@zachleat.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/node_modules/@11ty/eleventy/LICENSE b/node_modules/@11ty/eleventy/LICENSE new file mode 100644 index 00000000..5027c0db --- /dev/null +++ b/node_modules/@11ty/eleventy/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017–2024 Zach Leatherman @zachleat + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@11ty/eleventy/README.md b/node_modules/@11ty/eleventy/README.md new file mode 100644 index 00000000..4b464b87 --- /dev/null +++ b/node_modules/@11ty/eleventy/README.md @@ -0,0 +1,47 @@ +

eleventy Logo

+ +# eleventy 🕚⚡️🎈🐀 + +A simpler static site generator. An alternative to Jekyll. Written in JavaScript. Transforms a directory of templates (of varying types) into HTML. + +Works with HTML, Markdown, JavaScript, Liquid, Nunjucks, with addons for WebC, Sass, Vue, Svelte, TypeScript, JSX, and many others! + +## ➡ [Documentation](https://www.11ty.dev/docs/) + +- Please star [this repo on GitHub](https://github.com/11ty/eleventy/)! +- Follow us on Mastodon [@eleventy@fosstodon.org](https://fosstodon.org/@eleventy) or Twitter [@eleven_ty](https://twitter.com/eleven_ty) +- Join us on [Discord](https://www.11ty.dev/blog/discord/) +- Support [11ty on Open Collective](https://opencollective.com/11ty) +- [11ty on npm](https://www.npmjs.com/org/11ty) +- [11ty on GitHub](https://github.com/11ty) + +[![npm Version](https://img.shields.io/npm/v/@11ty/eleventy.svg?style=for-the-badge)](https://www.npmjs.com/package/@11ty/eleventy) [![GitHub issues](https://img.shields.io/github/issues/11ty/eleventy.svg?style=for-the-badge)](https://github.com/11ty/eleventy/issues) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=for-the-badge)](https://github.com/prettier/prettier) [![npm Downloads](https://img.shields.io/npm/dt/@11ty/eleventy.svg?style=for-the-badge)](https://www.npmjs.com/package/@11ty/eleventy) + +## Installation + +``` +npm install @11ty/eleventy --save-dev +``` + +Read our [Getting Started guide](https://www.11ty.dev/docs/getting-started/). + +## Tests + +``` +npm run test +``` + +- We use the [ava JavaScript test runner](https://github.com/avajs/ava) ([Assertions documentation](https://github.com/avajs/ava/blob/master/docs/03-assertions.md)) +- ℹ️ To keep tests fast, thou shalt try to avoid writing files in tests. +- [Continuous Integration on GitHub Actions](https://github.com/11ty/eleventy/actions/workflows/ci.yml) +- [Code Coverage Statistics](https://github.com/11ty/eleventy/blob/master/docs/coverage.md) +- [Benchmark for Performance Regressions](https://github.com/11ty/eleventy-benchmark) + +## Community Roadmap + +- [Top Feature Requests](https://github.com/11ty/eleventy/issues?q=label%3Aneeds-votes+sort%3Areactions-%2B1-desc+label%3Aenhancement) (Add your own votes using the 👍 reaction) +- [Top Bugs 😱](https://github.com/11ty/eleventy/issues?q=is%3Aissue+is%3Aopen+label%3Abug+sort%3Areactions) (Add your own votes using the 👍 reaction) + +## Plugins + +See the [official docs on plugins](https://www.11ty.dev/docs/plugins/). diff --git a/node_modules/@11ty/eleventy/SECURITY.md b/node_modules/@11ty/eleventy/SECURITY.md new file mode 100644 index 00000000..0947081a --- /dev/null +++ b/node_modules/@11ty/eleventy/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +## Reporting a Vulnerability + +Privately report a security issue by navigating to https://github.com/11ty/eleventy/security and using the “Report a vulnerability” button. + +Read more at: https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability + +Alternatively, you may report security issues via an email to `security@11ty.dev`. diff --git a/node_modules/@11ty/eleventy/cmd.cjs b/node_modules/@11ty/eleventy/cmd.cjs new file mode 100644 index 00000000..c4a4d5f1 --- /dev/null +++ b/node_modules/@11ty/eleventy/cmd.cjs @@ -0,0 +1,155 @@ +#!/usr/bin/env node + +// This file intentionally uses older code conventions to be as friendly +// as possible with error messaging to folks on older runtimes. + +const pkg = require("./package.json"); +require("please-upgrade-node")(pkg, { + message: function (requiredVersion) { + return ( + "Eleventy " + + pkg.version + + " requires Node " + + requiredVersion + + ". You will need to upgrade Node to use Eleventy!" + ); + }, +}); + +const minimist = require("minimist"); +const debug = require("debug")("Eleventy:cmd"); + +class SimpleError extends Error { + constructor(...args) { + super(...args); + this.skipOriginalStack = true; + } +} + +async function exec() { + // Notes about friendly error messaging with outdated Node versions: https://github.com/11ty/eleventy/issues/3761 + const { EleventyErrorHandler } = await import("./src/Errors/EleventyErrorHandler.js"); + + try { + const argv = minimist(process.argv.slice(2), { + string: ["input", "output", "formats", "config", "pathprefix", "port", "to", "incremental", "loader"], + boolean: [ + "quiet", + "version", + "watch", + "dryrun", + "help", + "serve", + "ignore-initial", + ], + default: { + quiet: null, + "ignore-initial": false, + "to": "fs", + }, + unknown: function (unknownArgument) { + throw new Error( + `We don’t know what '${unknownArgument}' is. Use --help to see the list of supported commands.`, + ); + }, + }); + + debug("command: eleventy %o", argv); + const { Eleventy } = await import("./src/Eleventy.js"); + + let ErrorHandler = new EleventyErrorHandler(); + + process.on("unhandledRejection", (error, promise) => { + ErrorHandler.fatal(error, "Unhandled rejection in promise"); + }); + process.on("uncaughtException", (error) => { + ErrorHandler.fatal(error, "Uncaught exception"); + }); + process.on("rejectionHandled", (promise) => { + ErrorHandler.warn(promise, "A promise rejection was handled asynchronously"); + }); + + if (argv.version) { + console.log(Eleventy.getVersion()); + return; + } else if (argv.help) { + console.log(Eleventy.getHelp()); + return; + } + + let elev = new Eleventy(argv.input, argv.output, { + source: "cli", + // --quiet and --quiet=true both resolve to true + quietMode: argv.quiet, + configPath: argv.config, + pathPrefix: argv.pathprefix, + runMode: argv.serve ? "serve" : argv.watch ? "watch" : "build", + dryRun: argv.dryrun, + loader: argv.loader, + }); + + // reuse ErrorHandler instance in Eleventy + ErrorHandler = elev.errorHandler; + + // Before init + elev.setFormats(argv.formats); + + await elev.init(); + + if (argv.to === "json" || argv.to === "ndjson") { + // override logging output + elev.setIsVerbose(false); + } + + // Only relevant for watch/serve + elev.setIgnoreInitial(argv["ignore-initial"]); + + if(argv.incremental) { + elev.setIncrementalFile(argv.incremental); + } else if(argv.incremental !== undefined) { + elev.setIncrementalBuild(argv.incremental === "" || argv.incremental); + } + + if (argv.serve || argv.watch) { + if(argv.to === "json" || argv.to === "ndjson") { + throw new SimpleError("--to=json and --to=ndjson are not compatible with --serve or --watch."); + } + + await elev.watch(); + + if (argv.serve) { + // TODO await here? + elev.serve(argv.port); + } + + process.on("SIGINT", async () => { + await elev.stopWatch(); + process.exitCode = 0; + }); + } else { + if (!argv.to || argv.to === "fs") { + await elev.write(); + } else if (argv.to === "json") { + let result = await elev.toJSON() + console.log(JSON.stringify(result, null, 2)); + } else if (argv.to === "ndjson") { + let stream = await elev.toNDJSON(); + stream.pipe(process.stdout); + } else { + throw new SimpleError( + `Invalid --to value: ${argv.to}. Supported values: \`fs\` (default), \`json\`, and \`ndjson\`.`, + ); + } + } + } catch (error) { + if(typeof EleventyErrorHandler !== "undefined") { + let ErrorHandler = new EleventyErrorHandler(); + ErrorHandler.fatal(error, "Eleventy Fatal Error (CLI)"); + } else { + console.error(error); + process.exitCode = 1; + } + } +} + +exec(); diff --git a/node_modules/@11ty/eleventy/package.json b/node_modules/@11ty/eleventy/package.json new file mode 100644 index 00000000..4c06b5c4 --- /dev/null +++ b/node_modules/@11ty/eleventy/package.json @@ -0,0 +1,166 @@ +{ + "name": "@11ty/eleventy", + "version": "3.1.6", + "description": "A simpler static site generator.", + "publishConfig": { + "access": "public", + "provenance": true + }, + "type": "module", + "main": "./src/Eleventy.js", + "exports": { + ".": { + "import": "./src/Eleventy.js", + "require": "./src/EleventyCommonJs.cjs" + }, + "./UserConfig": { + "types": "./src/UserConfig.js" + } + }, + "bin": { + "eleventy": "cmd.cjs" + }, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + }, + "keywords": [ + "static-site-generator", + "static-site", + "ssg", + "documentation", + "website", + "jekyll", + "blog", + "templates", + "generator", + "framework", + "eleventy", + "11ty", + "html", + "markdown", + "liquid", + "nunjucks" + ], + "scripts": { + "default": "npm run test", + "test": "npm run test:node && npm run test:ava", + "test:ava": "ava --verbose --timeout 20s", + "test:node": "node --test test_node/tests.js", + "format": "prettier . --write", + "check": "eslint src", + "check-types": "tsc", + "nano-staged": "nano-staged", + "coverage": "npx c8 ava && npx c8 report --reporter=json-summary && cp coverage/coverage-summary.json docs/_data/coverage.json && node cmd.cjs --config=docs/eleventy.coverage.js", + "prepare": "simple-git-hooks" + }, + "author": "Zach Leatherman (https://zachleat.com/)", + "repository": { + "type": "git", + "url": "git://github.com/11ty/eleventy.git" + }, + "bugs": "https://github.com/11ty/eleventy/issues", + "homepage": "https://www.11ty.dev/", + "ava": { + "environmentVariables": {}, + "failFast": true, + "files": [ + "./test/*.js", + "./test/_issues/**/*test.js" + ], + "watchMode": { + "ignoreChanges": [ + "./test/stubs*/**/*", + "./test/**/_site/**/*", + ".cache" + ] + } + }, + "nano-staged": { + "*.{js,css,md}": [ + "prettier --write" + ] + }, + "simple-git-hooks": { + "pre-commit": "npm test && npm run nano-staged", + "pre-push": "npm test" + }, + "devDependencies": { + "@11ty/eleventy-img": "^6.0.4", + "@11ty/eleventy-plugin-rss": "^2.0.4", + "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", + "@11ty/eleventy-plugin-webc": "^0.12.0-beta.7", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^10.0.1", + "@iarna/toml": "^2.2.5", + "@mdx-js/node-loader": "^3.1.1", + "@types/node": "^25.5.0", + "@vue/server-renderer": "^3.5.30", + "@zachleat/noop": "^1.0.7", + "ava": "^6.4.1", + "c8": "^11.0.0", + "eslint": "^10.0.3", + "eslint-config-prettier": "^10.1.8", + "globals": "^17.4.0", + "jsx-async-runtime": "^2.0.3", + "markdown-it-abbr": "^2.0.0", + "markdown-it-emoji": "^3.0.0", + "marked": "^17.0.4", + "nano-staged": "^0.9.0", + "prettier": "^3.8.1", + "pretty": "^2.0.0", + "react": "^19.2.7", + "react-dom": "^19.2.7", + "sass": "^1.98.0", + "simple-git-hooks": "^2.13.1", + "tsx": "^4.21.0", + "typescript": "^5.9.3", + "vue": "^3.5.30", + "zod": "^4.3.6", + "zod-validation-error": "^5.0.0" + }, + "dependencies": { + "@11ty/dependency-tree": "^4.0.2", + "@11ty/dependency-tree-esm": "^2.0.4", + "@11ty/eleventy-dev-server": "^2.0.8", + "@11ty/eleventy-plugin-bundle": "^3.0.7", + "@11ty/eleventy-utils": "^2.0.7", + "@11ty/lodash-custom": "^4.17.21", + "@11ty/posthtml-urls": "^1.0.3", + "@11ty/recursive-copy": "^4.0.4", + "@sindresorhus/slugify": "^2.2.1", + "bcp-47-normalize": "^2.3.0", + "chokidar": "^3.6.0", + "debug": "^4.4.3", + "dependency-graph": "^1.0.0", + "entities": "^6.0.1", + "filesize": "^10.1.6", + "gray-matter": "^4.0.3", + "iso-639-1": "^3.1.5", + "js-yaml": "^4.1.1", + "kleur": "^4.1.5", + "liquidjs": "^10.27.0", + "luxon": "^3.7.2", + "markdown-it": "^14.2.0", + "minimist": "^1.2.8", + "moo": "0.5.2", + "node-retrieve-globals": "^6.0.1", + "nunjucks": "^3.2.4", + "picomatch": "^4.0.4", + "please-upgrade-node": "^3.2.0", + "posthtml": "^0.16.7", + "posthtml-match-helper": "^2.0.3", + "semver": "^7.8.1", + "slugify": "^1.6.9", + "tinyglobby": "^0.2.16" + }, + "overrides": { + "gray-matter": { + "js-yaml": "$js-yaml" + } + } +} diff --git a/node_modules/@11ty/eleventy/src/Benchmark/Benchmark.js b/node_modules/@11ty/eleventy/src/Benchmark/Benchmark.js new file mode 100644 index 00000000..df6dea7d --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Benchmark/Benchmark.js @@ -0,0 +1,55 @@ +import { performance } from "node:perf_hooks"; + +class Benchmark { + constructor() { + // TypeScript slop + this.timeSpent = 0; + this.timesCalled = 0; + this.beforeTimers = []; + } + + reset() { + this.timeSpent = 0; + this.timesCalled = 0; + this.beforeTimers = []; + } + + getNewTimestamp() { + if (performance) { + return performance.now(); + } + return new Date().getTime(); + } + + incrementCount() { + this.timesCalled++; + } + + // TODO(slightlyoff): + // disable all of these hrtime requests when not benchmarking + before() { + this.timesCalled++; + this.beforeTimers.push(this.getNewTimestamp()); + } + + after() { + if (!this.beforeTimers.length) { + throw new Error("You called Benchmark after() without a before()."); + } + + let before = this.beforeTimers.pop(); + if (!this.beforeTimers.length) { + this.timeSpent += this.getNewTimestamp() - before; + } + } + + getTimesCalled() { + return this.timesCalled; + } + + getTotal() { + return this.timeSpent; + } +} + +export default Benchmark; diff --git a/node_modules/@11ty/eleventy/src/Benchmark/BenchmarkGroup.js b/node_modules/@11ty/eleventy/src/Benchmark/BenchmarkGroup.js new file mode 100644 index 00000000..ee82f6b5 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Benchmark/BenchmarkGroup.js @@ -0,0 +1,135 @@ +import debugUtil from "debug"; + +import ConsoleLogger from "../Util/ConsoleLogger.js"; +import isAsyncFunction from "../Util/IsAsyncFunction.js"; +import Benchmark from "./Benchmark.js"; + +const debugBenchmark = debugUtil("Eleventy:Benchmark"); + +class BenchmarkGroup { + constructor() { + this.benchmarks = {}; + // Warning: aggregate benchmarks automatically default to false via BenchmarkManager->getBenchmarkGroup + this.isVerbose = true; + this.logger = new ConsoleLogger(); + this.minimumThresholdMs = 50; + this.minimumThresholdPercent = 8; + } + + setIsVerbose(isVerbose) { + this.isVerbose = isVerbose; + this.logger.isVerbose = isVerbose; + } + + reset() { + for (var type in this.benchmarks) { + this.benchmarks[type].reset(); + } + } + + // TODO use addAsync everywhere instead + add(type, callback) { + let benchmark = (this.benchmarks[type] = new Benchmark()); + + /** @this {any} */ + let fn = function (...args) { + benchmark.before(); + let ret = callback.call(this, ...args); + benchmark.after(); + return ret; + }; + + Object.defineProperty(fn, "__eleventyInternal", { + value: { + type: isAsyncFunction(callback) ? "async" : "sync", + callback, + }, + }); + + return fn; + } + + // callback must return a promise + // async addAsync(type, callback) { + // let benchmark = (this.benchmarks[type] = new Benchmark()); + + // benchmark.before(); + // // don’t await here. + // let promise = callback.call(this); + // promise.then(function() { + // benchmark.after(); + // }); + // return promise; + // } + + setMinimumThresholdMs(minimumThresholdMs) { + let val = parseInt(minimumThresholdMs, 10); + if (isNaN(val)) { + throw new Error("`setMinimumThresholdMs` expects a number argument."); + } + this.minimumThresholdMs = val; + } + + setMinimumThresholdPercent(minimumThresholdPercent) { + let val = parseInt(minimumThresholdPercent, 10); + if (isNaN(val)) { + throw new Error("`setMinimumThresholdPercent` expects a number argument."); + } + this.minimumThresholdPercent = val; + } + + has(type) { + return !!this.benchmarks[type]; + } + + get(type) { + if (!this.benchmarks[type]) { + this.benchmarks[type] = new Benchmark(); + } + return this.benchmarks[type]; + } + + padNumber(num, length) { + if (("" + num).length >= length) { + return num; + } + + let prefix = new Array(length + 1).join(" "); + return (prefix + num).slice(-1 * length); + } + + finish(label, totalTimeSpent) { + for (var type in this.benchmarks) { + let bench = this.benchmarks[type]; + let isAbsoluteMinimumComparison = this.minimumThresholdMs > 0; + let totalForBenchmark = bench.getTotal(); + let percent = Math.round((totalForBenchmark * 100) / totalTimeSpent); + let callCount = bench.getTimesCalled(); + + let output = { + ms: this.padNumber(totalForBenchmark.toFixed(0), 6), + percent: this.padNumber(percent, 3), + calls: this.padNumber(callCount, 5), + }; + let str = `Benchmark ${output.ms}ms ${output.percent}% ${output.calls}× (${label}) ${type}`; + + if ( + isAbsoluteMinimumComparison && + totalForBenchmark >= this.minimumThresholdMs && + percent > this.minimumThresholdPercent + ) { + this.logger.warn(str); + } + + // Opt out of logging if low count (1× or 2×) or 0ms / 1% + if ( + callCount > 1 || // called more than once + Math.round(totalForBenchmark) > 0 // more than 0.5ms + ) { + debugBenchmark(str); + } + } + } +} + +export default BenchmarkGroup; diff --git a/node_modules/@11ty/eleventy/src/Benchmark/BenchmarkManager.js b/node_modules/@11ty/eleventy/src/Benchmark/BenchmarkManager.js new file mode 100644 index 00000000..d7a8f610 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Benchmark/BenchmarkManager.js @@ -0,0 +1,73 @@ +import { performance } from "node:perf_hooks"; + +import BenchmarkGroup from "./BenchmarkGroup.js"; + +// TODO this should not be a singleton, it belongs in the config or somewhere on the Eleventy instance. + +class BenchmarkManager { + constructor() { + this.benchmarkGroups = {}; + this.isVerbose = true; + this.start = this.getNewTimestamp(); + } + + reset() { + this.start = this.getNewTimestamp(); + + for (var j in this.benchmarkGroups) { + this.benchmarkGroups[j].reset(); + } + } + + getNewTimestamp() { + if (performance) { + return performance.now(); + } + return new Date().getTime(); + } + + setVerboseOutput(isVerbose) { + this.isVerbose = !!isVerbose; + } + + hasBenchmarkGroup(name) { + return name in this.benchmarkGroups; + } + + getBenchmarkGroup(name) { + if (!this.benchmarkGroups[name]) { + this.benchmarkGroups[name] = new BenchmarkGroup(); + + // Special behavior for aggregate benchmarks + // so they don’t console.log every time + if (name === "Aggregate") { + this.benchmarkGroups[name].setIsVerbose(false); + } else { + this.benchmarkGroups[name].setIsVerbose(this.isVerbose); + } + } + + return this.benchmarkGroups[name]; + } + + getAll() { + return this.benchmarkGroups; + } + + get(name) { + if (name) { + return this.getBenchmarkGroup(name); + } + + return this.getAll(); + } + + finish() { + let totalTimeSpentBenchmarking = this.getNewTimestamp() - this.start; + for (var j in this.benchmarkGroups) { + this.benchmarkGroups[j].finish(j, totalTimeSpentBenchmarking); + } + } +} + +export default BenchmarkManager; diff --git a/node_modules/@11ty/eleventy/src/Data/ComputedData.js b/node_modules/@11ty/eleventy/src/Data/ComputedData.js new file mode 100644 index 00000000..5350475c --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Data/ComputedData.js @@ -0,0 +1,122 @@ +import lodash from "@11ty/lodash-custom"; +import debugUtil from "debug"; + +import ComputedDataQueue from "./ComputedDataQueue.js"; +import ComputedDataTemplateString from "./ComputedDataTemplateString.js"; +import ComputedDataProxy from "./ComputedDataProxy.js"; + +const { set: lodashSet, get: lodashGet } = lodash; +const debug = debugUtil("Eleventy:ComputedData"); + +class ComputedData { + constructor(config) { + this.computed = {}; + this.symbolParseFunctions = {}; + this.templateStringKeyLookup = {}; + this.computedKeys = new Set(); + this.declaredDependencies = {}; + this.queue = new ComputedDataQueue(); + this.config = config; + } + + add(key, renderFn, declaredDependencies = [], symbolParseFn, templateInstance) { + this.computedKeys.add(key); + this.declaredDependencies[key] = declaredDependencies; + + // bind config filters/JS functions + if (typeof renderFn === "function") { + let fns = {}; + // TODO bug? no access to non-universal config things? + if (this.config) { + fns = { + ...this.config.javascriptFunctions, + }; + } + fns.tmpl = templateInstance; + + renderFn = renderFn.bind(fns); + } + + lodashSet(this.computed, key, renderFn); + + if (symbolParseFn) { + lodashSet(this.symbolParseFunctions, key, symbolParseFn); + } + } + + addTemplateString(key, renderFn, declaredDependencies = [], symbolParseFn, templateInstance) { + this.add(key, renderFn, declaredDependencies, symbolParseFn, templateInstance); + this.templateStringKeyLookup[key] = true; + } + + async resolveVarOrder(data) { + let proxyByTemplateString = new ComputedDataTemplateString(this.computedKeys); + let proxyByProxy = new ComputedDataProxy(this.computedKeys); + + for (let key of this.computedKeys) { + let computed = lodashGet(this.computed, key); + + if (typeof computed !== "function") { + // add nodes for non functions (primitives like booleans, etc) + // This will not handle template strings, as they are normalized to functions + this.queue.addNode(key); + } else { + this.queue.uses(key, this.declaredDependencies[key]); + + let symbolParseFn = lodashGet(this.symbolParseFunctions, key); + let varsUsed = []; + if (symbolParseFn) { + // use the parseForSymbols function in the TemplateEngine + varsUsed = symbolParseFn(); + } else if (symbolParseFn !== false) { + // skip resolution is this is false (just use declaredDependencies) + let isTemplateString = !!this.templateStringKeyLookup[key]; + let proxy = isTemplateString ? proxyByTemplateString : proxyByProxy; + varsUsed = await proxy.findVarsUsed(computed, data); + } + + debug("%o accesses %o variables", key, varsUsed); + let filteredVarsUsed = varsUsed.filter((varUsed) => { + return ( + (varUsed !== key && this.computedKeys.has(varUsed)) || + varUsed.startsWith("collections.") + ); + }); + this.queue.uses(key, filteredVarsUsed); + } + } + } + + async _setupDataEntry(data, order) { + debug("Computed data order of execution: %o", order); + for (let key of order) { + let computed = lodashGet(this.computed, key); + + if (typeof computed === "function") { + let ret = await computed(data); + lodashSet(data, key, ret); + } else if (computed !== undefined) { + lodashSet(data, key, computed); + } + } + } + + async setupData(data, orderFilter) { + await this.resolveVarOrder(data); + + await this.processRemainingData(data, orderFilter); + } + + async processRemainingData(data, orderFilter) { + // process all variables + let order = this.queue.getOrder(); + if (orderFilter && typeof orderFilter === "function") { + order = order.filter(orderFilter.bind(this.queue)); + } + + await this._setupDataEntry(data, order); + this.queue.markComputed(order); + } +} + +export default ComputedData; diff --git a/node_modules/@11ty/eleventy/src/Data/ComputedDataProxy.js b/node_modules/@11ty/eleventy/src/Data/ComputedDataProxy.js new file mode 100644 index 00000000..24153555 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Data/ComputedDataProxy.js @@ -0,0 +1,131 @@ +import lodash from "@11ty/lodash-custom"; +import { isPlainObject } from "@11ty/eleventy-utils"; + +const { set: lodashSet, get: lodashGet } = lodash; + +/* Calculates computed data using Proxies */ +class ComputedDataProxy { + constructor(computedKeys) { + if (Array.isArray(computedKeys)) { + this.computedKeys = new Set(computedKeys); + } else { + this.computedKeys = computedKeys; + } + } + + isArrayOrPlainObject(data) { + return Array.isArray(data) || isPlainObject(data); + } + + getProxyData(data, keyRef) { + // WARNING: SIDE EFFECTS + // Set defaults for keys not already set on parent data + + // TODO should make another effort to get rid of this, + // See the ProxyWrap util for more proxy handlers that will likely fix this + let undefinedValue = "__11TY_UNDEFINED__"; + if (this.computedKeys) { + for (let key of this.computedKeys) { + if (lodashGet(data, key, undefinedValue) === undefinedValue) { + lodashSet(data, key, ""); + } + } + } + + let proxyData = this._getProxyData(data, keyRef); + return proxyData; + } + + _getProxyForObject(dataObj, keyRef, parentKey = "") { + return new Proxy( + {}, + { + get: (obj, key) => { + if (typeof key !== "string") { + return obj[key]; + } + + let newKey = `${parentKey ? `${parentKey}.` : ""}${key}`; + + // Issue #1137 + // Special case for Collections, always return an Array for collection keys + // so they it works fine with Array methods like `filter`, `map`, etc + if (newKey === "collections") { + keyRef.add(newKey); + return new Proxy( + {}, + { + get: (target, key) => { + if (typeof key === "string") { + keyRef.add(`collections.${key}`); + return []; + } + return target[key]; + }, + }, + ); + } + + let newData = this._getProxyData(dataObj[key], keyRef, newKey); + if (!this.isArrayOrPlainObject(newData)) { + keyRef.add(newKey); + } + return newData; + }, + }, + ); + } + + _getProxyForArray(dataArr, keyRef, parentKey = "") { + return new Proxy(new Array(dataArr.length), { + get: (obj, key) => { + if (Array.prototype.hasOwnProperty(key)) { + // remove `filter`, `constructor`, `map`, etc + keyRef.add(parentKey); + return obj[key]; + } + + // Hm, this needs to be better + if (key === "then") { + keyRef.add(parentKey); + return; + } + + let newKey = `${parentKey}[${key}]`; + let newData = this._getProxyData(dataArr[key], keyRef, newKey); + if (!this.isArrayOrPlainObject(newData)) { + keyRef.add(newKey); + } + return newData; + }, + }); + } + + _getProxyData(data, keyRef, parentKey = "") { + if (isPlainObject(data)) { + return this._getProxyForObject(data, keyRef, parentKey); + } else if (Array.isArray(data)) { + return this._getProxyForArray(data, keyRef, parentKey); + } + + // everything else! + return data; + } + + async findVarsUsed(fn, data = {}) { + let keyRef = new Set(); + + // careful, logging proxyData will mess with test results! + let proxyData = this.getProxyData(data, keyRef); + + // squelch console logs for this fake proxy data pass 😅 + // let savedLog = console.log; + // console.log = () => {}; + await fn(proxyData); + // console.log = savedLog; + + return Array.from(keyRef); + } +} + +export default ComputedDataProxy; diff --git a/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js b/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js new file mode 100644 index 00000000..628b9113 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js @@ -0,0 +1,64 @@ +import { DepGraph as DependencyGraph } from "dependency-graph"; + +/* Keeps track of the dependency graph between computed data variables + * Removes keys from the graph when they are computed. + */ +class ComputedDataQueue { + constructor() { + this.graph = new DependencyGraph(); + } + + getOrder() { + return this.graph.overallOrder(); + } + + getOrderFor(name) { + return this.graph.dependenciesOf(name); + } + + getDependsOn(name) { + return this.graph.dependantsOf(name); + } + + isUsesStartsWith(name, prefix) { + if (name.startsWith(prefix)) { + return true; + } + return ( + this.graph.dependenciesOf(name).filter((entry) => { + return entry.startsWith(prefix); + }).length > 0 + ); + } + + addNode(name) { + if (!this.graph.hasNode(name)) { + this.graph.addNode(name); + } + } + + _uses(graph, name, varsUsed = []) { + if (!graph.hasNode(name)) { + graph.addNode(name); + } + + for (let varUsed of varsUsed) { + if (!graph.hasNode(varUsed)) { + graph.addNode(varUsed); + } + graph.addDependency(name, varUsed); + } + } + + uses(name, varsUsed = []) { + this._uses(this.graph, name, varsUsed); + } + + markComputed(varsComputed = []) { + for (let varComputed of varsComputed) { + this.graph.removeNode(varComputed); + } + } +} + +export default ComputedDataQueue; diff --git a/node_modules/@11ty/eleventy/src/Data/ComputedDataTemplateString.js b/node_modules/@11ty/eleventy/src/Data/ComputedDataTemplateString.js new file mode 100644 index 00000000..d5241b23 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Data/ComputedDataTemplateString.js @@ -0,0 +1,70 @@ +import lodash from "@11ty/lodash-custom"; +import debugUtil from "debug"; + +const { set: lodashSet } = lodash; +const debug = debugUtil("Eleventy:ComputedDataTemplateString"); + +/* Calculates computed data in Template Strings. + * Ideally we would use the Proxy approach but it doesn’t work + * in some template languages that visit all available data even if + * it isn’t used in the template (Nunjucks) + */ +class ComputedDataTemplateString { + constructor(computedKeys) { + if (Array.isArray(computedKeys)) { + this.computedKeys = new Set(computedKeys); + } else { + this.computedKeys = computedKeys; + } + + // is this ¯\_(lisp)_/¯ + // must be strings that won’t be escaped by template languages + this.prefix = "(((11ty((("; + this.suffix = ")))11ty)))"; + } + + getProxyData() { + let proxyData = {}; + + // use these special strings as a workaround to check the rendered output + // can’t use proxies here as some template languages trigger proxy for all + // keys in data + for (let key of this.computedKeys) { + // TODO don’t allow to set eleventyComputed.page? other disallowed computed things? + lodashSet(proxyData, key, this.prefix + key + this.suffix); + } + + return proxyData; + } + + findVarsInOutput(output = "") { + let vars = new Set(); + let splits = output.split(this.prefix); + for (let split of splits) { + let varName = split.slice(0, split.indexOf(this.suffix) < 0 ? 0 : split.indexOf(this.suffix)); + if (varName) { + vars.add(varName); + } + } + return Array.from(vars); + } + + async findVarsUsed(fn) { + let proxyData = this.getProxyData(); + let output; + // Mitigation for #1061, errors with filters in the first pass shouldn’t fail the whole thing. + try { + output = await fn(proxyData); + } catch (e) { + debug("Computed Data first pass data resolution error: %o", e); + } + + // page.outputPath on serverless urls returns false. + if (typeof output === "string") { + return this.findVarsInOutput(output); + } + return []; + } +} + +export default ComputedDataTemplateString; diff --git a/node_modules/@11ty/eleventy/src/Data/TemplateData.js b/node_modules/@11ty/eleventy/src/Data/TemplateData.js new file mode 100644 index 00000000..6942892c --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Data/TemplateData.js @@ -0,0 +1,710 @@ +import path from "node:path"; +import util from "node:util"; +import semver from "semver"; + +import lodash from "@11ty/lodash-custom"; +import { Merge, TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import unique from "../Util/Objects/Unique.js"; +import TemplateGlob from "../TemplateGlob.js"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import TemplateDataInitialGlobalData from "./TemplateDataInitialGlobalData.js"; +import { getEleventyPackageJson, getWorkingProjectPackageJson } from "../Util/ImportJsonSync.js"; +import { EleventyImport, EleventyLoadContent } from "../Util/Require.js"; +import { DeepFreeze } from "../Util/Objects/DeepFreeze.js"; + +const { set: lodashSet, get: lodashGet } = lodash; + +const debugWarn = debugUtil("Eleventy:Warnings"); +const debug = debugUtil("Eleventy:TemplateData"); +const debugDev = debugUtil("Dev:Eleventy:TemplateData"); + +class TemplateDataParseError extends EleventyBaseError {} + +class TemplateData { + constructor(templateConfig) { + if (!templateConfig || templateConfig.constructor.name !== "TemplateConfig") { + throw new Error( + "Internal error: Missing `templateConfig` or was not an instance of `TemplateConfig`.", + ); + } + + this.templateConfig = templateConfig; + this.config = this.templateConfig.getConfig(); + + this.benchmarks = { + data: this.config.benchmarkManager.get("Data"), + aggregate: this.config.benchmarkManager.get("Aggregate"), + }; + + this.rawImports = {}; + this.globalData = null; + this.templateDirectoryData = {}; + this.isEsm = false; + + this.initialGlobalData = new TemplateDataInitialGlobalData(this.templateConfig); + } + + get dirs() { + return this.templateConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + // if this was set but `falsy` we would fallback to inputDir + get dataDir() { + return this.dirs.data; + } + + get absoluteDataDir() { + return TemplatePath.absolutePath(this.dataDir); + } + + // This was async in 2.0 and prior but doesn’t need to be any more. + getInputDir() { + return this.dirs.input; + } + + getDataDir() { + return this.dataDir; + } + + exists(pathname) { + // It's common for data files not to exist, so we avoid going to the FS to + // re-check if they do via a quick-and-dirty cache. + return this.templateConfig.existsCache.exists(pathname); + } + + setFileSystemSearch(fileSystemSearch) { + this.fileSystemSearch = fileSystemSearch; + } + + setProjectUsingEsm(isEsmProject) { + this.isEsm = !!isEsmProject; + } + + get extensionMap() { + if (!this._extensionMap) { + throw new Error("Internal error: missing `extensionMap` in TemplateData."); + } + return this._extensionMap; + } + + set extensionMap(map) { + this._extensionMap = map; + } + + get environmentVariables() { + return this._env; + } + + set environmentVariables(env) { + this._env = env; + } + + /* Used by tests */ + _setConfig(config) { + this.config = config; + } + + getRawImports() { + if (!this.config.keys.package) { + debug( + "Opted-out of package.json assignment for global data with falsy value for `keys.package` configuration.", + ); + return this.rawImports; + } else if (Object.keys(this.rawImports).length > 0) { + return this.rawImports; + } + + let pkgJson = getWorkingProjectPackageJson(); + this.rawImports[this.config.keys.package] = pkgJson; + + if (this.config.freezeReservedData) { + DeepFreeze(this.rawImports); + } + + return this.rawImports; + } + + clearData() { + this.globalData = null; + this.configApiGlobalData = null; + this.templateDirectoryData = {}; + } + + _getGlobalDataGlobByExtension(extension) { + return TemplateGlob.normalizePath(this.dataDir, `/**/*.${extension}`); + } + + // This is a backwards compatibility helper with the old `jsDataFileSuffix` configuration API + getDataFileSuffixes() { + // New API + if (Array.isArray(this.config.dataFileSuffixes)) { + return this.config.dataFileSuffixes; + } + + // Backwards compatibility + if (this.config.jsDataFileSuffix) { + let suffixes = []; + suffixes.push(this.config.jsDataFileSuffix); // e.g. filename.11tydata.json + suffixes.push(""); // suffix-less for free with old API, e.g. filename.json + return suffixes; + } + return []; // if both of these entries are set to false, use no files + } + + // This is used exclusively for --watch and --serve chokidar targets + async getTemplateDataFileGlob() { + let suffixes = this.getDataFileSuffixes(); + let globSuffixesWithLeadingDot = new Set(); + globSuffixesWithLeadingDot.add("json"); // covers .11tydata.json too + let globSuffixesWithoutLeadingDot = new Set(); + + // Typically using [ '.11tydata', '' ] suffixes to find data files + for (let suffix of suffixes) { + // TODO the `suffix` truthiness check is purely for backwards compat? + if (suffix && typeof suffix === "string") { + if (suffix.startsWith(".")) { + // .suffix.js + globSuffixesWithLeadingDot.add(`${suffix.slice(1)}.mjs`); + globSuffixesWithLeadingDot.add(`${suffix.slice(1)}.cjs`); + globSuffixesWithLeadingDot.add(`${suffix.slice(1)}.js`); + } else { + // "suffix.js" without leading dot + globSuffixesWithoutLeadingDot.add(`${suffix || ""}.mjs`); + globSuffixesWithoutLeadingDot.add(`${suffix || ""}.cjs`); + globSuffixesWithoutLeadingDot.add(`${suffix || ""}.js`); + } + } + } + + // Configuration Data Extensions e.g. yaml + if (this.hasUserDataExtensions()) { + for (let extension of this.getUserDataExtensions()) { + globSuffixesWithLeadingDot.add(extension); // covers .11tydata.{extension} too + } + } + + let paths = []; + if (globSuffixesWithLeadingDot.size > 0) { + paths.push(`${this.inputDir}**/*.{${Array.from(globSuffixesWithLeadingDot).join(",")}}`); + } + if (globSuffixesWithoutLeadingDot.size > 0) { + paths.push(`${this.inputDir}**/*{${Array.from(globSuffixesWithoutLeadingDot).join(",")}}`); + } + + return TemplatePath.addLeadingDotSlashArray(paths); + } + + // For spidering dependencies + // TODO Can we reuse getTemplateDataFileGlob instead? Maybe just filter off the .json files before scanning for dependencies + getTemplateJavaScriptDataFileGlob() { + let paths = []; + let suffixes = this.getDataFileSuffixes(); + for (let suffix of suffixes) { + if (suffix) { + // TODO this check is purely for backwards compat and I kinda feel like it shouldn’t be here + // paths.push(`${this.inputDir}/**/*${suffix || ""}.cjs`); // Same as above + paths.push(`${this.inputDir}**/*${suffix || ""}.js`); + } + } + + return TemplatePath.addLeadingDotSlashArray(paths); + } + + getGlobalDataGlob() { + let extGlob = this.getGlobalDataExtensionPriorities().join(","); + return [this._getGlobalDataGlobByExtension("{" + extGlob + "}")]; + } + + getWatchPathCache() { + return this.pathCache; + } + + getGlobalDataExtensionPriorities() { + return this.getUserDataExtensions().concat(["json", "mjs", "cjs", "js"]); + } + + static calculateExtensionPriority(path, priorities) { + for (let i = 0; i < priorities.length; i++) { + let ext = priorities[i]; + if (path.endsWith(ext)) { + return i; + } + } + return priorities.length; + } + + async getGlobalDataFiles() { + let priorities = this.getGlobalDataExtensionPriorities(); + + let fsBench = this.benchmarks.aggregate.get("Searching the file system (data)"); + fsBench.before(); + let globs = this.getGlobalDataGlob(); + let paths = await this.fileSystemSearch.search("global-data", globs); + fsBench.after(); + + // sort paths according to extension priorities + // here we use reverse ordering, because paths with bigger index in array will override the first ones + // example [path/file.json, path/file.js] here js will override json + paths = paths.sort((first, second) => { + let p1 = TemplateData.calculateExtensionPriority(first, priorities); + let p2 = TemplateData.calculateExtensionPriority(second, priorities); + if (p1 < p2) { + return -1; + } + if (p1 > p2) { + return 1; + } + return 0; + }); + + this.pathCache = paths; + return paths; + } + + getObjectPathForDataFile(dataFilePath) { + let absoluteDataFilePath = TemplatePath.absolutePath(dataFilePath); + let reducedPath = TemplatePath.stripLeadingSubPath(absoluteDataFilePath, this.absoluteDataDir); + let parsed = path.parse(reducedPath); + let folders = parsed.dir ? parsed.dir.split("/") : []; + folders.push(parsed.name); + + return folders; + } + + async getAllGlobalData() { + let globalData = {}; + let files = TemplatePath.addLeadingDotSlashArray(await this.getGlobalDataFiles()); + + this.config.events.emit("eleventy.globalDataFiles", files); + + let dataFileConflicts = {}; + + for (let j = 0, k = files.length; j < k; j++) { + let data = await this.getDataValue(files[j]); + let objectPathTarget = this.getObjectPathForDataFile(files[j]); + + // Since we're joining directory paths and an array is not usable as an objectkey since two identical arrays are not double equal, + // we can just join the array by a forbidden character ("/"" is chosen here, since it works on Linux, Mac and Windows). + // If at some point this isn't enough anymore, it would be possible to just use JSON.stringify(objectPathTarget) since that + // is guaranteed to work but is signifivcantly slower. + let objectPathTargetString = objectPathTarget.join(path.sep); + + // if two global files have the same path (but different extensions) + // and conflict, let’s merge them. + if (dataFileConflicts[objectPathTargetString]) { + debugWarn( + `merging global data from ${files[j]} with an already existing global data file (${dataFileConflicts[objectPathTargetString]}). Overriding existing keys.`, + ); + + let oldData = lodashGet(globalData, objectPathTarget); + data = TemplateData.mergeDeep(this.config.dataDeepMerge, oldData, data); + } + + dataFileConflicts[objectPathTargetString] = files[j]; + debug(`Found global data file ${files[j]} and adding as: ${objectPathTarget}`); + lodashSet(globalData, objectPathTarget, data); + } + + return globalData; + } + + async #getInitialGlobalData() { + let globalData = await this.initialGlobalData.getData(); + + if (!("eleventy" in globalData)) { + globalData.eleventy = {}; + } + + // #2293 for meta[name=generator] + const pkg = getEleventyPackageJson(); + globalData.eleventy.version = semver.coerce(pkg.version).toString(); + globalData.eleventy.generator = `Eleventy v${globalData.eleventy.version}`; + + if (this.environmentVariables) { + if (!("env" in globalData.eleventy)) { + globalData.eleventy.env = {}; + } + + Object.assign(globalData.eleventy.env, this.environmentVariables); + } + + if (this.dirs) { + if (!("directories" in globalData.eleventy)) { + globalData.eleventy.directories = {}; + } + + Object.assign(globalData.eleventy.directories, this.dirs.getUserspaceInstance()); + } + + // Reserved + if (this.config.freezeReservedData) { + DeepFreeze(globalData.eleventy); + } + + return globalData; + } + + async getInitialGlobalData() { + if (!this.configApiGlobalData) { + this.configApiGlobalData = this.#getInitialGlobalData(); + } + + return this.configApiGlobalData; + } + + async #getGlobalData() { + let rawImports = this.getRawImports(); + let configApiGlobalData = await this.getInitialGlobalData(); + + let globalJson = await this.getAllGlobalData(); + let mergedGlobalData = Merge(globalJson, configApiGlobalData); + + // OK: Shallow merge when combining rawImports (pkg) with global data files + return Object.assign({}, mergedGlobalData, rawImports); + } + + async getGlobalData() { + if (!this.globalData) { + this.globalData = this.#getGlobalData(); + } + + return this.globalData; + } + + /* Template and Directory data files */ + async combineLocalData(localDataPaths) { + let localData = {}; + if (!Array.isArray(localDataPaths)) { + localDataPaths = [localDataPaths]; + } + + // Filter out files we know don't exist to avoid overhead for checking + localDataPaths = localDataPaths.filter((path) => { + return this.exists(path); + }); + + this.config.events.emit("eleventy.dataFiles", localDataPaths); + + if (!localDataPaths.length) { + return localData; + } + + let dataSource = {}; + for (let path of localDataPaths) { + let dataForPath = await this.getDataValue(path); + if (!isPlainObject(dataForPath)) { + debug( + "Warning: Template and Directory data files expect an object to be returned, instead `%o` returned `%o`", + path, + dataForPath, + ); + } else { + // clean up data for template/directory data files only. + let cleanedDataForPath = TemplateData.cleanupData(dataForPath, { + file: path, + }); + for (let key in cleanedDataForPath) { + if (Object.prototype.hasOwnProperty.call(dataSource, key)) { + debugWarn( + "Local data files have conflicting data. Overwriting '%s' with data from '%s'. Previous data location was from '%s'", + key, + path, + dataSource[key], + ); + } + dataSource[key] = path; + } + TemplateData.mergeDeep(this.config.dataDeepMerge, localData, cleanedDataForPath); + } + } + return localData; + } + + async getTemplateDirectoryData(templatePath) { + if (!this.templateDirectoryData[templatePath]) { + let localDataPaths = await this.getLocalDataPaths(templatePath); + let importedData = await this.combineLocalData(localDataPaths); + + this.templateDirectoryData[templatePath] = importedData; + } + return this.templateDirectoryData[templatePath]; + } + + getUserDataExtensions() { + if (!this.config.dataExtensions) { + return []; + } + + // returning extensions in reverse order to create proper extension order + // later added formats will override first ones + return Array.from(this.config.dataExtensions.keys()).reverse(); + } + + getUserDataParser(extension) { + return this.config.dataExtensions.get(extension); + } + + isUserDataExtension(extension) { + return this.config.dataExtensions && this.config.dataExtensions.has(extension); + } + + hasUserDataExtensions() { + return this.config.dataExtensions && this.config.dataExtensions.size > 0; + } + + async _parseDataFile(path, parser, options = {}) { + let readFile = !("read" in options) || options.read === true; + let rawInput; + + if (readFile) { + rawInput = EleventyLoadContent(path, options); + } + + if (readFile && !rawInput) { + return {}; + } + + try { + if (readFile) { + return parser(rawInput, path); + } else { + // path as a first argument is when `read: false` + // path as a second argument is for consistency with `read: true` API + return parser(path, path); + } + } catch (e) { + throw new TemplateDataParseError(`Having trouble parsing data file ${path}`, e); + } + } + + // ignoreProcessing = false for global data files + // ignoreProcessing = true for local data files + async getDataValue(path) { + let extension = TemplatePath.getExtension(path); + + if (extension === "js" || extension === "cjs" || extension === "mjs") { + // JS data file or require’d JSON (no preprocessing needed) + if (!this.exists(path)) { + return {}; + } + + let aggregateDataBench = this.benchmarks.aggregate.get("Data File"); + aggregateDataBench.before(); + let dataBench = this.benchmarks.data.get(`\`${path}\``); + dataBench.before(); + + let type = "cjs"; + if (extension === "mjs" || (extension === "js" && this.isEsm)) { + type = "esm"; + } + + // We always need to use `import()`, as `require` isn’t available in ESM. + let returnValue = await EleventyImport(path, type); + + // TODO special exception for Global data `permalink.js` + // module.exports = (data) => `${data.page.filePathStem}/`; // Does not work + // module.exports = () => ((data) => `${data.page.filePathStem}/`); // Works + if (typeof returnValue === "function") { + let configApiGlobalData = await this.getInitialGlobalData(); + returnValue = await returnValue(configApiGlobalData || {}); + } + + dataBench.after(); + aggregateDataBench.after(); + + return returnValue; + } else if (this.isUserDataExtension(extension)) { + // Other extensions + let { parser, options } = this.getUserDataParser(extension); + + return this._parseDataFile(path, parser, options); + } else if (extension === "json") { + // File to string, parse with JSON (preprocess) + const parser = (content) => JSON.parse(content); + return this._parseDataFile(path, parser); + } else { + throw new TemplateDataParseError( + `Could not find an appropriate data parser for ${path}. Do you need to add a plugin to your config file?`, + ); + } + } + + _pushExtensionsToPaths(paths, curpath, extensions) { + for (let extension of extensions) { + paths.push(curpath + "." + extension); + } + } + + _addBaseToPaths(paths, base, extensions, nonEmptySuffixesOnly = false) { + let suffixes = this.getDataFileSuffixes(); + + for (let suffix of suffixes) { + suffix = suffix || ""; + + if (nonEmptySuffixesOnly && suffix === "") { + continue; + } + + // data suffix + if (suffix) { + paths.push(base + suffix + ".js"); + paths.push(base + suffix + ".cjs"); + paths.push(base + suffix + ".mjs"); + } + paths.push(base + suffix + ".json"); // default: .11tydata.json + + // inject user extensions + this._pushExtensionsToPaths(paths, base + suffix, extensions); + } + } + + async getLocalDataPaths(templatePath) { + let paths = []; + let parsed = path.parse(templatePath); + let inputDir = this.inputDir; + + debugDev("getLocalDataPaths(%o)", templatePath); + debugDev("parsed.dir: %o", parsed.dir); + + let userExtensions = this.getUserDataExtensions(); + + if (parsed.dir) { + let fileNameNoExt = this.extensionMap.removeTemplateExtension(parsed.base); + + // default dataSuffix: .11tydata, is appended in _addBaseToPaths + debug("Using %o suffixes to find data files.", this.getDataFileSuffixes()); + + // Template data file paths + let filePathNoExt = parsed.dir + "/" + fileNameNoExt; + this._addBaseToPaths(paths, filePathNoExt, userExtensions); + + // Directory data file paths + let allDirs = TemplatePath.getAllDirs(parsed.dir); + + debugDev("allDirs: %o", allDirs); + for (let dir of allDirs) { + let lastDir = TemplatePath.getLastPathSegment(dir); + let dirPathNoExt = dir + "/" + lastDir; + + if (inputDir) { + debugDev("dirStr: %o; inputDir: %o", dir, inputDir); + } + // TODO use DirContains + if (!inputDir || (dir.startsWith(inputDir) && dir !== inputDir)) { + if (this.config.dataFileDirBaseNameOverride) { + let indexDataFile = dir + "/" + this.config.dataFileDirBaseNameOverride; + this._addBaseToPaths(paths, indexDataFile, userExtensions, true); + } else { + this._addBaseToPaths(paths, dirPathNoExt, userExtensions); + } + } + } + + // 0.11.0+ include root input dir files + // if using `docs/` as input dir, looks for docs/docs.json et al + if (inputDir) { + let lastInputDir = TemplatePath.addLeadingDotSlash( + TemplatePath.join(inputDir, TemplatePath.getLastPathSegment(inputDir)), + ); + + // in root input dir, search for index.11tydata.json et al + if (this.config.dataFileDirBaseNameOverride) { + let indexDataFile = + TemplatePath.getDirFromFilePath(lastInputDir) + + "/" + + this.config.dataFileDirBaseNameOverride; + this._addBaseToPaths(paths, indexDataFile, userExtensions, true); + } else if (lastInputDir !== "./") { + this._addBaseToPaths(paths, lastInputDir, userExtensions); + } + } + } + + debug("getLocalDataPaths(%o): %o", templatePath, paths); + return unique(paths).reverse(); + } + + static mergeDeep(deepMerge, target, ...source) { + if (!deepMerge && deepMerge !== undefined) { + return Object.assign(target, ...source); + } else { + return TemplateData.merge(target, ...source); + } + } + + static merge(target, ...source) { + return Merge(target, ...source); + } + + /* Like cleanupData() but does not mutate */ + static getCleanedTagsImmutable(data, options = {}) { + let tags = []; + + if (isPlainObject(data) && data.tags) { + if (typeof data.tags === "string") { + tags = (data.tags || "").split(","); + } else if (Array.isArray(data.tags)) { + tags = data.tags; + } else if (data.tags) { + throw new Error( + `String or Array expected for \`tags\`${options.file ? ` in ${options.isVirtualTemplate ? "virtual " : ""}template: ${options.file}` : ""}. Received: ${util.inspect(data.tags)}`, + ); + } + + // Deduplicate tags + // Coerce to string #3875 + return [...new Set(tags)].map((entry) => String(entry)); + } + + return tags; + } + + static cleanupData(data, options = {}) { + if (isPlainObject(data) && "tags" in data) { + data.tags = this.getCleanedTagsImmutable(data, options); + } + + return data; + } + + static getNormalizedExcludedCollections(data) { + let excludes = []; + let key = "eleventyExcludeFromCollections"; + + if (data?.[key] !== true) { + if (Array.isArray(data[key])) { + excludes = data[key]; + } else if (typeof data[key] === "string") { + excludes = (data[key] || "").split(","); + } + } + + return { + excludes, + excludeAll: data?.eleventyExcludeFromCollections === true, + }; + } + + static getIncludedCollectionNames(data) { + let tags = TemplateData.getCleanedTagsImmutable(data); + + let { excludes, excludeAll } = TemplateData.getNormalizedExcludedCollections(data); + if (excludeAll) { + return []; + } + + return ["all", ...tags].filter((tag) => !excludes.includes(tag)); + } + + static getIncludedTagNames(data) { + return this.getIncludedCollectionNames(data).filter((tagName) => tagName !== "all"); + } +} + +export default TemplateData; diff --git a/node_modules/@11ty/eleventy/src/Data/TemplateDataInitialGlobalData.js b/node_modules/@11ty/eleventy/src/Data/TemplateDataInitialGlobalData.js new file mode 100644 index 00000000..7e2a7ee2 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Data/TemplateDataInitialGlobalData.js @@ -0,0 +1,40 @@ +import lodash from "@11ty/lodash-custom"; + +import EleventyBaseError from "../Errors/EleventyBaseError.js"; + +const { set: lodashSet } = lodash; + +class TemplateDataConfigError extends EleventyBaseError {} + +class TemplateDataInitialGlobalData { + constructor(templateConfig) { + if (!templateConfig || templateConfig.constructor.name !== "TemplateConfig") { + throw new TemplateDataConfigError("Missing or invalid `templateConfig` (via Render plugin)."); + } + this.templateConfig = templateConfig; + this.config = this.templateConfig.getConfig(); + } + + async getData() { + let globalData = {}; + + // via eleventyConfig.addGlobalData + if (this.config.globalData) { + let keys = Object.keys(this.config.globalData); + for (let key of keys) { + let returnValue = this.config.globalData[key]; + + // This section is problematic when used with eleventyComputed #3389 + if (typeof returnValue === "function") { + returnValue = await returnValue(); + } + + lodashSet(globalData, key, returnValue); + } + } + + return globalData; + } +} + +export default TemplateDataInitialGlobalData; diff --git a/node_modules/@11ty/eleventy/src/Eleventy.js b/node_modules/@11ty/eleventy/src/Eleventy.js new file mode 100644 index 00000000..0568a3ea --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Eleventy.js @@ -0,0 +1,1565 @@ +import chalk from "kleur"; +import { performance } from "node:perf_hooks"; +import debugUtil from "debug"; +import { filesize } from "filesize"; +import path from "node:path"; + +/* Eleventy Deps */ +import { TemplatePath } from "@11ty/eleventy-utils"; +import BundlePlugin from "@11ty/eleventy-plugin-bundle"; + +import TemplateData from "./Data/TemplateData.js"; +import TemplateWriter from "./TemplateWriter.js"; +import EleventyExtensionMap from "./EleventyExtensionMap.js"; +import { EleventyErrorHandler } from "./Errors/EleventyErrorHandler.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import EleventyServe from "./EleventyServe.js"; +import EleventyWatch from "./EleventyWatch.js"; +import EleventyWatchTargets from "./EleventyWatchTargets.js"; +import EleventyFiles from "./EleventyFiles.js"; +import TemplatePassthroughManager from "./TemplatePassthroughManager.js"; +import TemplateConfig from "./TemplateConfig.js"; +import FileSystemSearch from "./FileSystemSearch.js"; +import TemplateEngineManager from "./Engines/TemplateEngineManager.js"; + +/* Utils */ +import ConsoleLogger from "./Util/ConsoleLogger.js"; +import PathPrefixer from "./Util/PathPrefixer.js"; +import ProjectDirectories from "./Util/ProjectDirectories.js"; +import PathNormalizer from "./Util/PathNormalizer.js"; +import { isGlobMatch } from "./Util/GlobMatcher.js"; +import simplePlural from "./Util/Pluralize.js"; +import checkPassthroughCopyBehavior from "./Util/PassthroughCopyBehaviorCheck.js"; +import eventBus from "./EventBus.js"; +import { + getEleventyPackageJson, + importJsonSync, + getWorkingProjectPackageJsonPath, +} from "./Util/ImportJsonSync.js"; +import { EleventyImport } from "./Util/Require.js"; +import ProjectTemplateFormats from "./Util/ProjectTemplateFormats.js"; +import { withResolvers } from "./Util/PromiseUtil.js"; + +/* Plugins */ +import RenderPlugin, * as RenderPluginExtras from "./Plugins/RenderPlugin.js"; +import I18nPlugin, * as I18nPluginExtras from "./Plugins/I18nPlugin.js"; +import HtmlBasePlugin, * as HtmlBasePluginExtras from "./Plugins/HtmlBasePlugin.js"; +import { TransformPlugin as InputPathToUrlTransformPlugin } from "./Plugins/InputPathToUrl.js"; +import { IdAttributePlugin } from "./Plugins/IdAttributePlugin.js"; +import FileSystemRemap from "./Util/GlobRemap.js"; + +const pkg = getEleventyPackageJson(); +const debug = debugUtil("Eleventy"); + +/** + * Eleventy’s programmatic API + * @module 11ty/eleventy/Eleventy + */ + +class Eleventy { + /** + * Userspace package.json file contents + * @type {object|undefined} + */ + #projectPackageJson; + /** @type {string} */ + #projectPackageJsonPath; + /** @type {ProjectTemplateFormats|undefined} */ + #templateFormats; + /** @type {ConsoleLogger|undefined} */ + #logger; + /** @type {ProjectDirectories|undefined} */ + #directories; + /** @type {boolean|undefined} */ + #verboseOverride; + /** @type {boolean} */ + #isVerboseMode = true; + /** @type {boolean|undefined} */ + #preInitVerbose; + /** @type {boolean} */ + #hasConfigInitialized = false; + /** @type {boolean} */ + #needsInit = true; + /** @type {Promise|undefined} */ + #initPromise; + /** @type {EleventyErrorHandler|undefined} */ + #errorHandler; + /** @type {Map} */ + #privateCaches = new Map(); + /** @type {boolean} */ + #isStopping = false; + /** @type {boolean|undefined} */ + #isEsm; + + /** + * @typedef {object} EleventyOptions + * @property {'cli'|'script'=} source + * @property {'build'|'serve'|'watch'=} runMode + * @property {boolean=} dryRun + * @property {string=} configPath + * @property {string=} pathPrefix + * @property {boolean=} quietMode + * @property {Function=} config + * @property {string=} inputDir + + * @param {string} [input] - Directory or filename for input/sources files. + * @param {string} [output] - Directory serving as the target for writing the output files. + * @param {EleventyOptions} [options={}] + * @param {TemplateConfig} [eleventyConfig] + */ + constructor(input, output, options = {}, eleventyConfig = null) { + /** + * @type {string|undefined} + * @description Holds the path to the input (might be a file or folder) + */ + this.rawInput = input || undefined; + + /** + * @type {string|undefined} + * @description holds the path to the output directory + */ + this.rawOutput = output || undefined; + + /** + * @type {module:11ty/eleventy/TemplateConfig} + * @description Override the config instance (for centralized config re-use) + */ + this.eleventyConfig = eleventyConfig; + + /** + * @type {EleventyOptions} + * @description Options object passed to the Eleventy constructor + * @default {} + */ + this.options = options; + + /** + * @type {'cli'|'script'} + * @description Called via CLI (`cli`) or Programmatically (`script`) + * @default "script" + */ + this.source = options.source || "script"; + + /** + * @type {string} + * @description One of build, serve, or watch + * @default "build" + */ + this.runMode = options.runMode || "build"; + + /** + * @type {boolean} + * @description Is Eleventy running in dry mode? + * @default false + */ + this.isDryRun = options.dryRun ?? false; + + /** + * @type {boolean} + * @description Is this an incremental build? (only operates on a subset of input files) + * @default false + */ + this.isIncremental = false; + + /** + * @type {string|undefined} + * @description If an incremental build, this is the file we’re operating on. + * @default null + */ + this.programmaticApiIncrementalFile = undefined; + + /** + * @type {boolean} + * @description Should we process files on first run? (The --ignore-initial feature) + * @default true + */ + this.isRunInitialBuild = true; + + /** + * @type {Number} + * @description Number of builds run on this instance. + * @default 0 + */ + this.buildCount = 0; + + /** + * @member {String} - Force ESM or CJS mode instead of detecting from package.json. Either cjs, esm, or auto. + * @default "auto" + */ + this.loader = this.options.loader ?? "auto"; + + /** + * @type {Number} + * @description The timestamp of Eleventy start. + */ + this.start = this.getNewTimestamp(); + } + + /** + * @type {string|undefined} + * @description An override of Eleventy's default config file paths + * @default undefined + */ + get configPath() { + return this.options.configPath; + } + + /** + * @type {string} + * @description The top level directory the site pretends to reside in + * @default "/" + */ + get pathPrefix() { + return this.options.pathPrefix || "/"; + } + + async initializeConfig(initOverrides) { + if (!this.eleventyConfig) { + this.eleventyConfig = new TemplateConfig(null, this.configPath); + } else if (this.configPath) { + await this.eleventyConfig.setProjectConfigPath(this.configPath); + } + + this.eleventyConfig.setRunMode(this.runMode); + this.eleventyConfig.setProjectUsingEsm(this.isEsm); + this.eleventyConfig.setLogger(this.logger); + this.eleventyConfig.setDirectories(this.directories); + this.eleventyConfig.setTemplateFormats(this.templateFormats); + + if (this.pathPrefix || this.pathPrefix === "") { + this.eleventyConfig.setPathPrefix(this.pathPrefix); + } + + // Debug mode should always run quiet (all output goes to debug logger) + if (process.env.DEBUG) { + this.#verboseOverride = false; + } else if (this.options.quietMode === true || this.options.quietMode === false) { + this.#verboseOverride = !this.options.quietMode; + } + + // Moved before config merges: https://github.com/11ty/eleventy/issues/3316 + if (this.#verboseOverride === true || this.#verboseOverride === false) { + this.eleventyConfig.userConfig._setQuietModeOverride(!this.#verboseOverride); + } + + this.eleventyConfig.userConfig.directories = this.directories; + + /* Programmatic API config */ + if (this.options.config && typeof this.options.config === "function") { + debug("Running options.config configuration callback (passed to Eleventy constructor)"); + // TODO use return object here? + await this.options.config(this.eleventyConfig.userConfig); + } + + /** + * @type {object} + * @description Initialize Eleventy environment variables + * @default null + */ + // this.runMode need to be set before this + this.env = this.getEnvironmentVariableValues(); + this.initializeEnvironmentVariables(this.env); + + // Async initialization of configuration + await this.eleventyConfig.init(initOverrides); + + /** + * @type {object} + * @description Initialize Eleventy’s configuration, including the user config file + */ + this.config = this.eleventyConfig.getConfig(); + + /** + * @type {object} + * @description Singleton BenchmarkManager instance + */ + this.bench = this.config.benchmarkManager; + + if (performance) { + debug("Eleventy warm up time: %o (ms)", performance.now()); + } + + // Careful to make sure the previous server closes on SIGINT, issue #3873 + if (!this.eleventyServe) { + /** @type {object} */ + this.eleventyServe = new EleventyServe(); + } + this.eleventyServe.eleventyConfig = this.eleventyConfig; + + /** @type {object} */ + this.watchManager = new EleventyWatch(); + + /** @type {object} */ + this.watchTargets = new EleventyWatchTargets(this.eleventyConfig); + this.watchTargets.addAndMakeGlob(this.config.additionalWatchTargets); + + /** @type {object} */ + this.fileSystemSearch = new FileSystemSearch(); + + this.#hasConfigInitialized = true; + + // after #hasConfigInitialized above + this.setIsVerbose(this.#preInitVerbose ?? !this.config.quietMode); + } + + getNewTimestamp() { + if (performance) { + return performance.now(); + } + return new Date().getTime(); + } + + /** @type {ProjectDirectories} */ + get directories() { + if (!this.#directories) { + this.#directories = new ProjectDirectories(); + this.#directories.setInput(this.rawInput, this.options.inputDir); + this.#directories.setOutput(this.rawOutput); + + if (this.source == "cli" && (this.rawInput !== undefined || this.rawOutput !== undefined)) { + this.#directories.freeze(); + } + } + + return this.#directories; + } + + /** @type {string} */ + get input() { + return this.directories.inputFile || this.directories.input || this.config.dir.input; + } + + /** @type {string} */ + get inputFile() { + return this.directories.inputFile; + } + + /** @type {string} */ + get inputDir() { + return this.directories.input; + } + + // Not used internally, removed in 3.0. + setInputDir() { + throw new Error( + "Eleventy->setInputDir was removed in 3.0. Use the inputDir option to the constructor", + ); + } + + /** @type {string} */ + get outputDir() { + return this.directories.output || this.config.dir.output; + } + + /** + * Updates the dry-run mode of Eleventy. + * + * @param {boolean} isDryRun - Shall Eleventy run in dry mode? + */ + setDryRun(isDryRun) { + this.isDryRun = !!isDryRun; + } + + /** + * Sets the incremental build mode. + * + * @param {boolean} isIncremental - Shall Eleventy run in incremental build mode and only write the files that trigger watch updates + */ + setIncrementalBuild(isIncremental) { + this.isIncremental = !!isIncremental; + + if (this.watchManager) { + this.watchManager.incremental = !!isIncremental; + } + if (this.writer) { + this.writer.setIncrementalBuild(this.isIncremental); + } + } + + /** + * Set whether or not to do an initial build + * + * @param {boolean} ignoreInitialBuild - Shall Eleventy ignore the default initial build before watching in watch/serve mode? + * @default true + */ + setIgnoreInitial(ignoreInitialBuild) { + this.isRunInitialBuild = !ignoreInitialBuild; + + if (this.writer) { + this.writer.setRunInitialBuild(this.isRunInitialBuild); + } + } + + /** + * Updates the path prefix used in the config. + * + * @param {string} pathPrefix - The new path prefix. + */ + setPathPrefix(pathPrefix) { + if (pathPrefix || pathPrefix === "") { + this.eleventyConfig.setPathPrefix(pathPrefix); + // TODO reset config + // this.config = this.eleventyConfig.getConfig(); + } + } + + /** + * Restarts Eleventy. + */ + async restart() { + debug("Restarting."); + this.start = this.getNewTimestamp(); + + this.extensionMap.reset(); + this.bench.reset(); + this.passthroughManager.reset(); + this.eleventyFiles.restart(); + } + + /** + * Logs some statistics after a complete run of Eleventy. + * + * @returns {string} ret - The log message. + */ + logFinished() { + if (!this.writer) { + throw new Error( + "Did you call Eleventy.init to create the TemplateWriter instance? Hint: you probably didn’t.", + ); + } + + let ret = []; + + let { + copyCount, + copySize, + skipCount, + writeCount, + // renderCount, // files that render (costly) but may not write to disk + } = this.writer.getMetadata(); + + let slashRet = []; + + if (copyCount) { + debug("Total passthrough copy aggregate size: %o", filesize(copySize)); + slashRet.push(`Copied ${chalk.bold(copyCount)}`); + } + + slashRet.push( + `Wrote ${chalk.bold(writeCount)} ${simplePlural(writeCount, "file", "files")}${ + skipCount ? ` (skipped ${skipCount})` : "" + }`, + ); + + // slashRet.push( + // `${renderCount} rendered` + // ) + + if (slashRet.length) { + ret.push(slashRet.join(" ")); + } + + let time = (this.getNewTimestamp() - this.start) / 1000; + ret.push( + `in ${chalk.bold(time.toFixed(2))} ${simplePlural(time.toFixed(2), "second", "seconds")}`, + ); + + // More than 1 second total, show estimate of per-template time + if (time >= 1 && writeCount > 1) { + ret.push(`(${((time * 1000) / writeCount).toFixed(1)}ms each, v${pkg.version})`); + } else { + ret.push(`(v${pkg.version})`); + } + + return ret.join(" "); + } + + #cache(key, inst) { + if (!("caches" in inst)) { + throw new Error("To use #cache you need a `caches` getter object"); + } + + // Restore from cache + if (this.#privateCaches.has(key)) { + let c = this.#privateCaches.get(key); + for (let cacheKey in c) { + inst[cacheKey] = c[cacheKey]; + } + } else { + // Set cache + let c = {}; + for (let cacheKey of inst.caches || []) { + c[cacheKey] = inst[cacheKey]; + } + this.#privateCaches.set(key, c); + } + } + + /** + * Starts Eleventy. + */ + async init(options = {}) { + let { viaConfigReset } = Object.assign({ viaConfigReset: false }, options); + if (!this.#hasConfigInitialized) { + await this.initializeConfig(); + } else { + // Note: Global event bus is different from user config event bus + this.config.events.reset(); + } + + await this.config.events.emit("eleventy.config", this.eleventyConfig); + + if (this.env) { + await this.config.events.emit("eleventy.env", this.env); + } + + let formats = this.templateFormats.getTemplateFormats(); + let engineManager = new TemplateEngineManager(this.eleventyConfig); + this.extensionMap = new EleventyExtensionMap(this.eleventyConfig); + this.extensionMap.setFormats(formats); + this.extensionMap.engineManager = engineManager; + await this.config.events.emit("eleventy.extensionmap", this.extensionMap); + + // eleventyServe is always available, even when not in --serve mode + // TODO directorynorm + this.eleventyServe.setOutputDir(this.outputDir); + + // TODO + // this.eleventyServe.setWatcherOptions(this.getChokidarConfig()); + + this.templateData = new TemplateData(this.eleventyConfig); + this.templateData.setProjectUsingEsm(this.isEsm); + this.templateData.extensionMap = this.extensionMap; + if (this.env) { + this.templateData.environmentVariables = this.env; + } + this.templateData.setFileSystemSearch(this.fileSystemSearch); + + this.passthroughManager = new TemplatePassthroughManager(this.eleventyConfig); + this.passthroughManager.setRunMode(this.runMode); + this.passthroughManager.setDryRun(this.isDryRun); + this.passthroughManager.extensionMap = this.extensionMap; + this.passthroughManager.setFileSystemSearch(this.fileSystemSearch); + + this.eleventyFiles = new EleventyFiles(formats, this.eleventyConfig); + this.eleventyFiles.setPassthroughManager(this.passthroughManager); + this.eleventyFiles.setFileSystemSearch(this.fileSystemSearch); + this.eleventyFiles.setRunMode(this.runMode); + this.eleventyFiles.extensionMap = this.extensionMap; + // This needs to be set before init or it’ll construct a new one + this.eleventyFiles.templateData = this.templateData; + this.eleventyFiles.init(); + + if (checkPassthroughCopyBehavior(this.config, this.runMode)) { + this.eleventyServe.watchPassthroughCopy( + this.eleventyFiles.getGlobWatcherFilesForPassthroughCopy(), + ); + } + + // Note these directories are all project root relative + this.config.events.emit("eleventy.directories", this.directories.getUserspaceInstance()); + + this.writer = new TemplateWriter(formats, this.templateData, this.eleventyConfig); + + if (!viaConfigReset) { + // set or restore cache + this.#cache("TemplateWriter", this.writer); + } + + this.writer.logger = this.logger; + this.writer.extensionMap = this.extensionMap; + this.writer.setEleventyFiles(this.eleventyFiles); + this.writer.setPassthroughManager(this.passthroughManager); + this.writer.setRunInitialBuild(this.isRunInitialBuild); + this.writer.setIncrementalBuild(this.isIncremental); + + let debugStr = `Directories: + Input: + Directory: ${this.directories.input} + File: ${this.directories.inputFile || false} + Glob: ${this.directories.inputGlob || false} + Data: ${this.directories.data} + Includes: ${this.directories.includes} + Layouts: ${this.directories.layouts || false} + Output: ${this.directories.output} +Template Formats: ${formats.join(",")} +Verbose Output: ${this.verboseMode}`; + debug(debugStr); + + this.writer.setVerboseOutput(this.verboseMode); + this.writer.setDryRun(this.isDryRun); + + this.#needsInit = false; + } + + // These are all set as initial global data under eleventy.env.* (see TemplateData->environmentVariables) + getEnvironmentVariableValues() { + let values = { + source: this.source, + runMode: this.runMode, + }; + + let configPath = this.eleventyConfig.getLocalProjectConfigFile(); + if (configPath) { + values.config = TemplatePath.absolutePath(configPath); + } + + // Fixed: instead of configuration directory, explicit root or working directory + values.root = TemplatePath.getWorkingDir(); + + values.source = this.source; + + // Backwards compatibility + Object.defineProperty(values, "isServerless", { + enumerable: false, + value: false, + }); + + return values; + } + + /** + * Set process.ENV variables for use in Eleventy projects + * + * @method + */ + initializeEnvironmentVariables(env) { + // Recognize that global data `eleventy.version` is coerced to remove prerelease tags + // and this is the raw version (3.0.0 versus 3.0.0-alpha.6). + // `eleventy.env.version` does not yet exist (unnecessary) + process.env.ELEVENTY_VERSION = Eleventy.getVersion(); + + process.env.ELEVENTY_ROOT = env.root; + debug("Setting process.env.ELEVENTY_ROOT: %o", env.root); + + process.env.ELEVENTY_SOURCE = env.source; + process.env.ELEVENTY_RUN_MODE = env.runMode; + } + + /** @param {boolean} value */ + set verboseMode(value) { + this.setIsVerbose(value); + } + + /** @type {boolean} */ + get verboseMode() { + return this.#isVerboseMode; + } + + /** @type {ConsoleLogger} */ + get logger() { + if (!this.#logger) { + this.#logger = new ConsoleLogger(); + this.#logger.isVerbose = this.verboseMode; + } + + return this.#logger; + } + + /** @param {ConsoleLogger} logger */ + set logger(logger) { + this.eleventyConfig.setLogger(logger); + this.#logger = logger; + } + + disableLogger() { + this.logger.overrideLogger(false); + } + + /** @type {EleventyErrorHandler} */ + get errorHandler() { + if (!this.#errorHandler) { + this.#errorHandler = new EleventyErrorHandler(); + this.#errorHandler.isVerbose = this.verboseMode; + this.#errorHandler.logger = this.logger; + } + + return this.#errorHandler; + } + + /** + * Updates the verbose mode of Eleventy. + * + * @method + * @param {boolean} isVerbose - Shall Eleventy run in verbose mode? + */ + setIsVerbose(isVerbose) { + if (!this.#hasConfigInitialized) { + this.#preInitVerbose = !!isVerbose; + return; + } + + // always defer to --quiet if override happened + isVerbose = this.#verboseOverride ?? !!isVerbose; + + this.#isVerboseMode = isVerbose; + + if (this.logger) { + this.logger.isVerbose = isVerbose; + } + + this.bench.setVerboseOutput(isVerbose); + + if (this.writer) { + this.writer.setVerboseOutput(isVerbose); + } + + if (this.errorHandler) { + this.errorHandler.isVerbose = isVerbose; + } + + // Set verbose mode in config file + this.eleventyConfig.verbose = isVerbose; + } + + get templateFormats() { + if (!this.#templateFormats) { + let tf = new ProjectTemplateFormats(); + this.#templateFormats = tf; + } + + return this.#templateFormats; + } + + /** + * Updates the template formats of Eleventy. + * + * @method + * @param {string} formats - The new template formats. + */ + setFormats(formats) { + this.templateFormats.setViaCommandLine(formats); + } + + /** + * Updates the run mode of Eleventy. + * + * @method + * @param {string} runMode - One of "build", "watch", or "serve" + */ + setRunMode(runMode) { + this.runMode = runMode; + } + + /** + * Set the file that needs to be rendered/compiled/written for an incremental build. + * This method is also wired up to the CLI --incremental=incrementalFile + * + * @method + * @param {string} incrementalFile - File path (added or modified in a project) + */ + setIncrementalFile(incrementalFile) { + if (incrementalFile) { + // This used to also setIgnoreInitial(true) but was changed in 3.0.0-alpha.14 + this.setIncrementalBuild(true); + + this.programmaticApiIncrementalFile = TemplatePath.addLeadingDotSlash(incrementalFile); + + this.eleventyConfig.setPreviousBuildModifiedFile(incrementalFile); + } + } + + unsetIncrementalFile() { + // only applies to initial build, no re-runs (--watch/--serve) + if (this.programmaticApiIncrementalFile) { + // this.setIgnoreInitial(false); + this.programmaticApiIncrementalFile = undefined; + } + + // reset back to false + this.setIgnoreInitial(false); + } + + /** + * Reads the version of Eleventy. + * + * @static + * @returns {string} - The version of Eleventy. + */ + static getVersion() { + return pkg.version; + } + + /** + * @deprecated since 1.0.1, use static Eleventy.getVersion() + */ + getVersion() { + return Eleventy.getVersion(); + } + + /** + * Shows a help message including usage. + * + * @static + * @returns {string} - The help message. + */ + static getHelp() { + return `Usage: eleventy + eleventy --input=. --output=./_site + eleventy --serve + +Arguments: + + --version + + --input=. + Input template files (default: \`.\`) + + --output=_site + Write HTML output to this folder (default: \`_site\`) + + --serve + Run web server on --port (default 8080) and watch them too + + --port + Run the --serve web server on this port (default 8080) + + --watch + Wait for files to change and automatically rewrite (no web server) + + --incremental + Only build the files that have changed. Best with watch/serve. + + --incremental=filename.md + Does not require watch/serve. Run an incremental build targeting a single file. + + --ignore-initial + Start without a build; build when files change. Works best with watch/serve/incremental. + + --formats=liquid,md + Allow only certain template types (default: \`*\`) + + --quiet + Don’t print all written files (off by default) + + --config=filename.js + Override the eleventy config file path (default: \`.eleventy.js\`) + + --pathprefix='/' + Change all url template filters to use this subdirectory. + + --dryrun + Don’t write any files. Useful in DEBUG mode, for example: \`DEBUG=Eleventy* npx @11ty/eleventy --dryrun\` + + --loader + Set to "esm" to force ESM mode, "cjs" to force CommonJS mode, or "auto" (default) to infer it from package.json. + + --to=json + --to=ndjson + Change the output to JSON or NDJSON (default: \`fs\`) + + --help`; + } + + /** + * @deprecated since 1.0.1, use static Eleventy.getHelp() + */ + getHelp() { + return Eleventy.getHelp(); + } + + /** + * Resets the config of Eleventy. + * + * @method + */ + resetConfig() { + delete this.eleventyConfig; + + // ensures `initializeConfig()` will run when `init()` is called next + this.#hasConfigInitialized = false; + } + + /** + * @param {string} changedFilePath - File that triggered a re-run (added or modified) + * @param {boolean} [isResetConfig] - are we doing a config reset + */ + async #addFileToWatchQueue(changedFilePath, isResetConfig) { + // Currently this is only for 11ty.js deps but should be extended with usesGraph + let usedByDependants = []; + if (this.watchTargets) { + usedByDependants = this.watchTargets.getDependantsOf( + TemplatePath.addLeadingDotSlash(changedFilePath), + ); + } + + let relevantLayouts = this.eleventyConfig.usesGraph.getLayoutsUsedBy(changedFilePath); + + // `eleventy.templateModified` is no longer used internally, remove in a future major version. + eventBus.emit("eleventy.templateModified", changedFilePath, { + usedByDependants, + relevantLayouts, + }); + + // These listeners are *global*, not cleared even on config reset + eventBus.emit("eleventy.resourceModified", changedFilePath, usedByDependants, { + viaConfigReset: isResetConfig, + relevantLayouts, + }); + + this.config.events.emit("eleventy#templateModified", changedFilePath); + + this.watchManager.addToPendingQueue(changedFilePath); + } + + shouldTriggerConfigReset(changedFiles) { + let configFilePaths = new Set(this.eleventyConfig.getLocalProjectConfigFiles()); + let resetConfigGlobs = EleventyWatchTargets.normalizeToGlobs( + Array.from(this.eleventyConfig.userConfig.watchTargetsConfigReset), + ); + for (let filePath of changedFiles) { + if (configFilePaths.has(filePath)) { + return true; + } + if (isGlobMatch(filePath, resetConfigGlobs)) { + return true; + } + } + + for (const configFilePath of configFilePaths) { + // Any dependencies of the config file changed + let configFileDependencies = new Set(this.watchTargets.getDependenciesOf(configFilePath)); + + for (let filePath of changedFiles) { + if (configFileDependencies.has(filePath)) { + return true; + } + } + } + + return false; + } + + // Checks the build queue to see if any configuration related files have changed + #shouldResetConfig(activeQueue = []) { + if (!activeQueue.length) { + return false; + } + + return this.shouldTriggerConfigReset( + activeQueue.map((path) => { + return PathNormalizer.normalizeSeperator(TemplatePath.addLeadingDotSlash(path)); + }), + ); + } + + async #watch(isResetConfig = false) { + if (this.watchManager.isBuildRunning()) { + return; + } + + this.watchManager.setBuildRunning(); + + let queue = this.watchManager.getActiveQueue(); + + await this.config.events.emit("beforeWatch", queue); + await this.config.events.emit("eleventy.beforeWatch", queue); + + // Clear `import` cache for all files that triggered the rebuild (sync event) + this.watchTargets.clearImportCacheFor(queue); + + // reset and reload global configuration + if (isResetConfig) { + // important: run this before config resets otherwise the handlers will disappear. + await this.config.events.emit("eleventy.reset"); + this.resetConfig(); + } + + await this.restart(); + await this.init({ viaConfigReset: isResetConfig }); + + try { + let [passthroughCopyResults, templateResults] = await this.write(); + + this.watchTargets.reset(); + + await this.#initWatchDependencies(); + + // Add new deps to chokidar + this.watcher.add(this.watchTargets.getNewTargetsSinceLastReset()); + + // Is a CSS input file and is not in the includes folder + // TODO check output path file extension of this template (not input path) + // TODO add additional API for this, maybe a config callback? + let onlyCssChanges = this.watchManager.hasAllQueueFiles((path) => { + return ( + path.endsWith(".css") && + // TODO how to make this work with relative includes? + !TemplatePath.startsWithSubPath(path, this.eleventyFiles.getIncludesDir()) + ); + }); + + let files = this.watchManager.getActiveQueue(); + + // Maps passthrough copy files to output URLs for CSS live reload + let stylesheetUrls = new Set(); + for (let entry of passthroughCopyResults) { + for (let filepath in entry.map) { + if ( + filepath.endsWith(".css") && + files.includes(TemplatePath.addLeadingDotSlash(filepath)) + ) { + stylesheetUrls.add( + "/" + TemplatePath.stripLeadingSubPath(entry.map[filepath], this.outputDir), + ); + } + } + } + + let normalizedPathPrefix = PathPrefixer.normalizePathPrefix(this.config.pathPrefix); + let matchingTemplates = templateResults + .flat() + .filter((entry) => Boolean(entry)) + .map((entry) => { + // only `url`, `inputPath`, and `content` are used: https://github.com/11ty/eleventy-dev-server/blob/1c658605f75224fdc76f68aebe7a412eeb4f1bc9/client/reload-client.js#L140 + entry.url = PathPrefixer.joinUrlParts(normalizedPathPrefix, entry.url); + delete entry.rawInput; // Issue #3481 + return entry; + }); + + await this.eleventyServe.reload({ + files, + subtype: onlyCssChanges ? "css" : undefined, + build: { + stylesheets: Array.from(stylesheetUrls), + templates: matchingTemplates, + }, + }); + } catch (error) { + this.eleventyServe.sendError({ + error, + }); + } + + this.watchManager.setBuildFinished(); + + let queueSize = this.watchManager.getPendingQueueSize(); + if (queueSize > 0) { + this.logger.log( + `You saved while Eleventy was running, let’s run again. (${queueSize} change${ + queueSize !== 1 ? "s" : "" + })`, + ); + await this.#watch(); + } else { + this.logger.log("Watching…"); + } + } + + /** + * @returns {module:11ty/eleventy/src/Benchmark/BenchmarkGroup~BenchmarkGroup} + */ + get watcherBench() { + return this.bench.get("Watcher"); + } + + /** + * Set up watchers and benchmarks. + * + * @async + * @method + */ + async initWatch() { + this.watchManager = new EleventyWatch(); + this.watchManager.incremental = this.isIncremental; + + if (this.projectPackageJsonPath) { + this.watchTargets.add([ + path.relative(TemplatePath.getWorkingDir(), this.projectPackageJsonPath), + ]); + } + this.watchTargets.add(this.eleventyFiles.getGlobWatcherFiles()); + this.watchTargets.add(this.eleventyFiles.getIgnoreFiles()); + + // Watch the local project config file + this.watchTargets.add(this.eleventyConfig.getLocalProjectConfigFiles()); + + // Template and Directory Data Files + this.watchTargets.add(await this.eleventyFiles.getGlobWatcherTemplateDataFiles()); + + let benchmark = this.watcherBench.get( + "Watching JavaScript Dependencies (disable with `eleventyConfig.setWatchJavaScriptDependencies(false)`)", + ); + benchmark.before(); + await this.#initWatchDependencies(); + benchmark.after(); + } + + // fetch from project’s package.json + get projectPackageJsonPath() { + if (this.#projectPackageJsonPath === undefined) { + this.#projectPackageJsonPath = getWorkingProjectPackageJsonPath() || false; + } + return this.#projectPackageJsonPath; + } + + get projectPackageJson() { + if (!this.#projectPackageJson) { + let p = this.projectPackageJsonPath; + this.#projectPackageJson = p ? importJsonSync(p) : {}; + } + return this.#projectPackageJson; + } + + get isEsm() { + if (this.#isEsm !== undefined) { + return this.#isEsm; + } + if (this.loader == "esm") { + this.#isEsm = true; + } else if (this.loader == "cjs") { + this.#isEsm = false; + } else if (this.loader == "auto") { + this.#isEsm = this.projectPackageJson?.type === "module"; + } else { + throw new Error("The 'loader' option must be one of 'esm', 'cjs', or 'auto'"); + } + return this.#isEsm; + } + + /** + * Starts watching dependencies. + */ + async #initWatchDependencies() { + if (!this.eleventyConfig.shouldSpiderJavaScriptDependencies()) { + return; + } + + // TODO use DirContains + let dataDir = TemplatePath.stripLeadingDotSlash(this.templateData.getDataDir()); + function filterOutGlobalDataFiles(path) { + return !dataDir || !TemplatePath.stripLeadingDotSlash(path).startsWith(dataDir); + } + + // Lazy resolve isEsm only for --watch + this.watchTargets.setProjectUsingEsm(this.isEsm); + + // Template files .11ty.js + let templateFiles = await this.eleventyFiles.getWatchPathCache(); + await this.watchTargets.addDependencies(templateFiles); + + // Config file dependencies + await this.watchTargets.addDependencies( + this.eleventyConfig.getLocalProjectConfigFiles(), + filterOutGlobalDataFiles, + ); + + // Deps from Global Data (that aren’t in the global data directory, everything is watched there) + let globalDataDeps = this.templateData.getWatchPathCache(); + await this.watchTargets.addDependencies(globalDataDeps, filterOutGlobalDataFiles); + + await this.watchTargets.addDependencies( + await this.eleventyFiles.getWatcherTemplateJavaScriptDataFiles(), + ); + } + + /** + * Returns all watched files. + * + * @async + * @method + * @returns {Promise} targets - The watched files. + */ + async getWatchedFiles() { + return this.watchTargets.getTargets(); + } + + getChokidarConfig() { + let ignores = this.eleventyFiles.getGlobWatcherIgnores(); + debug("Ignoring watcher changes to: %o", ignores); + + let configOptions = this.config.chokidarConfig; + + // can’t override these yet + // TODO maybe if array, merge the array? + delete configOptions.ignored; + + return Object.assign( + { + ignored: ignores, + ignoreInitial: true, + awaitWriteFinish: { + stabilityThreshold: 150, + pollInterval: 25, + }, + }, + configOptions, + ); + } + + /** + * Start the watching of files + * + * @async + * @method + */ + async watch() { + this.watcherBench.setMinimumThresholdMs(500); + this.watcherBench.reset(); + + // We use a string module name and try/catch here to hide this from the zisi and esbuild serverless bundlers + let chokidar; + // eslint-disable-next-line no-useless-catch + try { + let moduleName = "chokidar"; + let chokidarImport = await import(moduleName); + chokidar = chokidarImport.default; + } catch (e) { + throw e; + } + + // Note that watching indirectly depends on this for fetching dependencies from JS files + // See: TemplateWriter:pathCache and EleventyWatchTargets + await this.write(); + + let initWatchBench = this.watcherBench.get("Start up --watch"); + initWatchBench.before(); + + await this.initWatch(); + + // TODO improve unwatching if JS dependencies are removed (or files are deleted) + let rawFiles = await this.getWatchedFiles(); + debug("Watching for changes to: %o", rawFiles); + + let options = this.getChokidarConfig(); + + // Remap all paths to `cwd` if in play (Issue #3854) + let remapper = new FileSystemRemap(rawFiles); + let cwd = remapper.getCwd(); + + if (cwd) { + options.cwd = cwd; + + rawFiles = remapper.getInput().map((entry) => { + return TemplatePath.stripLeadingDotSlash(entry); + }); + + options.ignored = remapper.getRemapped(options.ignored || []).map((entry) => { + return TemplatePath.stripLeadingDotSlash(entry); + }); + } + + let watcher = chokidar.watch(rawFiles, options); + + initWatchBench.after(); + + this.watcherBench.finish("Watch"); + + this.logger.forceLog("Watching…"); + + this.watcher = watcher; + + let watchDelay; + let watchRun = async (path) => { + path = TemplatePath.normalize(path); + try { + let isResetConfig = this.#shouldResetConfig([path]); + this.#addFileToWatchQueue(path, isResetConfig); + + clearTimeout(watchDelay); + + let { promise, resolve, reject } = withResolvers(); + + watchDelay = setTimeout(async () => { + this.#watch(isResetConfig).then(resolve, reject); + }, this.config.watchThrottleWaitTime); + + await promise; + } catch (e) { + if (e instanceof EleventyBaseError) { + this.errorHandler.error(e, "Eleventy watch error"); + this.watchManager.setBuildFinished(); + } else { + this.errorHandler.fatal(e, "Eleventy fatal watch error"); + await this.stopWatch(); + } + } + + this.config.events.emit("eleventy.afterwatch"); + }; + + watcher.on("change", async (path) => { + // Emulated passthrough copy logs from the server + if (!this.eleventyServe.isEmulatedPassthroughCopyMatch(path)) { + this.logger.forceLog(`File changed: ${TemplatePath.standardizeFilePath(path)}`); + } + + await watchRun(path); + }); + + watcher.on("add", async (path) => { + // Emulated passthrough copy logs from the server + if (!this.eleventyServe.isEmulatedPassthroughCopyMatch(path)) { + this.logger.forceLog(`File added: ${TemplatePath.standardizeFilePath(path)}`); + } + + this.fileSystemSearch.add(path); + await watchRun(path); + }); + + watcher.on("unlink", (path) => { + this.logger.forceLog(`File deleted: ${TemplatePath.standardizeFilePath(path)}`); + this.fileSystemSearch.delete(path); + }); + + // wait for chokidar to be ready. + await new Promise((resolve) => { + watcher.on("ready", () => resolve()); + }); + + // Returns for testability + return watchRun; + } + + async stopWatch() { + // Prevent multiple invocations. + if (this.#isStopping) { + return this.#isStopping; + } + + debug("Cleaning up chokidar and server instances, if they exist."); + this.#isStopping = Promise.all([this.eleventyServe.close(), this.watcher?.close()]).then(() => { + this.#isStopping = false; + }); + + return this.#isStopping; + } + + /** + * Serve Eleventy on this port. + * + * @param {Number} port - The HTTP port to serve Eleventy from. + */ + async serve(port) { + // Port is optional and in this case likely via --port on the command line + // May defer to configuration API options `port` property + return this.eleventyServe.serve(port); + } + + /** + * Writes templates to the file system. + * + * @async + * @method + * @returns {Promise<{Array}>} + */ + async write() { + return this.executeBuild("fs"); + } + + /** + * Renders templates to a JSON object. + * + * @async + * @method + * @returns {Promise<{Array}>} + */ + async toJSON() { + return this.executeBuild("json"); + } + + /** + * Returns a stream of new line delimited (NDJSON) objects + * + * @async + * @method + * @returns {Promise<{ReadableStream}>} + */ + async toNDJSON() { + return this.executeBuild("ndjson"); + } + + /** + * tbd. + * + * @async + * @method + * @returns {Promise<{Array,ReadableStream}>} ret - tbd. + */ + async executeBuild(to = "fs") { + if (this.#needsInit) { + if (!this.#initPromise) { + this.#initPromise = this.init(); + } + await this.#initPromise.then(() => { + // #needsInit also set to false at the end of `init()` + this.#needsInit = false; + this.#initPromise = undefined; + }); + } + + if (!this.writer) { + throw new Error( + "Internal error: Eleventy didn’t run init() properly and wasn’t able to create a TemplateWriter.", + ); + } + + let incrementalFile = + this.programmaticApiIncrementalFile || this.watchManager?.getIncrementalFile(); + if (incrementalFile) { + this.writer.setIncrementalFile(incrementalFile); + } + + let returnObj; + let hasError = false; + + try { + let directories = this.directories.getUserspaceInstance(); + let eventsArg = { + directories, + + // v3.0.0-alpha.6, changed to use `directories` instead (this was only used by serverless plugin) + inputDir: directories.input, + + // Deprecated (not normalized) use `directories` instead. + dir: this.config.dir, + + runMode: this.runMode, + outputMode: to, + incremental: this.isIncremental, + }; + + await this.config.events.emit("beforeBuild", eventsArg); + await this.config.events.emit("eleventy.before", eventsArg); + + let promise; + if (to === "fs") { + promise = this.writer.write(); + } else if (to === "json") { + promise = this.writer.getJSON("json"); + } else if (to === "ndjson") { + promise = this.writer.getJSON("ndjson"); + } else { + throw new Error( + `Invalid argument for \`Eleventy->executeBuild(${to})\`, expected "json", "ndjson", or "fs".`, + ); + } + + let resolved = await promise; + + // Passing the processed output to the eleventy.after event (2.0+) + eventsArg.results = resolved.templates; + + if (to === "ndjson") { + // return a stream + // TODO this outputs all ndjson rows after all the templates have been written to the stream + returnObj = this.logger.closeStream(); + } else if (to === "json") { + // Backwards compat + returnObj = resolved.templates; + } else { + // Backwards compat + returnObj = [resolved.passthroughCopy, resolved.templates]; + } + + this.unsetIncrementalFile(); + this.writer.resetIncrementalFile(); + + eventsArg.uses = this.eleventyConfig.usesGraph.map; + await this.config.events.emit("afterBuild", eventsArg); + await this.config.events.emit("eleventy.after", eventsArg); + + this.buildCount++; + } catch (error) { + hasError = true; + + // Issue #2405: Don’t change the exitCode for programmatic scripts + let errorSeverity = this.source === "script" ? "error" : "fatal"; + this.errorHandler.once(errorSeverity, error, "Problem writing Eleventy templates"); + + // TODO ndjson should stream the error but https://github.com/11ty/eleventy/issues/3382 + throw error; + } finally { + this.bench.finish(); + + if (to === "fs") { + this.logger.logWithOptions({ + message: this.logFinished(), + color: hasError ? "red" : "green", + force: true, + }); + } + + debug("Finished."); + + debug(` +Have a suggestion/feature request/feedback? Feeling frustrated? I want to hear it! +Open an issue: https://github.com/11ty/eleventy/issues/new`); + } + + return returnObj; + } +} + +export default Eleventy; + +// extend for exporting to CJS +Object.assign(RenderPlugin, RenderPluginExtras); +Object.assign(I18nPlugin, I18nPluginExtras); +Object.assign(HtmlBasePlugin, HtmlBasePluginExtras); + +// Removed plugins + +const EleventyServerlessBundlerPlugin = function () { + throw new Error( + "Following feedback from our Community Survey, low interest in this plugin prompted its removal from Eleventy core in 3.0 as we refocus on static sites. Learn more: https://v3.11ty.dev/docs/plugins/serverless/", + ); +}; + +const EleventyEdgePlugin = function () { + throw new Error( + "Following feedback from our Community Survey, low interest in this plugin prompted its removal from Eleventy core in 3.0 as we refocus on static sites. Learn more: https://v3.11ty.dev/docs/plugins/edge/", + ); +}; + +export { + Eleventy, + EleventyImport as ImportFile, + + // Error messages for removed plugins + EleventyServerlessBundlerPlugin as EleventyServerless, + EleventyServerlessBundlerPlugin, + EleventyEdgePlugin, + + /** + * @type {module:11ty/eleventy/Plugins/RenderPlugin} + */ + RenderPlugin as EleventyRenderPlugin, // legacy name + /** + * @type {module:11ty/eleventy/Plugins/RenderPlugin} + */ + RenderPlugin, + + /** + * @type {module:11ty/eleventy/Plugins/I18nPlugin} + */ + I18nPlugin as EleventyI18nPlugin, // legacy name + /** + * @type {module:11ty/eleventy/Plugins/I18nPlugin} + */ + I18nPlugin, + + /** + * @type {module:11ty/eleventy/Plugins/HtmlBasePlugin} + */ + HtmlBasePlugin as EleventyHtmlBasePlugin, // legacy name + /** + * @type {module:11ty/eleventy/Plugins/HtmlBasePlugin} + */ + HtmlBasePlugin, + + /** + * @type {module:11ty/eleventy/Plugins/InputPathToUrlTransformPlugin} + */ + InputPathToUrlTransformPlugin, + + /** + * @type {module:11ty/eleventy-plugin-bundle} + */ + BundlePlugin, + + /** + * @type {module:11ty/eleventy/Plugins/IdAttributePlugin} + */ + IdAttributePlugin, +}; diff --git a/node_modules/@11ty/eleventy/src/EleventyCommonJs.cjs b/node_modules/@11ty/eleventy/src/EleventyCommonJs.cjs new file mode 100644 index 00000000..52272656 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EleventyCommonJs.cjs @@ -0,0 +1,43 @@ +function canRequireModules() { + // via --experimental-require-module or newer than Node 22 support when this flag is no longer necessary + try { + require("./Util/Objects/SampleModule.mjs"); + return true; + } catch(e) { + if(e.code === "ERR_REQUIRE_ESM") { + return false; + } + + // Rethrow if not an ESM require error. + throw e; + } +} + +if(!canRequireModules()) { + let error = new Error(`\`require("@11ty/eleventy")\` is incompatible with Eleventy v3 and this version of Node. You have a few options: + 1. (Easiest) Change the \`require\` to use a dynamic import inside of an asynchronous CommonJS configuration + callback, for example: + + module.exports = async function { + const {EleventyRenderPlugin, EleventyI18nPlugin, EleventyHtmlBasePlugin} = await import("@11ty/eleventy"); + } + + 2. (Easier) Update the JavaScript syntax in your configuration file from CommonJS to ESM (change \`require\` + to use \`import\` and rename the file to have an \`.mjs\` file extension). + + 3. (More work) Change your project to use ESM-first by adding \`"type": "module"\` to your package.json. Any + \`.js\` will need to be ported to use ESM syntax (or renamed to \`.cjs\`.) + + 4. Upgrade your Node version (at time of writing, v22.12 or newer) to enable this behavior. If you use a version + of Node older than v22.12, try the --experimental-require-module command line flag in Node. Read more: + https://nodejs.org/api/modules.html#loading-ecmascript-modules-using-require`); + + error.skipOriginalStack = true; + + throw error; +} + +// If we made it here require(ESM) works fine (via --experimental-require-module or newer Node.js defaults) +let mod = require("./Eleventy.js"); + +module.exports = mod; diff --git a/node_modules/@11ty/eleventy/src/EleventyExtensionMap.js b/node_modules/@11ty/eleventy/src/EleventyExtensionMap.js new file mode 100644 index 00000000..8f426404 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EleventyExtensionMap.js @@ -0,0 +1,284 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; + +class EleventyExtensionMap { + #engineManager; + + constructor(config) { + this.setTemplateConfig(config); + this._spiderJsDepsCache = {}; + + /** @type {Array} */ + this.validTemplateLanguageKeys; + } + + setFormats(formatKeys = []) { + // raw + this.formatKeys = formatKeys; + + this.unfilteredFormatKeys = formatKeys.map(function (key) { + return key.trim().toLowerCase(); + }); + + this.validTemplateLanguageKeys = this.unfilteredFormatKeys.filter((key) => + this.hasExtension(key), + ); + + this.passthroughCopyKeys = this.unfilteredFormatKeys.filter((key) => !this.hasExtension(key)); + } + + setTemplateConfig(config) { + if (!config || config.constructor.name !== "TemplateConfig") { + throw new Error("Internal error: Missing or invalid `config` argument."); + } + + this.templateConfig = config; + } + + get config() { + return this.templateConfig.getConfig(); + } + + get engineManager() { + if (!this.#engineManager) { + throw new Error("Internal error: Missing `#engineManager` in EleventyExtensionMap."); + } + + return this.#engineManager; + } + + set engineManager(mgr) { + this.#engineManager = mgr; + } + + reset() { + this.#engineManager.reset(); + } + + /* Used for layout path resolution */ + getFileList(path, dir) { + if (!path) { + return []; + } + + let files = []; + this.validTemplateLanguageKeys.forEach((key) => { + this.getExtensionsFromKey(key).forEach(function (extension) { + files.push((dir ? dir + "/" : "") + path + "." + extension); + }); + }); + + return files; + } + + // Warning: this would false positive on an include, but is only used + // on paths found from the file system glob search. + // TODO: Method name might just need to be renamed to something more accurate. + isFullTemplateFilePath(path) { + for (let extension of this.validTemplateLanguageKeys) { + if (path.endsWith(`.${extension}`)) { + return true; + } + } + return false; + } + + getCustomExtensionEntry(extension) { + if (!this.config.extensionMap) { + return; + } + + for (let entry of this.config.extensionMap) { + if (entry.extension === extension) { + return entry; + } + } + } + + getValidExtensionsForPath(path) { + let extensions = new Set(); + for (let extension in this.extensionToKeyMap) { + if (path.endsWith(`.${extension}`)) { + extensions.add(extension); + } + } + + // if multiple extensions are valid, sort from longest to shortest + // e.g. .11ty.js and .js + let sorted = Array.from(extensions) + .filter((extension) => this.validTemplateLanguageKeys.includes(extension)) + .sort((a, b) => b.length - a.length); + + return sorted; + } + + async shouldSpiderJavaScriptDependencies(path) { + let extensions = this.getValidExtensionsForPath(path); + for (let extension of extensions) { + if (extension in this._spiderJsDepsCache) { + return this._spiderJsDepsCache[extension]; + } + + let cls = await this.engineManager.getEngineClassByExtension(extension); + if (cls) { + let entry = this.getCustomExtensionEntry(extension); + let shouldSpider = cls.shouldSpiderJavaScriptDependencies(entry); + this._spiderJsDepsCache[extension] = shouldSpider; + return shouldSpider; + } + } + + return false; + } + + getPassthroughCopyGlobs(inputDir) { + return this._getGlobs(this.passthroughCopyKeys, inputDir); + } + + getValidGlobs(inputDir) { + return this._getGlobs(this.validTemplateLanguageKeys, inputDir); + } + + getGlobs(inputDir) { + return this._getGlobs(this.unfilteredFormatKeys, inputDir); + } + + _getGlobs(formatKeys, inputDir = "") { + let extensions = new Set(); + + for (let key of formatKeys) { + if (this.hasExtension(key)) { + for (let extension of this.getExtensionsFromKey(key)) { + extensions.add(extension); + } + } else { + extensions.add(key); + } + } + + let dir = TemplatePath.convertToRecursiveGlobSync(inputDir); + if (extensions.size === 1) { + return [`${dir}/*.${Array.from(extensions)[0]}`]; + } else if (extensions.size > 1) { + return [ + // extra curly brackets /*.{cjs,txt} + `${dir}/*.{${Array.from(extensions).join(",")}}`, + ]; + } + + return []; + } + + hasExtension(key) { + for (let extension in this.extensionToKeyMap) { + if ( + this.extensionToKeyMap[extension].key === key || + this.extensionToKeyMap[extension].aliasKey === key + ) { + return true; + } + } + + return false; + } + + getExtensionsFromKey(key) { + let extensions = new Set(); + for (let extension in this.extensionToKeyMap) { + if (this.extensionToKeyMap[extension].aliasKey) { + // only add aliased extension if explicitly referenced in formats + // overrides will not have an aliasKey (md => md) + if (this.extensionToKeyMap[extension].aliasKey === key) { + extensions.add(extension); + } + } else if (this.extensionToKeyMap[extension].key === key) { + extensions.add(extension); + } + } + + return Array.from(extensions); + } + + // Only `addExtension` configuration API extensions + getExtensionEntriesFromKey(key) { + let entries = new Set(); + if ("extensionMap" in this.config) { + for (let entry of this.config.extensionMap) { + if (entry.key === key) { + entries.add(entry); + } + } + } + return Array.from(entries); + } + + // Determines whether a path is a passthrough copy file or a template (via TemplateWriter) + hasEngine(pathOrKey) { + return !!this.getKey(pathOrKey); + } + + getKey(pathOrKey) { + pathOrKey = (pathOrKey || "").toLowerCase(); + for (let extension in this.extensionToKeyMap) { + if (pathOrKey === extension || pathOrKey.endsWith("." + extension)) { + let key = + this.extensionToKeyMap[extension].aliasKey || this.extensionToKeyMap[extension].key; + // must be a valid format key passed (e.g. via --formats) + if (this.validTemplateLanguageKeys.includes(key)) { + return key; + } + } + } + } + + getExtensionEntry(pathOrKey) { + pathOrKey = (pathOrKey || "").toLowerCase(); + for (let extension in this.extensionToKeyMap) { + if (pathOrKey === extension || pathOrKey.endsWith("." + extension)) { + return this.extensionToKeyMap[extension]; + } + } + } + + removeTemplateExtension(path) { + for (let extension in this.extensionToKeyMap) { + if (path === extension || path.endsWith("." + extension)) { + return path.slice( + 0, + path.length - 1 - extension.length < 0 ? 0 : path.length - 1 - extension.length, + ); + } + } + return path; + } + + // keys are file extensions + // values are template language keys + get extensionToKeyMap() { + if (!this._extensionToKeyMap) { + this._extensionToKeyMap = { + md: { key: "md", extension: "md" }, + html: { key: "html", extension: "html" }, + njk: { key: "njk", extension: "njk" }, + liquid: { key: "liquid", extension: "liquid" }, + "11ty.js": { key: "11ty.js", extension: "11ty.js" }, + "11ty.cjs": { key: "11ty.js", extension: "11ty.cjs" }, + "11ty.mjs": { key: "11ty.js", extension: "11ty.mjs" }, + }; + + if ("extensionMap" in this.config) { + for (let entry of this.config.extensionMap) { + // extension and key are only different when aliasing. + this._extensionToKeyMap[entry.extension] = entry; + } + } + } + + return this._extensionToKeyMap; + } + + getReadableFileExtensions() { + return Object.keys(this.extensionToKeyMap).join(" "); + } +} + +export default EleventyExtensionMap; diff --git a/node_modules/@11ty/eleventy/src/EleventyFiles.js b/node_modules/@11ty/eleventy/src/EleventyFiles.js new file mode 100644 index 00000000..7ec6379e --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EleventyFiles.js @@ -0,0 +1,521 @@ +import fs from "node:fs"; + +import { TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import DirContains from "./Util/DirContains.js"; +import TemplateData from "./Data/TemplateData.js"; +import TemplateGlob from "./TemplateGlob.js"; +import checkPassthroughCopyBehavior from "./Util/PassthroughCopyBehaviorCheck.js"; + +const debug = debugUtil("Eleventy:EleventyFiles"); + +class EleventyFiles { + #extensionMap; + #watcherGlobs; + + constructor(formats, templateConfig) { + if (!templateConfig) { + throw new Error("Internal error: Missing `templateConfig`` argument."); + } + + this.templateConfig = templateConfig; + this.config = templateConfig.getConfig(); + this.aggregateBench = this.config.benchmarkManager.get("Aggregate"); + + this.formats = formats; + this.eleventyIgnoreContent = false; + } + + get dirs() { + return this.templateConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + get outputDir() { + return this.dirs.output; + } + + get includesDir() { + return this.dirs.includes; + } + + get layoutsDir() { + return this.dirs.layouts; + } + + get dataDir() { + return this.dirs.data; + } + + // Backwards compat + getDataDir() { + return this.dataDir; + } + + setFileSystemSearch(fileSystemSearch) { + this.fileSystemSearch = fileSystemSearch; + } + + init() { + if (this.dirs.inputFile || this.dirs.inputGlob) { + this.templateGlobs = TemplateGlob.map([this.dirs.inputFile || this.dirs.inputGlob]); + } else { + // Input is a directory + this.templateGlobs = this.extensionMap.getGlobs(this.inputDir); + } + + this.setupGlobs(); + } + + #getWatcherGlobs() { + if (!this.#watcherGlobs) { + let globs; + // Input is a file + if (this.inputFile) { + globs = this.templateGlobs; + } else { + // input is a directory + globs = this.extensionMap.getValidGlobs(this.inputDir); + } + this.#watcherGlobs = globs; + } + + return this.#watcherGlobs; + } + + get passthroughGlobs() { + let paths = new Set(); + // stuff added in addPassthroughCopy() + for (let path of this.passthroughManager.getConfigPathGlobs()) { + paths.add(path); + } + // non-template language extensions + for (let path of this.extensionMap.getPassthroughCopyGlobs(this.inputDir)) { + paths.add(path); + } + return Array.from(paths); + } + + restart() { + this.setupGlobs(); + this._glob = null; + } + + /* For testing */ + _setConfig(config) { + if (!config.ignores) { + config.ignores = new Set(); + config.ignores.add("**/node_modules/**"); + } + + this.config = config; + + this.init(); + } + + /* Set command root for local project paths */ + // This is only used by tests + _setLocalPathRoot(dir) { + this.localPathRoot = dir; + } + + set extensionMap(extensionMap) { + this.#extensionMap = extensionMap; + } + + get extensionMap() { + // for tests + if (!this.#extensionMap) { + throw new Error("Internal error: missing `extensionMap` in EleventyFiles."); + } + return this.#extensionMap; + } + + setRunMode(runMode) { + this.runMode = runMode; + } + + setPassthroughManager(mgr) { + this.passthroughManager = mgr; + } + + set templateData(templateData) { + this._templateData = templateData; + } + + get templateData() { + if (!this._templateData) { + this._templateData = new TemplateData(this.templateConfig); + } + + return this._templateData; + } + + setupGlobs() { + this.fileIgnores = this.getIgnores(); + this.extraIgnores = this.getIncludesAndDataDirs(); + this.uniqueIgnores = this.getIgnoreGlobs(); + + // Conditional added for tests that don’t have a config + if (this.config?.events) { + this.config.events.emit("eleventy.ignores", this.uniqueIgnores); + } + + this.normalizedTemplateGlobs = this.templateGlobs; + } + + normalizeIgnoreEntry(entry) { + if (!entry.startsWith("**/")) { + return TemplateGlob.normalizePath(this.localPathRoot || ".", entry); + } + return entry; + } + + getIgnoreGlobs() { + let uniqueIgnores = new Set(); + for (let ignore of this.fileIgnores) { + uniqueIgnores.add(ignore); + } + for (let ignore of this.extraIgnores) { + uniqueIgnores.add(ignore); + } + + // Placing the config ignores last here is important to the tests + for (let ignore of this.config.ignores) { + uniqueIgnores.add(this.normalizeIgnoreEntry(ignore)); + } + + return Array.from(uniqueIgnores); + } + + static getFileIgnores(ignoreFiles) { + if (!Array.isArray(ignoreFiles)) { + ignoreFiles = [ignoreFiles]; + } + + let ignores = []; + for (let ignorePath of ignoreFiles) { + ignorePath = TemplatePath.normalize(ignorePath); + + let dir = TemplatePath.getDirFromFilePath(ignorePath); + + if (fs.existsSync(ignorePath) && fs.statSync(ignorePath).size > 0) { + let ignoreContent = fs.readFileSync(ignorePath, "utf8"); + + ignores = ignores.concat(EleventyFiles.normalizeIgnoreContent(dir, ignoreContent)); + } + } + + ignores.forEach((path) => debug(`${ignoreFiles} ignoring: ${path}`)); + + return ignores; + } + + static normalizeIgnoreContent(dir, ignoreContent) { + let ignores = []; + + if (ignoreContent) { + ignores = ignoreContent + .split("\n") + .map((line) => { + return line.trim(); + }) + .filter((line) => { + if (line.charAt(0) === "!") { + debug( + ">>> When processing .gitignore/.eleventyignore, Eleventy does not currently support negative patterns but encountered one:", + ); + debug(">>>", line); + debug("Follow along at https://github.com/11ty/eleventy/issues/693 to track support."); + } + + // empty lines or comments get filtered out + return line.length > 0 && line.charAt(0) !== "#" && line.charAt(0) !== "!"; + }) + .map((line) => { + let path = TemplateGlob.normalizePath(dir, "/", line); + path = TemplatePath.addLeadingDotSlash(TemplatePath.relativePath(path)); + + try { + // Note these folders must exist to get /** suffix + let stat = fs.statSync(path); + if (stat.isDirectory()) { + return path + "/**"; + } + return path; + } catch (e) { + return path; + } + }); + } + + return ignores; + } + + /* Tests only */ + _setEleventyIgnoreContent(content) { + this.eleventyIgnoreContent = content; + } + + getIgnores() { + let files = new Set(); + + for (let ignore of EleventyFiles.getFileIgnores(this.getIgnoreFiles())) { + files.add(ignore); + } + + // testing API + if (this.eleventyIgnoreContent !== false) { + files.add(this.eleventyIgnoreContent); + } + + // Make sure output dir isn’t in the input dir (or it will ignore all input!) + // input: . and output: . (skip ignore) + // input: ./content and output . (skip ignore) + // input: . and output: ./_site (add ignore) + let outputContainsInputDir = DirContains(this.outputDir, this.inputDir); + if (!outputContainsInputDir) { + // both are already normalized in 3.0 + files.add(TemplateGlob.map(this.outputDir + "/**")); + } + + return Array.from(files); + } + + getIgnoreFiles() { + let ignoreFiles = new Set(); + let rootDirectory = this.localPathRoot || "."; + + if (this.config.useGitIgnore) { + ignoreFiles.add(TemplatePath.join(rootDirectory, ".gitignore")); + } + + if (this.eleventyIgnoreContent === false) { + let absoluteInputDir = TemplatePath.absolutePath(this.inputDir); + ignoreFiles.add(TemplatePath.join(rootDirectory, ".eleventyignore")); + + if (rootDirectory !== absoluteInputDir) { + ignoreFiles.add(TemplatePath.join(this.inputDir, ".eleventyignore")); + } + } + + return Array.from(ignoreFiles); + } + + /* Backwards compat */ + getIncludesDir() { + return this.includesDir; + } + + /* Backwards compat */ + getLayoutsDir() { + return this.layoutsDir; + } + + getFileGlobs() { + return this.normalizedTemplateGlobs; + } + + getRawFiles() { + return this.templateGlobs; + } + + async getWatchPathCache() { + // Issue #1325: make sure passthrough copy files are not included here + if (!this.pathCache) { + throw new Error("Watching requires `.getFiles()` to be called first in EleventyFiles"); + } + + let ret = []; + // Filter out the passthrough copy paths. + for (let path of this.pathCache) { + if ( + this.extensionMap.isFullTemplateFilePath(path) && + (await this.extensionMap.shouldSpiderJavaScriptDependencies(path)) + ) { + ret.push(path); + } + } + return ret; + } + + _globSearch() { + let globs = this.getFileGlobs(); + + // returns a promise + debug("Searching for: %o", globs); + return this.fileSystemSearch.search("templates", globs, { + ignore: this.uniqueIgnores, + }); + } + + getPathsWithVirtualTemplates(paths) { + // Support for virtual templates added in 3.0 + if (this.config.virtualTemplates && isPlainObject(this.config.virtualTemplates)) { + let virtualTemplates = Object.keys(this.config.virtualTemplates) + .filter((path) => { + // Filter out includes/layouts + return this.dirs.isTemplateFile(path); + }) + .map((path) => { + let fullVirtualPath = this.dirs.getInputPath(path); + if (!this.extensionMap.getKey(fullVirtualPath)) { + this.templateConfig.logger.warn( + `The virtual template at ${fullVirtualPath} is using a template format that’s not valid for your project. Your project is using: "${this.formats}". Read more about formats: https://v3.11ty.dev/docs/config/#template-formats`, + ); + } + return fullVirtualPath; + }); + + paths = paths.concat(virtualTemplates); + + // Virtual templates can not live at the same place as files on the file system! + if (paths.length !== new Set(paths).size) { + let conflicts = {}; + for (let path of paths) { + if (conflicts[path]) { + throw new Error( + `A virtual template had the same path as a file on the file system: "${path}"`, + ); + } + + conflicts[path] = true; + } + } + } + + return paths; + } + + async getFiles() { + let bench = this.aggregateBench.get("Searching the file system (templates)"); + bench.before(); + let globResults = await this._globSearch(); + let paths = TemplatePath.addLeadingDotSlashArray(globResults); + bench.after(); + + // Note 2.0.0-canary.19 removed a `filter` option for custom template syntax here that was unpublished and unused. + + paths = this.getPathsWithVirtualTemplates(paths); + + this.pathCache = paths; + return paths; + } + + getFileShape(paths, filePath) { + if (!filePath) { + return; + } + if (this.isPassthroughCopyFile(paths, filePath)) { + return "copy"; + } + if (this.isFullTemplateFile(paths, filePath)) { + return "template"; + } + // include/layout/unknown + } + + isPassthroughCopyFile(paths, filePath) { + return this.passthroughManager.isPassthroughCopyFile(paths, filePath); + } + + // Assumption here that filePath is not a passthrough copy file + isFullTemplateFile(paths, filePath) { + if (!filePath) { + return false; + } + + for (let path of paths) { + if (path === filePath) { + return true; + } + } + + return false; + } + + /* For `eleventy --watch` */ + getGlobWatcherFiles() { + // TODO improvement: tie the includes and data to specific file extensions (currently using `**`) + let directoryGlobs = this.getIncludesAndDataDirs(); + + let globs = this.#getWatcherGlobs(); + + if (checkPassthroughCopyBehavior(this.config, this.runMode)) { + return globs.concat(directoryGlobs); + } + + // Revert to old passthroughcopy copy files behavior + return globs.concat(this.passthroughGlobs).concat(directoryGlobs); + } + + /* For `eleventy --watch` */ + getGlobWatcherFilesForPassthroughCopy() { + return this.passthroughGlobs; + } + + /* For `eleventy --watch` */ + async getGlobWatcherTemplateDataFiles() { + let templateData = this.templateData; + return await templateData.getTemplateDataFileGlob(); + } + + /* For `eleventy --watch` */ + // TODO this isn’t great but reduces complexity avoiding using TemplateData:getLocalDataPaths for each template in the cache + async getWatcherTemplateJavaScriptDataFiles() { + let globs = this.templateData.getTemplateJavaScriptDataFileGlob(); + let bench = this.aggregateBench.get("Searching the file system (watching)"); + bench.before(); + let results = TemplatePath.addLeadingDotSlashArray( + await this.fileSystemSearch.search("js-dependencies", globs, { + ignore: [ + "**/node_modules/**", + ".git/**", + // TODO outputDir + // this.outputDir, + ], + }), + ); + bench.after(); + return results; + } + + /* Ignored by `eleventy --watch` */ + getGlobWatcherIgnores() { + // convert to format without ! since they are passed in as a separate argument to glob watcher + let entries = new Set( + this.fileIgnores.map((ignore) => TemplatePath.stripLeadingDotSlash(ignore)), + ); + + for (let ignore of this.config.watchIgnores) { + entries.add(this.normalizeIgnoreEntry(ignore)); + } + + // de-duplicated + return Array.from(entries); + } + + getIncludesAndDataDirs() { + let rawPaths = new Set(); + rawPaths.add(this.includesDir); + if (this.layoutsDir) { + rawPaths.add(this.layoutsDir); + } + rawPaths.add(this.dataDir); + + return Array.from(rawPaths) + .filter((entry) => { + // never ignore the input directory (even if config file returns "" for these) + return entry && entry !== this.inputDir; + }) + .map((entry) => { + return TemplateGlob.map(entry + "**"); + }); + } +} + +export default EleventyFiles; diff --git a/node_modules/@11ty/eleventy/src/EleventyServe.js b/node_modules/@11ty/eleventy/src/EleventyServe.js new file mode 100644 index 00000000..65525ef7 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EleventyServe.js @@ -0,0 +1,321 @@ +import assert from "node:assert"; + +import debugUtil from "debug"; +import { Merge, DeepCopy, TemplatePath } from "@11ty/eleventy-utils"; + +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import ConsoleLogger from "./Util/ConsoleLogger.js"; +import PathPrefixer from "./Util/PathPrefixer.js"; +import checkPassthroughCopyBehavior from "./Util/PassthroughCopyBehaviorCheck.js"; +import { getModulePackageJson } from "./Util/ImportJsonSync.js"; +import { EleventyImport } from "./Util/Require.js"; +import { isGlobMatch } from "./Util/GlobMatcher.js"; + +const debug = debugUtil("Eleventy:EleventyServe"); + +class EleventyServeConfigError extends EleventyBaseError {} + +const DEFAULT_SERVER_OPTIONS = { + module: "@11ty/eleventy-dev-server", + port: 8080, + // pathPrefix: "/", + // setup: function() {}, + // ready: function(server) {}, + // logger: { info: function() {}, error: function() {} } +}; + +class EleventyServe { + #eleventyConfig; + + constructor() { + this.logger = new ConsoleLogger(); + this._initOptionsFetched = false; + this._aliases = undefined; + this._watchedFiles = new Set(); + } + + get config() { + if (!this.eleventyConfig) { + throw new EleventyServeConfigError( + "You need to set the eleventyConfig property on EleventyServe.", + ); + } + + return this.eleventyConfig.getConfig(); + } + + set config(config) { + throw new Error("It’s not allowed to set config on EleventyServe. Set eleventyConfig instead."); + } + + setAliases(aliases) { + this._aliases = aliases; + + if (this._server && "setAliases" in this._server) { + this._server.setAliases(aliases); + } + } + + get eleventyConfig() { + if (!this.#eleventyConfig) { + throw new EleventyServeConfigError( + "You need to set the eleventyConfig property on EleventyServe.", + ); + } + + return this.#eleventyConfig; + } + + set eleventyConfig(config) { + this.#eleventyConfig = config; + + if (checkPassthroughCopyBehavior(this.#eleventyConfig.userConfig, "serve")) { + this.#eleventyConfig.userConfig.events.on("eleventy.passthrough", ({ map }) => { + // for-free passthrough copy + this.setAliases(map); + }); + } + } + + // TODO directorynorm + setOutputDir(outputDir) { + // TODO check if this is different and if so, restart server (if already running) + // This applies if you change the output directory in your config file during watch/serve + this.outputDir = outputDir; + } + + async getServerModule(name) { + try { + if (!name || name === DEFAULT_SERVER_OPTIONS.module) { + return import("@11ty/eleventy-dev-server").then((i) => i.default); + } + + // Look for peer dep in local project + let projectNodeModulesPath = TemplatePath.absolutePath("./node_modules/"); + let serverPath = TemplatePath.absolutePath(projectNodeModulesPath, name); + // No references outside of the project node_modules are allowed + if (!serverPath.startsWith(projectNodeModulesPath)) { + throw new Error("Invalid node_modules name for Eleventy server instance, received:" + name); + } + + let serverPackageJson = getModulePackageJson(serverPath); + // Normalize with `main` entry from + if (TemplatePath.isDirectorySync(serverPath)) { + if (serverPackageJson.main) { + serverPath = TemplatePath.absolutePath( + projectNodeModulesPath, + name, + serverPackageJson.main, + ); + } else { + throw new Error( + `Eleventy server ${name} is missing a \`main\` entry in its package.json file. Traversed up from ${serverPath}.`, + ); + } + } + + let module = await EleventyImport(serverPath); + + if (!("getServer" in module)) { + throw new Error( + `Eleventy server module requires a \`getServer\` static method. Could not find one on module: \`${name}\``, + ); + } + + if (serverPackageJson["11ty"]?.compatibility) { + try { + this.eleventyConfig.userConfig.versionCheck(serverPackageJson["11ty"].compatibility); + } catch (e) { + this.logger.warn(`Warning: \`${name}\` Plugin Compatibility: ${e.message}`); + } + } + + return module; + } catch (e) { + this.logger.error( + "There was an error with your custom Eleventy server. We’re using the default server instead.\n" + + e.message, + ); + debug("Eleventy server error %o", e); + return import("@11ty/eleventy-dev-server").then((i) => i.default); + } + } + + get options() { + if (this._options) { + return this._options; + } + + this._options = Object.assign( + { + pathPrefix: PathPrefixer.normalizePathPrefix(this.config.pathPrefix), + logger: this.logger, + }, + DEFAULT_SERVER_OPTIONS, + this.config.serverOptions, + ); + + this._savedConfigOptions = DeepCopy({}, this.config.serverOptions); + + if (!this._initOptionsFetched && this.getSetupCallback()) { + throw new Error( + "Init options have not yet been fetched in the setup callback. This probably means that `init()` has not yet been called.", + ); + } + + return this._options; + } + + get server() { + if (!this._server) { + throw new Error("Missing server instance. Did you call .initServerInstance?"); + } + + return this._server; + } + + async initServerInstance() { + if (this._server) { + return; + } + + let serverModule = await this.getServerModule(this.options.module); + + // Static method `getServer` was already checked in `getServerModule` + this._server = serverModule.getServer("eleventy-server", this.outputDir, this.options); + + this.setAliases(this._aliases); + + if (this._globsNeedWatching) { + this._server.watchFiles(this._watchedFiles); + this._globsNeedWatching = false; + } + } + + getSetupCallback() { + let setupCallback = this.config.serverOptions.setup; + if (setupCallback && typeof setupCallback === "function") { + return setupCallback; + } + } + + async #init() { + let setupCallback = this.getSetupCallback(); + if (setupCallback) { + let opts = await setupCallback(); + this._initOptionsFetched = true; + + if (opts) { + Merge(this.options, opts); + } + } + } + + async init() { + if (!this._initPromise) { + this._initPromise = this.#init(); + } + + return this._initPromise; + } + + // Port comes in here from --port on the command line + async serve(port) { + this._commandLinePort = port; + + await this.init(); + await this.initServerInstance(); + + this.server.serve(port || this.options.port); + + if (typeof this.config.serverOptions?.ready === "function") { + if (typeof this.server.ready === "function") { + // Dev Server 2.0.7+ + // wait for ready promise to resolve before triggering ready callback + await this.server.ready(); + await this.config.serverOptions?.ready(this.server); + } else { + throw new Error( + "The `ready` option in Eleventy’s `setServerOptions` method requires a `ready` function on the Dev Server instance. If you’re using Eleventy Dev Server, you will need Dev Server 2.0.7+ or newer to use this feature.", + ); + } + } + } + + async close() { + if (this._server) { + await this._server.close(); + + this._server = undefined; + } + } + + async sendError({ error }) { + if (this._server) { + await this.server.sendError({ + error, + }); + } + } + + // Restart the server entirely + // We don’t want to use a native `restart` method (e.g. restart() in Vite) so that + // we can correctly handle a `module` property change (changing the server type) + async restart() { + // Blow away cached options + delete this._options; + + await this.close(); + + // saved --port in `serve()` + await this.serve(this._commandLinePort); + + // rewatch the saved watched files (passthrough copy) + if ("watchFiles" in this.server) { + this.server.watchFiles(this._watchedFiles); + } + } + + // checkPassthroughCopyBehavior check is called upstream in Eleventy.js + // TODO globs are not removed from watcher + watchPassthroughCopy(globs) { + this._watchedFiles = globs; + + if (this._server && "watchFiles" in this.server) { + this.server.watchFiles(globs); + this._globsNeedWatching = false; + } else { + this._globsNeedWatching = true; + } + } + + isEmulatedPassthroughCopyMatch(filepath) { + return isGlobMatch(filepath, this._watchedFiles); + } + + hasOptionsChanged() { + try { + assert.deepStrictEqual(this.config.serverOptions, this._savedConfigOptions); + return false; + } catch (e) { + return true; + } + } + + // Live reload the server + async reload(reloadEvent = {}) { + if (!this._server) { + return; + } + + // Restart the server if the options have changed + if (this.hasOptionsChanged()) { + debug("Server options changed, we’re restarting the server"); + await this.restart(); + } else { + await this.server.reload(reloadEvent); + } + } +} + +export default EleventyServe; diff --git a/node_modules/@11ty/eleventy/src/EleventyWatch.js b/node_modules/@11ty/eleventy/src/EleventyWatch.js new file mode 100644 index 00000000..22dffbec --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EleventyWatch.js @@ -0,0 +1,131 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; + +import PathNormalizer from "./Util/PathNormalizer.js"; + +/* Decides when to watch and in what mode to watch + * Incremental builds don’t batch changes, they queue. + * Nonincremental builds batch. + */ + +class EleventyWatch { + constructor() { + this.incremental = false; + this.isActive = false; + this.activeQueue = []; + } + + isBuildRunning() { + return this.isActive; + } + + setBuildRunning() { + this.isActive = true; + + // pop waiting queue into the active queue + this.activeQueue = this.popNextActiveQueue(); + } + + setBuildFinished() { + this.isActive = false; + this.activeQueue = []; + } + + getIncrementalFile() { + if (this.incremental) { + return this.activeQueue.length ? this.activeQueue[0] : false; + } + + return false; + } + + /* Returns the changed files currently being operated on in the current `watch` build + * Works with or without incremental (though in incremental only one file per time will be processed) + */ + getActiveQueue() { + if (!this.isActive) { + return []; + } else if (this.incremental && this.activeQueue.length === 0) { + return []; + } else if (this.incremental) { + return [this.activeQueue[0]]; + } + + return this.activeQueue; + } + + _queueMatches(file) { + let filterCallback; + if (typeof file === "function") { + filterCallback = file; + } else { + filterCallback = (path) => path === file; + } + + return this.activeQueue.filter(filterCallback); + } + + hasAllQueueFiles(file) { + return ( + this.activeQueue.length > 0 && this.activeQueue.length === this._queueMatches(file).length + ); + } + + hasQueuedFile(file) { + if (file) { + return this._queueMatches(file).length > 0; + } + return false; + } + + hasQueuedFiles(files) { + for (const file of files) { + if (this.hasQueuedFile(file)) { + return true; + } + } + return false; + } + + get pendingQueue() { + if (!this._queue) { + this._queue = []; + } + return this._queue; + } + + set pendingQueue(value) { + this._queue = value; + } + + addToPendingQueue(path) { + if (path) { + path = PathNormalizer.normalizeSeperator(TemplatePath.addLeadingDotSlash(path)); + this.pendingQueue.push(path); + } + } + + getPendingQueueSize() { + return this.pendingQueue.length; + } + + getPendingQueue() { + return this.pendingQueue; + } + + getActiveQueueSize() { + return this.activeQueue.length; + } + + // returns array + popNextActiveQueue() { + if (this.incremental) { + return this.pendingQueue.length ? [this.pendingQueue.shift()] : []; + } + + let ret = this.pendingQueue.slice(); + this.pendingQueue = []; + return ret; + } +} + +export default EleventyWatch; diff --git a/node_modules/@11ty/eleventy/src/EleventyWatchTargets.js b/node_modules/@11ty/eleventy/src/EleventyWatchTargets.js new file mode 100644 index 00000000..aec20369 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EleventyWatchTargets.js @@ -0,0 +1,164 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; +import { DepGraph } from "dependency-graph"; + +import JavaScriptDependencies from "./Util/JavaScriptDependencies.js"; +import eventBus from "./EventBus.js"; + +class EleventyWatchTargets { + #templateConfig; + + constructor(templateConfig) { + this.targets = new Set(); + this.dependencies = new Set(); + this.newTargets = new Set(); + this.isEsm = false; + + this.graph = new DepGraph(); + this.#templateConfig = templateConfig; + } + + setProjectUsingEsm(isEsmProject) { + this.isEsm = !!isEsmProject; + } + + isJavaScriptDependency(path) { + return this.dependencies.has(path); + } + + reset() { + this.newTargets = new Set(); + } + + isWatched(target) { + return this.targets.has(target); + } + + addToDependencyGraph(parent, deps) { + if (!this.graph.hasNode(parent)) { + this.graph.addNode(parent); + } + for (let dep of deps) { + if (!this.graph.hasNode(dep)) { + this.graph.addNode(dep); + } + this.graph.addDependency(parent, dep); + } + } + + uses(parent, dep) { + return this.getDependenciesOf(parent).includes(dep); + } + + getDependenciesOf(parent) { + if (!this.graph.hasNode(parent)) { + return []; + } + return this.graph.dependenciesOf(parent); + } + + getDependantsOf(child) { + if (!this.graph.hasNode(child)) { + return []; + } + return this.graph.dependantsOf(child); + } + + addRaw(targets, isDependency) { + for (let target of targets) { + let path = TemplatePath.addLeadingDotSlash(target); + if (!this.isWatched(path)) { + this.newTargets.add(path); + } + + this.targets.add(path); + + if (isDependency) { + this.dependencies.add(path); + } + } + } + + static normalize(targets) { + if (!targets) { + return []; + } else if (Array.isArray(targets)) { + return targets; + } + + return [targets]; + } + + // add only a target + add(targets) { + this.addRaw(EleventyWatchTargets.normalize(targets)); + } + + static normalizeToGlobs(targets) { + return EleventyWatchTargets.normalize(targets).map((entry) => + TemplatePath.convertToRecursiveGlobSync(entry), + ); + } + + addAndMakeGlob(targets) { + this.addRaw(EleventyWatchTargets.normalizeToGlobs(targets)); + } + + // add only a target’s dependencies + async addDependencies(targets, filterCallback) { + if (this.#templateConfig && !this.#templateConfig.shouldSpiderJavaScriptDependencies()) { + return; + } + + targets = EleventyWatchTargets.normalize(targets); + let deps = await JavaScriptDependencies.getDependencies(targets, this.isEsm); + if (filterCallback) { + deps = deps.filter(filterCallback); + } + + for (let target of targets) { + this.addToDependencyGraph(target, deps); + } + this.addRaw(deps, true); + } + + setWriter(templateWriter) { + this.writer = templateWriter; + } + + clearImportCacheFor(filePathArray) { + let paths = new Set(); + for (const filePath of filePathArray) { + paths.add(filePath); + + // Delete from require cache so that updates to the module are re-required + let importsTheChangedFile = this.getDependantsOf(filePath); + for (let dep of importsTheChangedFile) { + paths.add(dep); + } + + let isImportedInTheChangedFile = this.getDependenciesOf(filePath); + for (let dep of isImportedInTheChangedFile) { + paths.add(dep); + } + + // Use GlobalDependencyMap + if (this.#templateConfig) { + for (let dep of this.#templateConfig.usesGraph.getDependantsFor(filePath)) { + paths.add(dep); + } + } + } + + eventBus.emit("eleventy.importCacheReset", paths); + } + + getNewTargetsSinceLastReset() { + return Array.from(this.newTargets); + } + + getTargets() { + return Array.from(this.targets); + } +} + +export default EleventyWatchTargets; diff --git a/node_modules/@11ty/eleventy/src/Engines/Custom.js b/node_modules/@11ty/eleventy/src/Engines/Custom.js new file mode 100644 index 00000000..17a0da14 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/Custom.js @@ -0,0 +1,339 @@ +import TemplateEngine from "./TemplateEngine.js"; +import getJavaScriptData from "../Util/GetJavaScriptData.js"; + +export default class CustomEngine extends TemplateEngine { + constructor(name, eleventyConfig) { + super(name, eleventyConfig); + + this.entry = this.getExtensionMapEntry(); + this.needsInit = "init" in this.entry && typeof this.entry.init === "function"; + + this.setDefaultEngine(undefined); + } + + getExtensionMapEntry() { + if ("extensionMap" in this.config) { + let name = this.name.toLowerCase(); + // Iterates over only the user config `addExtension` entries + for (let entry of this.config.extensionMap) { + let entryKey = (entry.aliasKey || entry.key || "").toLowerCase(); + if (entryKey === name) { + return entry; + } + } + } + + throw Error( + `Could not find a custom extension for ${this.name}. Did you add it to your config file?`, + ); + } + + setDefaultEngine(defaultEngine) { + this._defaultEngine = defaultEngine; + } + + get cacheable() { + // Enable cacheability for this template + if (this.entry?.compileOptions?.cache !== undefined) { + return this.entry.compileOptions.cache; + } else if (this.needsToReadFileContents()) { + return true; + } else if (this._defaultEngine?.cacheable !== undefined) { + return this._defaultEngine.cacheable; + } + + return super.cacheable; + } + + async getInstanceFromInputPath(inputPath) { + if ( + "getInstanceFromInputPath" in this.entry && + typeof this.entry.getInstanceFromInputPath === "function" + ) { + // returns Promise + return this.entry.getInstanceFromInputPath(inputPath); + } + + // aliased upstream type + if ( + this._defaultEngine && + "getInstanceFromInputPath" in this._defaultEngine && + typeof this._defaultEngine.getInstanceFromInputPath === "function" + ) { + // returns Promise + return this._defaultEngine.getInstanceFromInputPath(inputPath); + } + + return false; + } + + /** + * Whether to use the module loader directly + * + * @override + */ + useJavaScriptImport() { + if ("useJavaScriptImport" in this.entry) { + return this.entry.useJavaScriptImport; + } + + if ( + this._defaultEngine && + "useJavaScriptImport" in this._defaultEngine && + typeof this._defaultEngine.useJavaScriptImport === "function" + ) { + return this._defaultEngine.useJavaScriptImport(); + } + + return false; + } + + /** + * @override + */ + needsToReadFileContents() { + if ("read" in this.entry) { + return this.entry.read; + } + + // Handle aliases to `11ty.js` templates, avoid reading files in the alias, see #2279 + // Here, we are short circuiting fallback to defaultRenderer, does not account for compile + // functions that call defaultRenderer explicitly + if (this._defaultEngine && "needsToReadFileContents" in this._defaultEngine) { + return this._defaultEngine.needsToReadFileContents(); + } + + return true; + } + + // If we init from multiple places, wait for the first init to finish before continuing on. + async _runningInit() { + if (this.needsInit) { + if (!this._initing) { + this._initBench = this.benchmarks.aggregate.get(`Engine (${this.name}) Init`); + this._initBench.before(); + this._initing = this.entry.init.bind({ + config: this.config, + bench: this.benchmarks.aggregate, + })(); + } + await this._initing; + this.needsInit = false; + + if (this._initBench) { + this._initBench.after(); + this._initBench = undefined; + } + } + } + + async getExtraDataFromFile(inputPath) { + if (this.entry.getData === false) { + return; + } + + if (!("getData" in this.entry)) { + // Handle aliases to `11ty.js` templates, use upstream default engine data fetch, see #2279 + if (this._defaultEngine && "getExtraDataFromFile" in this._defaultEngine) { + return this._defaultEngine.getExtraDataFromFile(inputPath); + } + + return; + } + + await this._runningInit(); + + if (typeof this.entry.getData === "function") { + let dataBench = this.benchmarks.aggregate.get( + `Engine (${this.name}) Get Data From File (Function)`, + ); + dataBench.before(); + let data = this.entry.getData(inputPath); + dataBench.after(); + return data; + } + + let keys = new Set(); + if (this.entry.getData === true) { + keys.add("data"); + } else if (Array.isArray(this.entry.getData)) { + for (let key of this.entry.getData) { + keys.add(key); + } + } + + let dataBench = this.benchmarks.aggregate.get(`Engine (${this.name}) Get Data From File`); + dataBench.before(); + + let inst = await this.getInstanceFromInputPath(inputPath); + + if (inst === false) { + dataBench.after(); + + return Promise.reject( + new Error( + `\`getInstanceFromInputPath\` callback missing from '${this.name}' template engine plugin. It is required when \`getData\` is in use. You can set \`getData: false\` to opt-out of this.`, + ), + ); + } + + // override keys set at the plugin level in the individual template + if (inst.eleventyDataKey) { + keys = new Set(inst.eleventyDataKey); + } + + let mixins; + if (this.config) { + // Object.assign usage: see TemplateRenderCustomTest.js: `JavaScript functions should not be mutable but not *that* mutable` + mixins = Object.assign({}, this.config.javascriptFunctions); + } + + let promises = []; + for (let key of keys) { + promises.push( + getJavaScriptData(inst, inputPath, key, { + mixins, + isObjectRequired: key === "data", + }), + ); + } + + let results = await Promise.all(promises); + let data = {}; + for (let result of results) { + Object.assign(data, result); + } + dataBench.after(); + + return data; + } + + async compile(str, inputPath, ...args) { + await this._runningInit(); + let defaultCompilationFn; + if (this._defaultEngine) { + defaultCompilationFn = async (data) => { + const renderFn = await this._defaultEngine.compile(str, inputPath, ...args); + return renderFn(data); + }; + } + + // Fall back to default compiler if the user does not provide their own + if (!this.entry.compile) { + if (defaultCompilationFn) { + return defaultCompilationFn; + } else { + throw new Error( + `Missing \`compile\` property for custom template syntax definition eleventyConfig.addExtension("${this.name}"). This is not necessary when aliasing to an existing template syntax.`, + ); + } + } + + // TODO generalize this (look at JavaScript.js) + let compiledFn = this.entry.compile.bind({ + config: this.config, + addDependencies: (from, toArray = []) => { + this.config.uses.addDependency(from, toArray); + }, + defaultRenderer: defaultCompilationFn, // bind defaultRenderer to compile function + })(str, inputPath); + + // Support `undefined` to skip compile/render + if (compiledFn) { + // Bind defaultRenderer to render function + if ("then" in compiledFn && typeof compiledFn.then === "function") { + // Promise, wait to bind + return compiledFn.then((fn) => { + if (typeof fn === "function") { + return fn.bind({ + defaultRenderer: defaultCompilationFn, + }); + } + return fn; + }); + } else if ("bind" in compiledFn && typeof compiledFn.bind === "function") { + return compiledFn.bind({ + defaultRenderer: defaultCompilationFn, + }); + } + } + + return compiledFn; + } + + get defaultTemplateFileExtension() { + return this.entry.outputFileExtension ?? "html"; + } + + // Whether or not to wrap in Eleventy layouts + useLayouts() { + // TODO future change fallback to `this.defaultTemplateFileExtension === "html"` + return this.entry.useLayouts ?? true; + } + + hasDependencies(inputPath) { + if (this.config.uses.getDependencies(inputPath) === false) { + return false; + } + return true; + } + + isFileRelevantTo(inputPath, comparisonFile, includeLayouts) { + return this.config.uses.isFileRelevantTo(inputPath, comparisonFile, includeLayouts); + } + + getCompileCacheKey(str, inputPath) { + let lastModifiedFile = this.eleventyConfig.getPreviousBuildModifiedFile(); + // Return this separately so we know whether or not to use the cached version + // but still return a key to cache this new render for next time + let isRelevant = this.isFileRelevantTo(inputPath, lastModifiedFile, false); + let useCache = !isRelevant; + + if (this.entry.compileOptions && "getCacheKey" in this.entry.compileOptions) { + if (typeof this.entry.compileOptions.getCacheKey !== "function") { + throw new Error( + `\`compileOptions.getCacheKey\` must be a function in addExtension for the ${this.name} type`, + ); + } + + return { + useCache, + key: this.entry.compileOptions.getCacheKey(str, inputPath), + }; + } + + let { key } = super.getCompileCacheKey(str, inputPath); + return { + useCache, + key, + }; + } + + permalinkNeedsCompilation(/*str*/) { + if (this.entry.compileOptions && "permalink" in this.entry.compileOptions) { + let p = this.entry.compileOptions.permalink; + if (p === "raw") { + return false; + } + + // permalink: false is aliased to permalink: () => false + if (p === false) { + return () => false; + } + + return this.entry.compileOptions.permalink; + } + + // Breaking: default changed from `true` to `false` in 3.0.0-alpha.13 + // Note: `false` is the same as "raw" here. + return false; + } + + static shouldSpiderJavaScriptDependencies(entry) { + if (entry.compileOptions && "spiderJavaScriptDependencies" in entry.compileOptions) { + return entry.compileOptions.spiderJavaScriptDependencies; + } + + return false; + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/FrontMatter/JavaScript.js b/node_modules/@11ty/eleventy/src/Engines/FrontMatter/JavaScript.js new file mode 100644 index 00000000..b91ba36b --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/FrontMatter/JavaScript.js @@ -0,0 +1,34 @@ +import { RetrieveGlobals } from "node-retrieve-globals"; + +// `javascript` Front Matter Type +export default function (frontMatterCode, context = {}) { + let { filePath } = context; + + // context.language would be nice as a guard, but was unreliable + if (frontMatterCode.trimStart().startsWith("{")) { + return context.engines.jsLegacy.parse(frontMatterCode, context); + } + + let vm = new RetrieveGlobals(frontMatterCode, { + filePath, + // ignored if vm.Module is stable (or --experimental-vm-modules) + transformEsmImports: true, + }); + + // Future warning until vm.Module is stable: + // If the frontMatterCode uses `import` this uses the `experimentalModuleApi` + // option in node-retrieve-globals to workaround https://github.com/zachleat/node-retrieve-globals/issues/2 + let data = { + page: { + // Theoretically fileSlug and filePathStem could be added here but require extensionMap + inputPath: filePath, + }, + }; + + // this is async, but it’s handled in Eleventy upstream. + return vm.getGlobalContext(data, { + reuseGlobal: true, + dynamicImport: true, + // addRequire: true, + }); +} diff --git a/node_modules/@11ty/eleventy/src/Engines/Html.js b/node_modules/@11ty/eleventy/src/Engines/Html.js new file mode 100644 index 00000000..a0f41019 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/Html.js @@ -0,0 +1,33 @@ +import TemplateEngine from "./TemplateEngine.js"; + +export default class Html extends TemplateEngine { + constructor(name, eleventyConfig) { + super(name, eleventyConfig); + } + + get cacheable() { + return true; + } + + async #getPreEngine(preTemplateEngine) { + return this.engineManager.getEngine(preTemplateEngine, this.extensionMap); + } + + async compile(str, inputPath, preTemplateEngine) { + if (preTemplateEngine) { + let engine = await this.#getPreEngine(preTemplateEngine); + let fnReady = engine.compile(str, inputPath); + + return async function (data) { + let fn = await fnReady; + + return fn(data); + }; + } + + return function () { + // do nothing with data if preTemplateEngine is falsy + return str; + }; + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/JavaScript.js b/node_modules/@11ty/eleventy/src/Engines/JavaScript.js new file mode 100644 index 00000000..29b3b7c5 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/JavaScript.js @@ -0,0 +1,240 @@ +import { TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; + +import TemplateEngine from "./TemplateEngine.js"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import getJavaScriptData from "../Util/GetJavaScriptData.js"; +import { EleventyImport } from "../Util/Require.js"; +import { augmentFunction, augmentObject } from "./Util/ContextAugmenter.js"; + +class JavaScriptTemplateNotDefined extends EleventyBaseError {} + +export default class JavaScript extends TemplateEngine { + constructor(name, templateConfig) { + super(name, templateConfig); + this.instances = {}; + + this.config.events.on("eleventy#templateModified", (inputPath, metadata = {}) => { + let { usedByDependants, relevantLayouts } = metadata; + // Remove from cached instances when modified + let instancesToDelete = [ + inputPath, + ...(usedByDependants || []), + ...(relevantLayouts || []), + ].map((entry) => TemplatePath.addLeadingDotSlash(entry)); + for (let inputPath of instancesToDelete) { + if (inputPath in this.instances) { + delete this.instances[inputPath]; + } + } + }); + } + + get cacheable() { + return false; + } + + normalize(result) { + if (Buffer.isBuffer(result)) { + return result.toString(); + } + + return result; + } + + // String, Buffer, Promise + // Function, Class + // Object + // Module + _getInstance(mod) { + let noop = function () { + return ""; + }; + + let originalModData = mod?.data; + + if (typeof mod === "object" && mod.default && this.eleventyConfig.getIsProjectUsingEsm()) { + mod = mod.default; + } + + if (typeof mod === "string" || mod instanceof Buffer || mod.then) { + return { render: () => mod }; + } else if (typeof mod === "function") { + if (mod.prototype?.data || mod.prototype?.render) { + if (!("render" in mod.prototype)) { + mod.prototype.render = noop; + } + + if (!("data" in mod.prototype) && !mod.data && originalModData) { + mod.prototype.data = originalModData; + } + + return new mod(); + } else { + return { + ...(originalModData ? { data: originalModData } : undefined), + render: mod, + }; + } + } else if ("data" in mod || "render" in mod) { + if (!mod.render) { + mod.render = noop; + } + if (!mod.data && originalModData) { + mod.data = originalModData; + } + return mod; + } + } + + async #getInstanceFromInputPath(inputPath) { + let mod; + let relativeInputPath = + this.eleventyConfig.directories.getInputPathRelativeToInputDirectory(inputPath); + if (this.eleventyConfig.userConfig.isVirtualTemplate(relativeInputPath)) { + mod = this.eleventyConfig.userConfig.virtualTemplates[relativeInputPath].content; + } else { + let isEsm = this.eleventyConfig.getIsProjectUsingEsm(); + let cacheBust = !this.cacheable || !this.config.useTemplateCache; + mod = await EleventyImport(inputPath, isEsm ? "esm" : "cjs", { + cacheBust, + }); + } + + let inst = this._getInstance(mod); + if (inst) { + this.instances[inputPath] = inst; + } else { + throw new JavaScriptTemplateNotDefined( + `No JavaScript template returned from ${inputPath}. Did you assign module.exports (CommonJS) or export (ESM)?`, + ); + } + return inst; + } + + async getInstanceFromInputPath(inputPath) { + if (!this.instances[inputPath]) { + this.instances[inputPath] = this.#getInstanceFromInputPath(inputPath); + } + + return this.instances[inputPath]; + } + + /** + * JavaScript files defer to the module loader rather than read the files to strings + * + * @override + */ + needsToReadFileContents() { + return false; + } + + /** + * Use the module loader directly + * + * @override + */ + useJavaScriptImport() { + return true; + } + + async getExtraDataFromFile(inputPath) { + let inst = await this.getInstanceFromInputPath(inputPath); + return getJavaScriptData(inst, inputPath); + } + + getJavaScriptFunctions(inst) { + let fns = {}; + let configFns = this.config.javascriptFunctions; + + for (let key in configFns) { + // prefer pre-existing `page` javascriptFunction, if one exists + fns[key] = augmentFunction(configFns[key], { + source: inst, + overwrite: false, + }); + } + return fns; + } + + // Backwards compat + static wrapJavaScriptFunction(inst, fn) { + return augmentFunction(fn, { + source: inst, + }); + } + + addExportsToBundles(inst, url) { + let cfg = this.eleventyConfig.userConfig; + if (!("getBundleManagers" in cfg)) { + return; + } + + let managers = cfg.getBundleManagers(); + for (let name in managers) { + let mgr = managers[name]; + let key = mgr.getBundleExportKey(); + if (!key) { + continue; + } + + if (typeof inst[key] === "string") { + // export const css = ``; + mgr.addToPage(url, inst[key]); + } else if (isPlainObject(inst[key])) { + if (typeof inst[key][name] === "string") { + // Object with bundle names: + // export const bundle = { + // css: `` + // }; + mgr.addToPage(url, inst[key][name]); + } else if (isPlainObject(inst[key][name])) { + // Object with bucket names: + // export const bundle = { + // css: { + // default: `` + // } + // }; + for (let bucketName in inst[key][name]) { + mgr.addToPage(url, inst[key][name][bucketName], bucketName); + } + } + } + } + } + + async compile(str, inputPath) { + let inst; + if (str) { + // When str has a value, it's being used for permalinks in data + inst = this._getInstance(str); + } else { + // For normal templates, str will be falsy. + inst = await this.getInstanceFromInputPath(inputPath); + } + + if (inst?.render) { + return (data = {}) => { + // TODO does this do anything meaningful for non-classes? + // `inst` should have a normalized `render` function from _getInstance + + // Map exports to bundles + if (data.page?.url) { + this.addExportsToBundles(inst, data.page.url); + } + + augmentObject(inst, { + source: data, + overwrite: false, + }); + + Object.assign(inst, this.getJavaScriptFunctions(inst)); + + return this.normalize(inst.render.call(inst, data)); + }; + } + } + + static shouldSpiderJavaScriptDependencies() { + return true; + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/Liquid.js b/node_modules/@11ty/eleventy/src/Engines/Liquid.js new file mode 100644 index 00000000..44fdab4c --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/Liquid.js @@ -0,0 +1,331 @@ +import moo from "moo"; +import { Tokenizer, TokenKind, evalToken, Liquid as LiquidJs } from "liquidjs"; +import { TemplatePath } from "@11ty/eleventy-utils"; +// import debugUtil from "debug"; + +import TemplateEngine from "./TemplateEngine.js"; +import { augmentObject } from "./Util/ContextAugmenter.js"; + +// const debug = debugUtil("Eleventy:Liquid"); + +export default class Liquid extends TemplateEngine { + static argumentLexerOptions = { + number: /[0-9]+\.*[0-9]*/, + doubleQuoteString: /"(?:\\["\\]|[^\n"\\])*"/, + singleQuoteString: /'(?:\\['\\]|[^\n'\\])*'/, + keyword: /[a-zA-Z0-9.\-_]+/, + "ignore:whitespace": /[, \t]+/, // includes comma separator + }; + + constructor(name, eleventyConfig) { + super(name, eleventyConfig); + + this.liquidOptions = this.config.liquidOptions || {}; + + this.setLibrary(this.config.libraryOverrides.liquid); + + this.argLexer = moo.compile(Liquid.argumentLexerOptions); + } + + get cacheable() { + return true; + } + + setLibrary(override) { + // warning, the include syntax supported here does not exactly match what Jekyll uses. + this.liquidLib = override || new LiquidJs(this.getLiquidOptions()); + this.setEngineLib(this.liquidLib, Boolean(this.config.libraryOverrides.liquid)); + + this.addFilters(this.config.liquidFilters); + + // TODO these all go to the same place (addTag), add warnings for overwrites + this.addCustomTags(this.config.liquidTags); + this.addAllShortcodes(this.config.liquidShortcodes); + this.addAllPairedShortcodes(this.config.liquidPairedShortcodes); + } + + getLiquidOptions() { + let defaults = { + root: [this.dirs.includes, this.dirs.input], // supplemented in compile with inputPath below + extname: ".liquid", + strictFilters: true, + // TODO? + // cache: true, + }; + + let options = Object.assign(defaults, this.liquidOptions || {}); + // debug("Liquid constructor options: %o", options); + + return options; + } + + static wrapFilter(name, fn) { + /** + * @this {object} + */ + return function (...args) { + // Set this.eleventy and this.page + if (typeof this.context?.get === "function") { + augmentObject(this, { + source: this.context, + getter: (key, context) => context.get([key]), + + lazy: this.context.strictVariables, + }); + } + + // We *don’t* wrap this in an EleventyFilterError because Liquid has a better error message with line/column information in the template + return fn.call(this, ...args); + }; + } + + // Shortcodes + static normalizeScope(context) { + let obj = {}; + if (context) { + obj.ctx = context; // Full context available on `ctx` + + // Set this.eleventy and this.page + augmentObject(obj, { + source: context, + getter: (key, context) => context.get([key]), + lazy: context.strictVariables, + }); + } + + return obj; + } + + addCustomTags(tags) { + for (let name in tags) { + this.addTag(name, tags[name]); + } + } + + addFilters(filters) { + for (let name in filters) { + this.addFilter(name, filters[name]); + } + } + + addFilter(name, filter) { + this.liquidLib.registerFilter(name, Liquid.wrapFilter(name, filter)); + } + + addTag(name, tagFn) { + let tagObj; + if (typeof tagFn === "function") { + tagObj = tagFn(this.liquidLib); + } else { + throw new Error( + "Liquid.addTag expects a callback function to be passed in: addTag(name, function(liquidEngine) { return { parse: …, render: … } })", + ); + } + this.liquidLib.registerTag(name, tagObj); + } + + addAllShortcodes(shortcodes) { + for (let name in shortcodes) { + this.addShortcode(name, shortcodes[name]); + } + } + + addAllPairedShortcodes(shortcodes) { + for (let name in shortcodes) { + this.addPairedShortcode(name, shortcodes[name]); + } + } + + static parseArguments(lexer, str) { + let argArray = []; + + if (!lexer) { + lexer = moo.compile(Liquid.argumentLexerOptions); + } + + if (typeof str === "string") { + lexer.reset(str); + + let arg = lexer.next(); + while (arg) { + /*{ + type: 'doubleQuoteString', + value: '"test 2"', + text: '"test 2"', + toString: [Function: tokenToString], + offset: 0, + lineBreaks: 0, + line: 1, + col: 1 }*/ + if (arg.type.indexOf("ignore:") === -1) { + // Push the promise into an array instead of awaiting it here. + // This forces the promises to run in order with the correct scope value for each arg. + // Otherwise they run out of order and can lead to undefined values for arguments in layout template shortcodes. + // console.log( arg.value, scope, engine ); + argArray.push(arg.value); + } + arg = lexer.next(); + } + } + + return argArray; + } + + static parseArgumentsBuiltin(args) { + let tokenizer = new Tokenizer(args); + let parsedArgs = []; + + let value = tokenizer.readValue(); + while (value) { + parsedArgs.push(value); + tokenizer.skipBlank(); + if (tokenizer.peek() === ",") { + tokenizer.advance(); + } + value = tokenizer.readValue(); + } + tokenizer.end(); + + return parsedArgs; + } + + addShortcode(shortcodeName, shortcodeFn) { + let _t = this; + this.addTag(shortcodeName, function (liquidEngine) { + return { + parse(tagToken) { + this.name = tagToken.name; + if (_t.config.liquidParameterParsing === "builtin") { + this.orderedArgs = Liquid.parseArgumentsBuiltin(tagToken.args); + // note that Liquid does have a Hash class for name-based argument parsing but offers no easy to support both modes in one class + } else { + this.legacyArgs = tagToken.args; + } + }, + render: function* (ctx) { + let argArray = []; + + if (this.legacyArgs) { + let rawArgs = Liquid.parseArguments(_t.argLexer, this.legacyArgs); + for (let arg of rawArgs) { + let b = yield liquidEngine.evalValue(arg, ctx); + argArray.push(b); + } + } else if (this.orderedArgs) { + for (let arg of this.orderedArgs) { + let b = yield evalToken(arg, ctx); + argArray.push(b); + } + } + + let ret = yield shortcodeFn.call(Liquid.normalizeScope(ctx), ...argArray); + return ret; + }, + }; + }); + } + + addPairedShortcode(shortcodeName, shortcodeFn) { + let _t = this; + this.addTag(shortcodeName, function (liquidEngine) { + return { + parse(tagToken, remainTokens) { + this.name = tagToken.name; + + if (_t.config.liquidParameterParsing === "builtin") { + this.orderedArgs = Liquid.parseArgumentsBuiltin(tagToken.args); + // note that Liquid does have a Hash class for name-based argument parsing but offers no easy to support both modes in one class + } else { + this.legacyArgs = tagToken.args; + } + + this.templates = []; + + var stream = liquidEngine.parser + .parseStream(remainTokens) + .on("template", (tpl) => this.templates.push(tpl)) + .on("tag:end" + shortcodeName, () => stream.stop()) + .on("end", () => { + throw new Error(`tag ${tagToken.raw} not closed`); + }); + + stream.start(); + }, + render: function* (ctx /*, emitter*/) { + let argArray = []; + if (this.legacyArgs) { + let rawArgs = Liquid.parseArguments(_t.argLexer, this.legacyArgs); + for (let arg of rawArgs) { + let b = yield liquidEngine.evalValue(arg, ctx); + argArray.push(b); + } + } else if (this.orderedArgs) { + for (let arg of this.orderedArgs) { + let b = yield evalToken(arg, ctx); + argArray.push(b); + } + } + + const html = yield liquidEngine.renderer.renderTemplates(this.templates, ctx); + + let ret = yield shortcodeFn.call(Liquid.normalizeScope(ctx), html, ...argArray); + + return ret; + }, + }; + }); + } + + parseForSymbols(str) { + if (!str) { + return []; + } + + let tokenizer = new Tokenizer(str); + /** @type {Array} */ + let tokens = tokenizer.readTopLevelTokens(); + let symbols = tokens + .filter((token) => token.kind === TokenKind.Output) + .map((token) => { + // manually remove filters 😅 + return token.content.split("|").map((entry) => entry.trim())[0]; + }); + return symbols; + } + + // Don’t return a boolean if permalink is a function (see TemplateContent->renderPermalink) + /** @returns {boolean|undefined} */ + permalinkNeedsCompilation(str) { + if (typeof str === "string") { + return this.needsCompilation(str); + } + } + + needsCompilation(str) { + let options = this.liquidLib.options; + + return ( + str.indexOf(options.tagDelimiterLeft) !== -1 || + str.indexOf(options.outputDelimiterLeft) !== -1 + ); + } + + async compile(str, inputPath) { + let engine = this.liquidLib; + let tmplReady = engine.parse(str, inputPath); + + // Required for relative includes + let options = {}; + if (!inputPath || inputPath === "liquid" || inputPath === "md") { + // do nothing + } else { + options.root = [TemplatePath.getDirFromFilePath(inputPath)]; + } + + return async function (data) { + let tmpl = await tmplReady; + + return engine.render(tmpl, data, options); + }; + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/Markdown.js b/node_modules/@11ty/eleventy/src/Engines/Markdown.js new file mode 100644 index 00000000..ec1e1f6f --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/Markdown.js @@ -0,0 +1,100 @@ +import markdownIt from "markdown-it"; + +import TemplateEngine from "./TemplateEngine.js"; + +export default class Markdown extends TemplateEngine { + constructor(name, eleventyConfig) { + super(name, eleventyConfig); + + this.markdownOptions = {}; + + this.setLibrary(this.config.libraryOverrides.md); + } + + get cacheable() { + return true; + } + + setLibrary(mdLib) { + this.mdLib = mdLib || markdownIt(this.getMarkdownOptions()); + + // Overrides a highlighter set in `markdownOptions` + // This is separate so devs can pass in a new mdLib and still use the official eleventy plugin for markdown highlighting + if (this.config.markdownHighlighter && typeof this.mdLib.set === "function") { + this.mdLib.set({ + highlight: this.config.markdownHighlighter, + }); + } + + if (typeof this.mdLib.disable === "function") { + // Disable indented code blocks by default (Issue #2438) + this.mdLib.disable("code"); + } + + this.setEngineLib(this.mdLib, Boolean(this.config.libraryOverrides.md)); + } + + setMarkdownOptions(options) { + this.markdownOptions = options; + } + + getMarkdownOptions() { + // work with "mode" presets https://github.com/markdown-it/markdown-it#init-with-presets-and-options + if (typeof this.markdownOptions === "string") { + return this.markdownOptions; + } + + return Object.assign( + { + html: true, + }, + this.markdownOptions || {}, + ); + } + + // TODO use preTemplateEngine to help inform this + // needsCompilation() { + // return super.needsCompilation(); + // } + + async #getPreEngine(preTemplateEngine) { + if (typeof preTemplateEngine === "string") { + return this.engineManager.getEngine(preTemplateEngine, this.extensionMap); + } + + return preTemplateEngine; + } + + async compile(str, inputPath, preTemplateEngine, bypassMarkdown) { + let mdlib = this.mdLib; + + if (preTemplateEngine) { + let engine = await this.#getPreEngine(preTemplateEngine); + let fnReady = engine.compile(str, inputPath); + + if (bypassMarkdown) { + return async function (data) { + let fn = await fnReady; + return fn(data); + }; + } else { + return async function (data) { + let fn = await fnReady; + let preTemplateEngineRender = await fn(data); + let finishedRender = mdlib.render(preTemplateEngineRender, data); + return finishedRender; + }; + } + } else { + if (bypassMarkdown) { + return function () { + return str; + }; + } else { + return function (data) { + return mdlib.render(str, data); + }; + } + } + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/Nunjucks.js b/node_modules/@11ty/eleventy/src/Engines/Nunjucks.js new file mode 100644 index 00000000..70cca174 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/Nunjucks.js @@ -0,0 +1,482 @@ +import NunjucksLib from "nunjucks"; +import debugUtil from "debug"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +import TemplateEngine from "./TemplateEngine.js"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import { augmentObject } from "./Util/ContextAugmenter.js"; +import { withResolvers } from "../Util/PromiseUtil.js"; + +const debug = debugUtil("Eleventy:Nunjucks"); + +class EleventyNunjucksError extends EleventyBaseError {} + +export default class Nunjucks extends TemplateEngine { + constructor(name, eleventyConfig) { + super(name, eleventyConfig); + + this.nunjucksEnvironmentOptions = this.config.nunjucksEnvironmentOptions || { dev: true }; + + this.nunjucksPrecompiledTemplates = this.config.nunjucksPrecompiledTemplates || {}; + this._usingPrecompiled = Object.keys(this.nunjucksPrecompiledTemplates).length > 0; + + this.setLibrary(this.config.libraryOverrides.njk); + } + + // v3.1.0-alpha.1 we’ve moved to use Nunjucks’ internal cache instead of Eleventy’s + // get cacheable() { + // return false; + // } + + #getFileSystemDirs() { + let paths = new Set(); + paths.add(super.getIncludesDir()); + paths.add(TemplatePath.getWorkingDir()); + + // Filter out undefined paths + return Array.from(paths).filter(Boolean); + } + + #setEnv(override) { + if (override) { + this.njkEnv = override; + } else if (this._usingPrecompiled) { + // Precompiled templates to avoid eval! + const NodePrecompiledLoader = function () {}; + + NodePrecompiledLoader.prototype.getSource = (name) => { + // https://github.com/mozilla/nunjucks/blob/fd500902d7c88672470c87170796de52fc0f791a/nunjucks/src/precompiled-loader.js#L5 + return { + src: { + type: "code", + obj: this.nunjucksPrecompiledTemplates[name], + }, + // Maybe add this? + // path, + // noCache: true + }; + }; + + this.njkEnv = new NunjucksLib.Environment( + new NodePrecompiledLoader(), + this.nunjucksEnvironmentOptions, + ); + } else { + let fsLoader = new NunjucksLib.FileSystemLoader(this.#getFileSystemDirs()); + this.njkEnv = new NunjucksLib.Environment(fsLoader, this.nunjucksEnvironmentOptions); + } + + this.config.events.emit("eleventy.engine.njk", { + nunjucks: NunjucksLib, + environment: this.njkEnv, + }); + } + + setLibrary(override) { + this.#setEnv(override); + + // Note that a new Nunjucks engine instance is created for subsequent builds + // Eleventy Nunjucks is set to `cacheable` false above to opt out of Eleventy cache + this.config.events.on("eleventy#templateModified", (templatePath) => { + // NunjucksEnvironment: + // loader.pathToNames: {'ABSOLUTE_PATH/src/_includes/components/possum-home.css': 'components/possum-home.css'} + // loader.cache: { 'components/possum-home.css': [Template] } + // Nunjucks stores these as Operating System native paths + let absTmplPath = TemplatePath.normalizeOperatingSystemFilePath( + TemplatePath.absolutePath(templatePath), + ); + for (let loader of this.njkEnv.loaders) { + let nunjucksName = loader.pathsToNames[absTmplPath]; + if (nunjucksName) { + debug( + "Match found in Nunjucks cache via templateModified for %o, clearing this entry", + templatePath, + ); + delete loader.pathsToNames[absTmplPath]; + delete loader.cache[nunjucksName]; + } + } + + // Behavior prior to v3.1.0-alpha.1: + // this.njkEnv.invalidateCache(); + }); + + this.setEngineLib(this.njkEnv, Boolean(this.config.libraryOverrides.njk)); + + this.addFilters(this.config.nunjucksFilters); + this.addFilters(this.config.nunjucksAsyncFilters, true); + + // TODO these all go to the same place (addTag), add warnings for overwrites + // TODO(zachleat): variableName should work with quotes or without quotes (same as {% set %}) + this.addPairedShortcode("setAsync", function (content, variableName) { + this.ctx[variableName] = content; + return ""; + }); + + this.addCustomTags(this.config.nunjucksTags); + this.addAllShortcodes(this.config.nunjucksShortcodes); + this.addAllShortcodes(this.config.nunjucksAsyncShortcodes, true); + this.addAllPairedShortcodes(this.config.nunjucksPairedShortcodes); + this.addAllPairedShortcodes(this.config.nunjucksAsyncPairedShortcodes, true); + this.addGlobals(this.config.nunjucksGlobals); + } + + addFilters(filters, isAsync) { + for (let name in filters) { + this.njkEnv.addFilter(name, Nunjucks.wrapFilter(name, filters[name]), isAsync); + } + } + + static wrapFilter(name, fn) { + return function (...args) { + try { + augmentObject(this, { + source: this.ctx, + lazy: false, // context.env?.opts.throwOnUndefined, + }); + + return fn.call(this, ...args); + } catch (e) { + throw new EleventyNunjucksError( + `Error in Nunjucks Filter \`${name}\`${this.page ? ` (${this.page.inputPath})` : ""}`, + e, + ); + } + }; + } + + // Shortcodes + static normalizeContext(context) { + let obj = {}; + if (context.ctx) { + obj.ctx = context.ctx; + obj.env = context.env; + + augmentObject(obj, { + source: context.ctx, + lazy: false, // context.env?.opts.throwOnUndefined, + }); + } + return obj; + } + + addCustomTags(tags) { + for (let name in tags) { + this.addTag(name, tags[name]); + } + } + + addTag(name, tagFn) { + let tagObj; + if (typeof tagFn === "function") { + tagObj = tagFn(NunjucksLib, this.njkEnv); + } else { + throw new Error( + "Nunjucks.addTag expects a callback function to be passed in: addTag(name, function(nunjucksEngine) {})", + ); + } + + this.njkEnv.addExtension(name, tagObj); + } + + addGlobals(globals) { + for (let name in globals) { + this.addGlobal(name, globals[name]); + } + } + + addGlobal(name, globalFn) { + this.njkEnv.addGlobal(name, globalFn); + } + + addAllShortcodes(shortcodes, isAsync = false) { + for (let name in shortcodes) { + this.addShortcode(name, shortcodes[name], isAsync); + } + } + + addAllPairedShortcodes(shortcodes, isAsync = false) { + for (let name in shortcodes) { + this.addPairedShortcode(name, shortcodes[name], isAsync); + } + } + + _getShortcodeFn(shortcodeName, shortcodeFn, isAsync = false) { + return function ShortcodeFunction() { + this.tags = [shortcodeName]; + + this.parse = function (parser, nodes) { + let args; + let tok = parser.nextToken(); + + args = parser.parseSignature(true, true); + + // Nunjucks bug with non-paired custom tags bug still exists even + // though this issue is closed. Works fine for paired. + // https://github.com/mozilla/nunjucks/issues/158 + if (args.children.length === 0) { + args.addChild(new nodes.Literal(0, 0, "")); + } + + parser.advanceAfterBlockEnd(tok.value); + if (isAsync) { + return new nodes.CallExtensionAsync(this, "run", args); + } + return new nodes.CallExtension(this, "run", args); + }; + + this.run = function (...args) { + let resolve; + if (isAsync) { + resolve = args.pop(); + } + + let [context, ...argArray] = args; + + if (isAsync) { + let ret = shortcodeFn.call(Nunjucks.normalizeContext(context), ...argArray); + + // #3286 error messaging when the shortcode is not a promise + if (!ret?.then) { + resolve( + new EleventyNunjucksError( + `Error with Nunjucks shortcode \`${shortcodeName}\`: it was defined as asynchronous but was actually synchronous. This is important for Nunjucks.`, + ), + ); + } + + ret.then( + function (returnValue) { + resolve(null, new NunjucksLib.runtime.SafeString("" + returnValue)); + }, + function (e) { + resolve( + new EleventyNunjucksError(`Error with Nunjucks shortcode \`${shortcodeName}\``, e), + ); + }, + ); + } else { + try { + let ret = shortcodeFn.call(Nunjucks.normalizeContext(context), ...argArray); + return new NunjucksLib.runtime.SafeString("" + ret); + } catch (e) { + throw new EleventyNunjucksError( + `Error with Nunjucks shortcode \`${shortcodeName}\``, + e, + ); + } + } + }; + }; + } + + _getPairedShortcodeFn(shortcodeName, shortcodeFn, isAsync = false) { + return function PairedShortcodeFunction() { + this.tags = [shortcodeName]; + + this.parse = function (parser, nodes) { + var tok = parser.nextToken(); + + var args = parser.parseSignature(true, true); + parser.advanceAfterBlockEnd(tok.value); + + var body = parser.parseUntilBlocks("end" + shortcodeName); + parser.advanceAfterBlockEnd(); + + return new nodes.CallExtensionAsync(this, "run", args, [body]); + }; + + this.run = function (...args) { + let resolve = args.pop(); + let body = args.pop(); + let [context, ...argArray] = args; + + body(function (e, bodyContent) { + if (e) { + resolve( + new EleventyNunjucksError( + `Error with Nunjucks paired shortcode \`${shortcodeName}\``, + e, + ), + ); + } + + if (isAsync) { + let ret = shortcodeFn.call( + Nunjucks.normalizeContext(context), + bodyContent, + ...argArray, + ); + + // #3286 error messaging when the shortcode is not a promise + if (!ret?.then) { + throw new EleventyNunjucksError( + `Error with Nunjucks shortcode \`${shortcodeName}\`: it was defined as asynchronous but was actually synchronous. This is important for Nunjucks.`, + ); + } + + ret.then( + function (returnValue) { + resolve(null, new NunjucksLib.runtime.SafeString(returnValue)); + }, + function (e) { + resolve( + new EleventyNunjucksError( + `Error with Nunjucks paired shortcode \`${shortcodeName}\``, + e, + ), + ); + }, + ); + } else { + try { + resolve( + null, + new NunjucksLib.runtime.SafeString( + shortcodeFn.call(Nunjucks.normalizeContext(context), bodyContent, ...argArray), + ), + ); + } catch (e) { + resolve( + new EleventyNunjucksError( + `Error with Nunjucks paired shortcode \`${shortcodeName}\``, + e, + ), + ); + } + } + }); + }; + }; + } + + addShortcode(shortcodeName, shortcodeFn, isAsync = false) { + let fn = this._getShortcodeFn(shortcodeName, shortcodeFn, isAsync); + this.njkEnv.addExtension(shortcodeName, new fn()); + } + + addPairedShortcode(shortcodeName, shortcodeFn, isAsync = false) { + let fn = this._getPairedShortcodeFn(shortcodeName, shortcodeFn, isAsync); + this.njkEnv.addExtension(shortcodeName, new fn()); + } + + // Don’t return a boolean if permalink is a function (see TemplateContent->renderPermalink) + permalinkNeedsCompilation(str) { + if (typeof str === "string") { + return this.needsCompilation(str); + } + } + + needsCompilation(str) { + // Defend against syntax customisations: + // https://mozilla.github.io/nunjucks/api.html#customizing-syntax + let optsTags = this.njkEnv.opts.tags || {}; + let blockStart = optsTags.blockStart || "{%"; + let variableStart = optsTags.variableStart || "{{"; + let commentStart = optsTags.variableStart || "{#"; + + return ( + str.indexOf(blockStart) !== -1 || + str.indexOf(variableStart) !== -1 || + str.indexOf(commentStart) !== -1 + ); + } + + _getParseExtensions() { + if (this._parseExtensions) { + return this._parseExtensions; + } + + // add extensions so the parser knows about our custom tags/blocks + let ext = []; + for (let name in this.config.nunjucksTags) { + let fn = this._getShortcodeFn(name, () => {}); + ext.push(new fn()); + } + for (let name in this.config.nunjucksShortcodes) { + let fn = this._getShortcodeFn(name, () => {}); + ext.push(new fn()); + } + for (let name in this.config.nunjucksAsyncShortcodes) { + let fn = this._getShortcodeFn(name, () => {}, true); + ext.push(new fn()); + } + for (let name in this.config.nunjucksPairedShortcodes) { + let fn = this._getPairedShortcodeFn(name, () => {}); + ext.push(new fn()); + } + for (let name in this.config.nunjucksAsyncPairedShortcodes) { + let fn = this._getPairedShortcodeFn(name, () => {}, true); + ext.push(new fn()); + } + + this._parseExtensions = ext; + return ext; + } + + /* Outputs an Array of lodash get selectors */ + parseForSymbols(str) { + if (!str) { + return []; + } + const { parser, nodes } = NunjucksLib; + let obj = parser.parse(str, this._getParseExtensions()); + if (!obj) { + return []; + } + let linesplit = str.split("\n"); + let values = obj.findAll(nodes.Value); + let symbols = obj.findAll(nodes.Symbol).map((entry) => { + let name = [entry.value]; + let nestedIndex = -1; + for (let val of values) { + if (nestedIndex > -1) { + /* deep.object.syntax */ + if (linesplit[val.lineno].charAt(nestedIndex) === ".") { + name.push(val.value); + nestedIndex += val.value.length + 1; + } else { + nestedIndex = -1; + } + } else if ( + val.lineno === entry.lineno && + val.colno === entry.colno && + val.value === entry.value + ) { + nestedIndex = entry.colno + entry.value.length; + } + } + return name.join("."); + }); + + let uniqueSymbols = Array.from(new Set(symbols)); + return uniqueSymbols; + } + + async compile(str, inputPath) { + let tmpl; + + // *All* templates are precompiled to avoid runtime eval + if (this._usingPrecompiled) { + tmpl = this.njkEnv.getTemplate(str, true); + } else if (!inputPath || inputPath === "njk" || inputPath === "md") { + tmpl = new NunjucksLib.Template(str, this.njkEnv, null, false); + } else { + tmpl = new NunjucksLib.Template(str, this.njkEnv, inputPath, false); + } + + return function (data) { + let { promise, resolve, reject } = withResolvers(); + + tmpl.render(data, (error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } + }); + + return promise; + }; + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/TemplateEngine.js b/node_modules/@11ty/eleventy/src/Engines/TemplateEngine.js new file mode 100644 index 00000000..234aa4e7 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/TemplateEngine.js @@ -0,0 +1,206 @@ +import debugUtil from "debug"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; + +class TemplateEngineConfigError extends EleventyBaseError {} + +const debug = debugUtil("Eleventy:TemplateEngine"); + +const AMENDED_INSTANCES = new Set(); + +export default class TemplateEngine { + #extensionMap; + #engineManager; + #benchmarks; + + constructor(name, eleventyConfig) { + this.name = name; + + this.engineLib = null; + + if (!eleventyConfig) { + throw new TemplateEngineConfigError("Missing `eleventyConfig` argument."); + } + this.eleventyConfig = eleventyConfig; + } + + get cacheable() { + return false; + } + + get dirs() { + return this.eleventyConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + get includesDir() { + return this.dirs.includes; + } + + get config() { + if (this.eleventyConfig.constructor.name !== "TemplateConfig") { + throw new Error("Expecting a TemplateConfig instance."); + } + + return this.eleventyConfig.getConfig(); + } + + get benchmarks() { + if (!this.#benchmarks) { + this.#benchmarks = { + aggregate: this.config.benchmarkManager.get("Aggregate"), + }; + } + return this.#benchmarks; + } + + get engineManager() { + return this.#engineManager; + } + + set engineManager(manager) { + this.#engineManager = manager; + } + + get extensionMap() { + if (!this.#extensionMap) { + throw new Error("Internal error: missing `extensionMap` in TemplateEngine."); + } + return this.#extensionMap; + } + + set extensionMap(map) { + this.#extensionMap = map; + } + + get extensions() { + if (!this._extensions) { + this._extensions = this.extensionMap.getExtensionsFromKey(this.name); + } + return this._extensions; + } + + get extensionEntries() { + if (!this._extensionEntries) { + this._extensionEntries = this.extensionMap.getExtensionEntriesFromKey(this.name); + } + return this._extensionEntries; + } + + getName() { + return this.name; + } + + // Backwards compat + getIncludesDir() { + return this.includesDir; + } + + /** + * @protected + */ + setEngineLib(engineLib, isOverrideViaSetLibrary = false) { + this.engineLib = engineLib; + + // Run engine amendments (via issue #2438) + // Issue #3816: this isn’t ideal but there is no other way to reset a markdown instance if it was also overridden by addLibrary + if (AMENDED_INSTANCES.has(engineLib)) { + return; + } + + if (isOverrideViaSetLibrary) { + AMENDED_INSTANCES.add(engineLib); + } + debug( + "Running amendLibrary for %o (number of amendments: %o)", + this.name, + this.config.libraryAmendments[this.name]?.length, + ); + + for (let amendment of this.config.libraryAmendments[this.name] || []) { + // TODO it’d be nice if this were async friendly + amendment(engineLib); + } + } + + getEngineLib() { + return this.engineLib; + } + + async _testRender(str, data) { + // @ts-ignore + let fn = await this.compile(str); + return fn(data); + } + + useJavaScriptImport() { + return false; + } + + // JavaScript files defer to the module loader rather than read the files to strings + needsToReadFileContents() { + return true; + } + + getExtraDataFromFile() { + return {}; + } + + getCompileCacheKey(str, inputPath) { + // Changing to use inputPath and contents, using only file contents (`str`) caused issues when two + // different files had identical content (2.0.0-canary.16) + + // Caches are now segmented based on inputPath so using inputPath here is superfluous (2.0.0-canary.19) + // But we do want a non-falsy value here even if `str` is an empty string. + return { + useCache: true, + key: inputPath + str, + }; + } + + get defaultTemplateFileExtension() { + return "html"; + } + + // Whether or not to wrap in Eleventy layouts + useLayouts() { + return true; + } + + /** @returns {boolean|undefined} */ + permalinkNeedsCompilation(str) { + return this.needsCompilation(); + } + + // whether or not compile is needed or can we return the plaintext? + needsCompilation(str) { + return true; + } + + /** + * Make sure compile is implemented downstream. + * @abstract + * @return {Promise} + */ + async compile() { + throw new Error("compile() must be implemented by engine"); + } + + // See https://v3.11ty.dev/docs/watch-serve/#watch-javascript-dependencies + static shouldSpiderJavaScriptDependencies() { + return false; + } + + hasDependencies(inputPath) { + if (this.config.uses.getDependencies(inputPath) === false) { + return false; + } + return true; + } + + isFileRelevantTo(inputPath, comparisonFile) { + return this.config.uses.isFileRelevantTo(inputPath, comparisonFile); + } +} diff --git a/node_modules/@11ty/eleventy/src/Engines/TemplateEngineManager.js b/node_modules/@11ty/eleventy/src/Engines/TemplateEngineManager.js new file mode 100644 index 00000000..913a8036 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/TemplateEngineManager.js @@ -0,0 +1,193 @@ +import debugUtil from "debug"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; + +const debug = debugUtil("Eleventy:TemplateEngineManager"); + +class TemplateEngineManager { + constructor(eleventyConfig) { + if (!eleventyConfig || eleventyConfig.constructor.name !== "TemplateConfig") { + throw new EleventyBaseError("Missing or invalid `config` argument."); + } + this.eleventyConfig = eleventyConfig; + + this.engineCache = {}; + this.importCache = {}; + } + + get config() { + return this.eleventyConfig.getConfig(); + } + + static isAlias(entry) { + if (entry.aliasKey) { + return true; + } + + return entry.key !== entry.extension; + } + + static isSimpleAlias(entry) { + if (!this.isAlias(entry)) { + return false; + } + + // has keys other than key, extension, and aliasKey + return ( + Object.keys(entry).some((key) => { + return key !== "key" && key !== "extension" && key !== "aliasKey"; + }) === false + ); + } + + get keyToClassNameMap() { + if (!this._keyToClassNameMap) { + this._keyToClassNameMap = { + md: "Markdown", + html: "Html", + njk: "Nunjucks", + liquid: "Liquid", + "11ty.js": "JavaScript", + }; + + // Custom entries *can* overwrite default entries above + if ("extensionMap" in this.config) { + for (let entry of this.config.extensionMap) { + // either the key does not already exist or it is not a simple alias and is an override: https://v3.11ty.dev/docs/languages/custom/#overriding-an-existing-template-language + let existingTarget = this._keyToClassNameMap[entry.key]; + let isAlias = TemplateEngineManager.isAlias(entry); + + if (!existingTarget && isAlias) { + throw new Error( + `An attempt to alias ${entry.aliasKey} to ${entry.key} was made, but ${entry.key} is not a recognized template syntax.`, + ); + } + + if (isAlias) { + // only `key` and `extension`, not `compile` or other options + if (!TemplateEngineManager.isSimpleAlias(entry)) { + this._keyToClassNameMap[entry.aliasKey] = "Custom"; + } else { + this._keyToClassNameMap[entry.aliasKey] = this._keyToClassNameMap[entry.key]; + } + } else { + // not an alias, so `key` and `extension` are the same here. + // *can* override a built-in extension! + this._keyToClassNameMap[entry.key] = "Custom"; + } + } + } + } + + return this._keyToClassNameMap; + } + + reset() { + this.engineCache = {}; + } + + getClassNameFromTemplateKey(key) { + return this.keyToClassNameMap[key]; + } + + hasEngine(name) { + return !!this.getClassNameFromTemplateKey(name); + } + + async getEngineClassByExtension(extension) { + if (this.importCache[extension]) { + return this.importCache[extension]; + } + + let promise; + + // We include these as raw strings (and not more readable variables) so they’re parsed by a bundler. + if (extension === "md") { + promise = import("./Markdown.js").then((mod) => mod.default); + } else if (extension === "html") { + promise = import("./Html.js").then((mod) => mod.default); + } else if (extension === "njk") { + promise = import("./Nunjucks.js").then((mod) => mod.default); + } else if (extension === "liquid") { + promise = import("./Liquid.js").then((mod) => mod.default); + } else if (extension === "11ty.js") { + promise = import("./JavaScript.js").then((mod) => mod.default); + } else { + promise = this.getCustomEngineClass(); + } + + this.importCache[extension] = promise; + + return promise; + } + + async getCustomEngineClass() { + if (!this._CustomEngine) { + this._CustomEngine = import("./Custom.js").then((mod) => mod.default); + } + return this._CustomEngine; + } + + async #getEngine(name, extensionMap) { + let cls = await this.getEngineClassByExtension(name); + let instance = new cls(name, this.eleventyConfig); + instance.extensionMap = extensionMap; + instance.engineManager = this; + + let extensionEntry = extensionMap.getExtensionEntry(name); + + // Override a built-in extension (md => md) + // If provided a "Custom" engine using addExtension, but that engine's instance is *not* custom, + // The user must be overriding a built-in engine i.e. addExtension('md', { ...overrideBehavior }) + let className = this.getClassNameFromTemplateKey(name); + + if (className === "Custom" && instance.constructor.name !== "CustomEngine") { + let CustomEngine = await this.getCustomEngineClass(); + let overrideCustomEngine = new CustomEngine(name, this.eleventyConfig); + + // Keep track of the "default" engine 11ty would normally use + // This allows the user to access the default engine in their override + overrideCustomEngine.setDefaultEngine(instance); + + instance = overrideCustomEngine; + // Alias to a built-in extension (11ty.tsx => 11ty.js) + } else if ( + instance.constructor.name === "CustomEngine" && + TemplateEngineManager.isAlias(extensionEntry) + ) { + // add defaultRenderer for complex aliases with their own compile functions. + let originalEngineInstance = await this.getEngine(extensionEntry.key, extensionMap); + instance.setDefaultEngine(originalEngineInstance); + } + + return instance; + } + + isEngineRemovedFromCore(name) { + return ["ejs", "hbs", "mustache", "haml", "pug"].includes(name) && !this.hasEngine(name); + } + + async getEngine(name, extensionMap) { + // Bundled engine deprecation + if (this.isEngineRemovedFromCore(name)) { + throw new Error( + `Per the 11ty Community Survey (2023), the "${name}" template language was moved from core to an officially supported plugin in v3.0. These plugins live here: https://github.com/11ty/eleventy-plugin-template-languages and are documented on their respective template language docs at https://v3.11ty.dev/docs/languages/ You are also empowered to implement *any* template language yourself using https://v3.11ty.dev/docs/languages/custom/`, + ); + } + + if (!this.hasEngine(name)) { + throw new Error(`Template Engine ${name} does not exist in getEngine()`); + } + // TODO these cached engines should be based on extensions not name, then we can remove the error in + // "Double override (not aliases) throws an error" test in TemplateRenderCustomTest.js + if (!this.engineCache[name]) { + debug("Engine cache miss %o (should only happen once per engine type)", name); + // Make sure cache key is based on name and not path + // Custom class is used for all plugins, cache once per plugin + this.engineCache[name] = this.#getEngine(name, extensionMap); + } + + return this.engineCache[name]; + } +} + +export default TemplateEngineManager; diff --git a/node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js b/node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js new file mode 100644 index 00000000..dd5fbc64 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js @@ -0,0 +1,67 @@ +const DATA_KEYS = ["page", "eleventy"]; + +function augmentFunction(fn, options = {}) { + let t = typeof fn; + if (t !== "function") { + throw new Error( + "Invalid type passed to `augmentFunction`. A function was expected and received: " + t, + ); + } + + /** @this {object} */ + return function (...args) { + let context = augmentObject(this || {}, options); + return fn.call(context, ...args); + }; +} + +function augmentObject(targetObject, options = {}) { + options = Object.assign( + { + source: undefined, // where to copy from + overwrite: true, + lazy: false, // lazily fetch the property + // getter: function() {}, + }, + options, + ); + + for (let key of DATA_KEYS) { + // Skip if overwrite: false and prop already exists on target + if (!options.overwrite && targetObject[key]) { + continue; + } + + if (options.lazy) { + let value; + if (typeof options.getter == "function") { + value = () => options.getter(key, options.source); + } else { + value = () => options.source?.[key]; + } + + // lazy getter important for Liquid strictVariables support + Object.defineProperty(targetObject, key, { + writable: true, + configurable: true, + enumerable: true, + value, + }); + } else { + let value; + if (typeof options.getter == "function") { + value = options.getter(key, options.source); + } else { + value = options.source?.[key]; + } + + if (value) { + targetObject[key] = value; + } + } + } + + return targetObject; +} + +export { DATA_KEYS as augmentKeys, augmentFunction, augmentObject }; diff --git a/node_modules/@11ty/eleventy/src/Errors/DuplicatePermalinkOutputError.js b/node_modules/@11ty/eleventy/src/Errors/DuplicatePermalinkOutputError.js new file mode 100644 index 00000000..444195c7 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/DuplicatePermalinkOutputError.js @@ -0,0 +1,9 @@ +import EleventyBaseError from "./EleventyBaseError.js"; + +class DuplicatePermalinkOutputError extends EleventyBaseError { + get removeDuplicateErrorStringFromOutput() { + return true; + } +} + +export default DuplicatePermalinkOutputError; diff --git a/node_modules/@11ty/eleventy/src/Errors/EleventyBaseError.js b/node_modules/@11ty/eleventy/src/Errors/EleventyBaseError.js new file mode 100644 index 00000000..6e76c5f8 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/EleventyBaseError.js @@ -0,0 +1,24 @@ +/** + * This class serves as basis for all Eleventy-specific errors. + * @ignore + */ +class EleventyBaseError extends Error { + /** + * @param {string} message - The error message to display. + * @param {unknown} [originalError] - The original error caught. + */ + constructor(message, originalError) { + super(message); + + this.name = this.constructor.name; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + + if (originalError) { + this.originalError = originalError; + } + } +} +export default EleventyBaseError; diff --git a/node_modules/@11ty/eleventy/src/Errors/EleventyErrorHandler.js b/node_modules/@11ty/eleventy/src/Errors/EleventyErrorHandler.js new file mode 100644 index 00000000..879e65c5 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/EleventyErrorHandler.js @@ -0,0 +1,152 @@ +import util from "node:util"; +import debugUtil from "debug"; + +import ConsoleLogger from "../Util/ConsoleLogger.js"; +import EleventyErrorUtil from "./EleventyErrorUtil.js"; + +const debug = debugUtil("Eleventy:EleventyErrorHandler"); + +class EleventyErrorHandler { + constructor() { + this._isVerbose = true; + } + + get isVerbose() { + return this._isVerbose; + } + + set isVerbose(verbose) { + this._isVerbose = !!verbose; + this.logger.isVerbose = !!verbose; + } + + get logger() { + if (!this._logger) { + this._logger = new ConsoleLogger(); + this._logger.isVerbose = this.isVerbose; + } + + return this._logger; + } + + set logger(logger) { + this._logger = logger; + } + + warn(e, msg) { + if (msg) { + this.initialMessage(msg, "warn", "yellow"); + } + this.log(e, "warn"); + } + + fatal(e, msg) { + this.error(e, msg); + process.exitCode = 1; + } + + once(type, e, msg) { + if (e.__errorAlreadyLogged) { + return; + } + + this[type || "error"](e, msg); + + Object.defineProperty(e, "__errorAlreadyLogged", { + value: true, + }); + } + + error(e, msg) { + if (msg) { + this.initialMessage(msg, "error", "red", true); + } + this.log(e, "error", undefined, true); + } + + static getTotalErrorCount(e) { + let totalErrorCount = 0; + let errorCountRef = e; + while (errorCountRef) { + totalErrorCount++; + errorCountRef = errorCountRef.originalError; + } + return totalErrorCount; + } + + //https://nodejs.org/api/process.html + log(e, type = "log", chalkColor = "", forceToConsole = false) { + if (process.env.DEBUG) { + debug("Full error object: %o", util.inspect(e, { showHidden: false, depth: null })); + } + + let showStack = true; + if (e.skipOriginalStack) { + // Don’t show the full error stack trace + showStack = false; + } + + let totalErrorCount = EleventyErrorHandler.getTotalErrorCount(e); + let ref = e; + let index = 1; + while (ref) { + let nextRef = ref.originalError; + + // Unwrap cause from error and assign it to what Eleventy expects + if (nextRef?.cause) { + nextRef.originalError = nextRef.cause?.originalError ?? nextRef?.cause; + } + + if (!nextRef && EleventyErrorUtil.hasEmbeddedError(ref.message)) { + nextRef = EleventyErrorUtil.deconvertErrorToObject(ref); + } + + if (nextRef?.skipOriginalStack) { + showStack = false; + } + + this.logger.message( + `${totalErrorCount > 1 ? `${index}. ` : ""}${( + EleventyErrorUtil.cleanMessage(ref.message) || "(No error message provided)" + ).trim()}${ref.name !== "Error" ? ` (via ${ref.name})` : ""}`, + type, + chalkColor, + forceToConsole, + ); + + if (process.env.DEBUG) { + debug(`(${type} stack): ${ref.stack}`); + } else if (!nextRef) { + // last error in the loop + + // remove duplicate error messages if the stack contains the original message output above + let stackStr = ref.stack || ""; + if (e.removeDuplicateErrorStringFromOutput) { + stackStr = stackStr.replace( + `${ref.name}: ${ref.message}`, + "(Repeated output has been truncated…)", + ); + } + + if (showStack) { + this.logger.message( + "\nOriginal error stack trace: " + stackStr, + type, + chalkColor, + forceToConsole, + ); + } + } + ref = nextRef; + index++; + } + } + + initialMessage(message, type = "log", chalkColor = "blue", forceToConsole = false) { + if (message) { + this.logger.message(message + ":", type, chalkColor, forceToConsole); + } + } +} + +export { EleventyErrorHandler }; diff --git a/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js b/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js new file mode 100644 index 00000000..6b374d01 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js @@ -0,0 +1,70 @@ +import TemplateContentPrematureUseError from "./TemplateContentPrematureUseError.js"; + +/* Hack to workaround the variety of error handling schemes in template languages */ +class EleventyErrorUtil { + static get prefix() { + return ">>>>>11ty>>>>>"; + } + static get suffix() { + return "<<<<<11ty<<<<<"; + } + + static hasEmbeddedError(msg) { + if (!msg) { + return false; + } + + return msg.includes(EleventyErrorUtil.prefix) && msg.includes(EleventyErrorUtil.suffix); + } + + static cleanMessage(msg) { + if (!msg) { + return ""; + } + + if (!EleventyErrorUtil.hasEmbeddedError(msg)) { + return "" + msg; + } + + return msg.slice(0, Math.max(0, msg.indexOf(EleventyErrorUtil.prefix))); + } + + static deconvertErrorToObject(error) { + if (!error || !error.message) { + throw new Error(`Could not convert error object from: ${error}`); + } + if (!EleventyErrorUtil.hasEmbeddedError(error.message)) { + return error; + } + + let msg = error.message; + let objectString = msg.substring( + msg.indexOf(EleventyErrorUtil.prefix) + EleventyErrorUtil.prefix.length, + msg.lastIndexOf(EleventyErrorUtil.suffix), + ); + let obj = JSON.parse(objectString); + obj.name = error.name; + return obj; + } + + // pass an error through a random template engine’s error handling unscathed + static convertErrorToString(error) { + return ( + EleventyErrorUtil.prefix + + JSON.stringify({ message: error.message, stack: error.stack }) + + EleventyErrorUtil.suffix + ); + } + + static isPrematureTemplateContentError(e) { + // TODO the rest of the template engines + return ( + e instanceof TemplateContentPrematureUseError || + e?.cause instanceof TemplateContentPrematureUseError || // Custom (per Node-convention) + ["RenderError", "UndefinedVariableError"].includes(e?.originalError?.name) && e?.originalError?.originalError instanceof TemplateContentPrematureUseError || // Liquid + e?.message?.includes("TemplateContentPrematureUseError") // Nunjucks + ); + } +} + +export default EleventyErrorUtil; diff --git a/node_modules/@11ty/eleventy/src/Errors/TemplateContentPrematureUseError.js b/node_modules/@11ty/eleventy/src/Errors/TemplateContentPrematureUseError.js new file mode 100644 index 00000000..5266cd27 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/TemplateContentPrematureUseError.js @@ -0,0 +1,5 @@ +import EleventyBaseError from "./EleventyBaseError.js"; + +class TemplateContentPrematureUseError extends EleventyBaseError {} + +export default TemplateContentPrematureUseError; diff --git a/node_modules/@11ty/eleventy/src/Errors/TemplateContentUnrenderedTemplateError.js b/node_modules/@11ty/eleventy/src/Errors/TemplateContentUnrenderedTemplateError.js new file mode 100644 index 00000000..ee270d5d --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/TemplateContentUnrenderedTemplateError.js @@ -0,0 +1,5 @@ +import EleventyBaseError from "./EleventyBaseError.js"; + +class TemplateContentUnrenderedTemplateError extends EleventyBaseError {} + +export default TemplateContentUnrenderedTemplateError; diff --git a/node_modules/@11ty/eleventy/src/Errors/UsingCircularTemplateContentReferenceError.js b/node_modules/@11ty/eleventy/src/Errors/UsingCircularTemplateContentReferenceError.js new file mode 100644 index 00000000..5608febb --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Errors/UsingCircularTemplateContentReferenceError.js @@ -0,0 +1,5 @@ +import EleventyBaseError from "./EleventyBaseError.js"; + +class UsingCircularTemplateContentReferenceError extends EleventyBaseError {} + +export default UsingCircularTemplateContentReferenceError; diff --git a/node_modules/@11ty/eleventy/src/EventBus.js b/node_modules/@11ty/eleventy/src/EventBus.js new file mode 100644 index 00000000..0aa41264 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/EventBus.js @@ -0,0 +1,23 @@ +import debugUtil from "debug"; + +import EventEmitter from "./Util/AsyncEventEmitter.js"; + +const debug = debugUtil("Eleventy:EventBus"); + +/** + * @module 11ty/eleventy/EventBus + * @ignore + */ + +debug("Setting up global EventBus."); +/** + * Provides a global event bus that modules deep down in the stack can + * subscribe to from a global singleton for decoupled pub/sub. + * @type {module:11ty/eleventy/Util/AsyncEventEmitter~AsyncEventEmitter} + */ +let bus = new EventEmitter(); +bus.setMaxListeners(100); // defaults to 10 + +debug("EventBus max listener count: %o", bus.getMaxListeners()); + +export default bus; diff --git a/node_modules/@11ty/eleventy/src/FileSystemSearch.js b/node_modules/@11ty/eleventy/src/FileSystemSearch.js new file mode 100644 index 00000000..972e80ba --- /dev/null +++ b/node_modules/@11ty/eleventy/src/FileSystemSearch.js @@ -0,0 +1,129 @@ +import { glob } from "tinyglobby"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import FileSystemRemap from "./Util/GlobRemap.js"; +import { isGlobMatch } from "./Util/GlobMatcher.js"; + +const debug = debugUtil("Eleventy:FileSystemSearch"); + +class FileSystemSearch { + constructor() { + this.inputs = {}; + this.outputs = {}; + this.promises = {}; + this.count = 0; + } + + getCacheKey(key, globs, options) { + if (Array.isArray(globs)) { + globs = globs.sort(); + } + return key + JSON.stringify(globs) + JSON.stringify(options); + } + + // returns a promise + search(key, globs, options = {}) { + debug("Glob search (%o) searching for: %o", key, globs); + + if (!Array.isArray(globs)) { + globs = [globs]; + } + + // Strip leading slashes from everything! + globs = globs.map((entry) => TemplatePath.stripLeadingDotSlash(entry)); + + let cwd = FileSystemRemap.getCwd(globs); + if (cwd) { + options.cwd = cwd; + } + + if (options.ignore && Array.isArray(options.ignore)) { + options.ignore = options.ignore.map((entry) => { + entry = TemplatePath.stripLeadingDotSlash(entry); + + return FileSystemRemap.remapInput(entry, cwd); + }); + debug("Glob search (%o) ignoring: %o", key, options.ignore); + } + + let cacheKey = this.getCacheKey(key, globs, options); + + // Only after the promise has resolved + if (this.outputs[cacheKey]) { + return Array.from(this.outputs[cacheKey]); + } + + if (!this.promises[cacheKey]) { + this.inputs[cacheKey] = { + input: globs, + options, + }; + + this.count++; + + globs = globs.map((entry) => { + if (cwd && entry.startsWith(cwd)) { + return FileSystemRemap.remapInput(entry, cwd); + } + + return entry; + }); + + this.promises[cacheKey] = glob( + globs, + Object.assign( + { + caseSensitiveMatch: false, // insensitive + dot: true, + }, + options, + ), + ).then((results) => { + this.outputs[cacheKey] = new Set( + results.map((entry) => { + let remapped = FileSystemRemap.remapOutput(entry, options.cwd); + return TemplatePath.standardizeFilePath(remapped); + }), + ); + + return Array.from(this.outputs[cacheKey]); + }); + } + + // may be an unresolved promise + return this.promises[cacheKey]; + } + + _modify(path, setOperation) { + path = TemplatePath.stripLeadingDotSlash(path); + + let normalized = TemplatePath.standardizeFilePath(path); + + for (let key in this.inputs) { + let { input, options } = this.inputs[key]; + if ( + isGlobMatch(path, input, { + ignore: options.ignore, + }) + ) { + this.outputs[key][setOperation](normalized); + } + } + } + + add(path) { + this._modify(path, "add"); + } + + delete(path) { + this._modify(path, "delete"); + } + + // Issue #3859 get rid of chokidar globs + // getAllOutputFiles() { + // return Object.values(this.outputs).map(set => Array.from(set)).flat(); + // } +} + +export default FileSystemSearch; diff --git a/node_modules/@11ty/eleventy/src/Filters/GetCollectionItem.js b/node_modules/@11ty/eleventy/src/Filters/GetCollectionItem.js new file mode 100644 index 00000000..7512940b --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Filters/GetCollectionItem.js @@ -0,0 +1,20 @@ +export default function getCollectionItem(collection, page, modifier = 0) { + let j = 0; + let index; + for (let item of collection) { + if ( + item.inputPath === page.inputPath && + (item.outputPath === page.outputPath || item.url === page.url) + ) { + index = j; + break; + } + j++; + } + + if (index !== undefined && collection?.length) { + if (index + modifier >= 0 && index + modifier < collection.length) { + return collection[index + modifier]; + } + } +} diff --git a/node_modules/@11ty/eleventy/src/Filters/GetCollectionItemIndex.js b/node_modules/@11ty/eleventy/src/Filters/GetCollectionItemIndex.js new file mode 100644 index 00000000..9e12854b --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Filters/GetCollectionItemIndex.js @@ -0,0 +1,17 @@ +// TODO locale-friendly, see GetLocaleCollectionItem.js) +export default function getCollectionItemIndex(collection, page) { + if (!page) { + page = this.page; + } + + let j = 0; + for (let item of collection) { + if ( + item.inputPath === page.inputPath && + (item.outputPath === page.outputPath || item.url === page.url) + ) { + return j; + } + j++; + } +} diff --git a/node_modules/@11ty/eleventy/src/Filters/GetLocaleCollectionItem.js b/node_modules/@11ty/eleventy/src/Filters/GetLocaleCollectionItem.js new file mode 100644 index 00000000..1f966228 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Filters/GetLocaleCollectionItem.js @@ -0,0 +1,47 @@ +import getCollectionItem from "./GetCollectionItem.js"; + +// Work with I18n Plugin src/Plugins/I18nPlugin.js to retrieve root pages (not i18n pages) +function resolveRootPage(config, pageOverride, languageCode) { + let localeFilter = config.getFilter("locale_page"); + if (!localeFilter || typeof localeFilter !== "function") { + return pageOverride; + } + + // returns root/default-language `page` object + return localeFilter.call(this, pageOverride, languageCode); +} + +function getLocaleCollectionItem(config, collection, pageOverride, langCode, indexModifier = 0) { + if (!langCode) { + // if page.lang exists (2.0.0-canary.14 and i18n plugin added, use page language) + if (this.page.lang) { + langCode = this.page.lang; + } else { + return getCollectionItem(collection, pageOverride || this.page, indexModifier); + } + } + + let rootPage = resolveRootPage.call(this, config, pageOverride); // implied current page, default language + let modifiedRootItem = getCollectionItem(collection, rootPage, indexModifier); + if (!modifiedRootItem) { + return; // no root item exists for the previous/next page + } + + // Resolve modified root `page` back to locale `page` + // This will return a non localized version of the page as a fallback + let modifiedLocalePage = resolveRootPage.call(this, config, modifiedRootItem.data.page, langCode); + // already localized (or default language) + if (!("__locale_page_resolved" in modifiedLocalePage)) { + return modifiedRootItem; + } + + // find the modified locale `page` again in `collections.all` + let all = + this.collections?.all || + this.ctx?.collections?.all || + this.context?.environments?.collections?.all || + []; + return getCollectionItem(all, modifiedLocalePage, 0); +} + +export default getLocaleCollectionItem; diff --git a/node_modules/@11ty/eleventy/src/Filters/Slug.js b/node_modules/@11ty/eleventy/src/Filters/Slug.js new file mode 100644 index 00000000..03a77cc0 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Filters/Slug.js @@ -0,0 +1,14 @@ +import slugify from "slugify"; + +export default function (str, options = {}) { + return slugify( + "" + str, + Object.assign( + { + replacement: "-", + lower: true, + }, + options, + ), + ); +} diff --git a/node_modules/@11ty/eleventy/src/Filters/Slugify.js b/node_modules/@11ty/eleventy/src/Filters/Slugify.js new file mode 100644 index 00000000..e84b42d1 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Filters/Slugify.js @@ -0,0 +1,14 @@ +import slugify from "@sindresorhus/slugify"; + +export default function (str, options = {}) { + return slugify( + "" + str, + Object.assign( + { + // lowercase: true, // default + decamelize: false, + }, + options, + ), + ); +} diff --git a/node_modules/@11ty/eleventy/src/Filters/Url.js b/node_modules/@11ty/eleventy/src/Filters/Url.js new file mode 100644 index 00000000..87fc1e2e --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Filters/Url.js @@ -0,0 +1,35 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; + +import isValidUrl from "../Util/ValidUrl.js"; + +// Note: This filter is used in the Eleventy Navigation plugin in versions prior to 0.3.4 +export default function (url, pathPrefix) { + // work with undefined + url = url || ""; + + if (isValidUrl(url) || (url.startsWith("//") && url !== "//")) { + return url; + } + + if (pathPrefix === undefined || typeof pathPrefix !== "string") { + // When you retrieve this with config.getFilter("url") it + // grabs the pathPrefix argument from your config for you (see defaultConfig.js) + throw new Error("pathPrefix (String) is required in the `url` filter."); + } + + let normUrl = TemplatePath.normalizeUrlPath(url); + let normRootDir = TemplatePath.normalizeUrlPath("/", pathPrefix); + let normFull = TemplatePath.normalizeUrlPath("/", pathPrefix, url); + let isRootDirTrailingSlash = + normRootDir.length && normRootDir.charAt(normRootDir.length - 1) === "/"; + + // minor difference with straight `normalize`, "" resolves to root dir and not "." + // minor difference with straight `normalize`, "/" resolves to root dir + if (normUrl === "/" || normUrl === normRootDir) { + return normRootDir + (!isRootDirTrailingSlash ? "/" : ""); + } else if (normUrl.indexOf("/") === 0) { + return normFull; + } + + return normUrl; +} diff --git a/node_modules/@11ty/eleventy/src/GlobalDependencyMap.js b/node_modules/@11ty/eleventy/src/GlobalDependencyMap.js new file mode 100644 index 00000000..7e169daf --- /dev/null +++ b/node_modules/@11ty/eleventy/src/GlobalDependencyMap.js @@ -0,0 +1,463 @@ +import debugUtil from "debug"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +import JavaScriptDependencies from "./Util/JavaScriptDependencies.js"; +import PathNormalizer from "./Util/PathNormalizer.js"; +import { TemplateDepGraph } from "./Util/TemplateDepGraph.js"; + +const debug = debugUtil("Eleventy:Dependencies"); + +class GlobalDependencyMap { + // dependency-graph requires these keys to be alphabetic strings + static LAYOUT_KEY = "layout"; + static COLLECTION_PREFIX = "__collection:"; // must match TemplateDepGraph key + + #map; + #templateConfig; + #cachedUserConfigurationCollectionApiNames; + + static isCollection(entry) { + return entry.startsWith(this.COLLECTION_PREFIX); + } + + static getTagName(entry) { + if (this.isCollection(entry)) { + return entry.slice(this.COLLECTION_PREFIX.length); + } + } + + static getCollectionKeyForEntry(entry) { + return `${GlobalDependencyMap.COLLECTION_PREFIX}${entry}`; + } + + reset() { + this.#map = undefined; + } + + setIsEsm(isEsm) { + this.isEsm = isEsm; + } + + setTemplateConfig(templateConfig) { + this.#templateConfig = templateConfig; + + // These have leading dot slashes, but so do the paths from Eleventy + this.#templateConfig.userConfig.events.once("eleventy.layouts", async (layouts) => { + await this.addLayoutsToMap(layouts); + }); + } + + get userConfigurationCollectionApiNames() { + if (this.#cachedUserConfigurationCollectionApiNames) { + return this.#cachedUserConfigurationCollectionApiNames; + } + return Object.keys(this.#templateConfig.userConfig.getCollections()) || []; + } + + initializeUserConfigurationApiCollections() { + this.addCollectionApiNames(this.userConfigurationCollectionApiNames); + } + + // For Testing + setCollectionApiNames(names = []) { + this.#cachedUserConfigurationCollectionApiNames = names; + } + + addCollectionApiNames(names = []) { + if (!names || names.length === 0) { + return; + } + + for (let collectionName of names) { + this.map.addConfigCollectionName(collectionName); + } + } + + filterOutLayouts(nodes = []) { + return nodes.filter((node) => { + if (GlobalDependencyMap.isLayoutNode(this.map, node)) { + return false; + } + return true; + }); + } + + filterOutCollections(nodes = []) { + return nodes.filter((node) => !node.startsWith(GlobalDependencyMap.COLLECTION_PREFIX)); + } + + static removeLayoutNodes(graph, nodeList) { + return nodeList.filter((node) => { + if (this.isLayoutNode(graph, node)) { + return false; + } + return true; + }); + } + + removeLayoutNodes(normalizedLayouts) { + let nodes = this.map.overallOrder(); + for (let node of nodes) { + if (!GlobalDependencyMap.isLayoutNode(this.map, node)) { + continue; + } + + // previous layout is not in the new layout map (no templates are using it) + if (!normalizedLayouts[node]) { + this.map.removeNode(node); + } + // important: if the layout map changed to have different templates (but was not removed) + // this is already handled by `resetNode` called via TemplateMap + } + } + + // Eleventy Layouts don’t show up in the dependency graph, so we handle those separately + async addLayoutsToMap(layouts) { + let normalizedLayouts = this.normalizeLayoutsObject(layouts); + + // Clear out any previous layout relationships to make way for the new ones + this.removeLayoutNodes(normalizedLayouts); + + for (let layout in normalizedLayouts) { + // We add this pre-emptively to add the `layout` data + if (!this.map.hasNode(layout)) { + this.map.addNode(layout, { + type: GlobalDependencyMap.LAYOUT_KEY, + }); + } else { + this.map.setNodeData(layout, { + type: GlobalDependencyMap.LAYOUT_KEY, + }); + } + + // Potential improvement: only add the first template in the chain for a template and manage any upstream layouts by their own relationships + for (let pageTemplate of normalizedLayouts[layout]) { + this.addDependency(pageTemplate, [layout]); + } + + if (this.#templateConfig?.shouldSpiderJavaScriptDependencies()) { + let deps = await JavaScriptDependencies.getDependencies([layout], this.isEsm); + this.addDependency(layout, deps); + } + } + } + + get map() { + if (!this.#map) { + // this.#map = new DepGraph({ circular: true }); + this.#map = new TemplateDepGraph(); + } + + return this.#map; + } + + set map(graph) { + this.#map = graph; + } + + normalizeNode(node) { + if (!node) { + return; + } + + // TODO tests for this + // Fix URL objects passed in (sass does this) + if (typeof node !== "string" && "toString" in node) { + node = node.toString(); + } + + if (typeof node !== "string") { + throw new Error("`addDependencies` files must be strings. Received:" + node); + } + + return PathNormalizer.fullNormalization(node); + } + + normalizeLayoutsObject(layouts) { + let o = {}; + for (let rawLayout in layouts) { + let layout = this.normalizeNode(rawLayout); + o[layout] = layouts[rawLayout].map((entry) => this.normalizeNode(entry)); + } + return o; + } + + getDependantsFor(node) { + if (!node) { + return []; + } + + node = this.normalizeNode(node); + + if (!this.map.hasNode(node)) { + return []; + } + + // Direct dependants and dependencies, both publish and consume from collections + return this.map.directDependantsOf(node); + } + + hasNode(node) { + return this.map.hasNode(this.normalizeNode(node)); + } + + findCollectionsRemovedFrom(node, collectionNames) { + if (!this.hasNode(node)) { + return new Set(); + } + + let prevDeps = this.getDependantsFor(node) + .map((entry) => GlobalDependencyMap.getTagName(entry)) + .filter(Boolean); + + let prevDepsSet = new Set(prevDeps); + let deleted = new Set(); + for (let dep of prevDepsSet) { + if (!collectionNames.has(dep)) { + deleted.add(dep); + } + } + + return deleted; + } + + resetNode(node) { + node = this.normalizeNode(node); + + if (!this.map.hasNode(node)) { + return; + } + + // We don’t want to remove relationships that consume this, controlled by the upstream content + // for (let dep of this.map.directDependantsOf(node)) { + // this.map.removeDependency(dep, node); + // } + + for (let dep of this.map.directDependenciesOf(node)) { + this.map.removeDependency(node, dep); + } + } + + getTemplatesThatConsumeCollections(collectionNames) { + let templates = new Set(); + for (let name of collectionNames) { + let collectionKey = GlobalDependencyMap.getCollectionKeyForEntry(name); + if (!this.map.hasNode(collectionKey)) { + continue; + } + for (let node of this.map.dependantsOf(collectionKey)) { + if (!node.startsWith(GlobalDependencyMap.COLLECTION_PREFIX)) { + if (!GlobalDependencyMap.isLayoutNode(this.map, node)) { + templates.add(node); + } + } + } + } + return templates; + } + + static isLayoutNode(graph, node) { + if (!graph.hasNode(node)) { + return false; + } + return graph.getNodeData(node)?.type === GlobalDependencyMap.LAYOUT_KEY; + } + + getLayoutsUsedBy(node) { + node = this.normalizeNode(node); + + if (!this.map.hasNode(node)) { + return []; + } + + let layouts = []; + + // include self, if layout + if (GlobalDependencyMap.isLayoutNode(this.map, node)) { + layouts.push(node); + } + + this.map.dependantsOf(node).forEach((node) => { + // we only want layouts + if (GlobalDependencyMap.isLayoutNode(this.map, node)) { + return layouts.push(node); + } + }); + + return layouts; + } + + // In order + // Does not include original templatePaths (unless *they* are second-order relevant) + getTemplatesRelevantToTemplateList(templatePaths) { + let overallOrder = this.map.overallOrder(); + overallOrder = this.filterOutLayouts(overallOrder); + overallOrder = this.filterOutCollections(overallOrder); + + let relevantLookup = {}; + for (let inputPath of templatePaths) { + inputPath = TemplatePath.stripLeadingDotSlash(inputPath); + + let deps = this.getDependencies(inputPath, false); + + if (Array.isArray(deps)) { + let paths = this.filterOutCollections(deps); + for (let node of paths) { + relevantLookup[node] = true; + } + } + } + + return overallOrder.filter((node) => { + if (relevantLookup[node]) { + return true; + } + return false; + }); + } + + // Layouts are not relevant to compile cache and can be ignored + getDependencies(node, includeLayouts = true) { + node = this.normalizeNode(node); + + // `false` means the Node was unknown + if (!this.map.hasNode(node)) { + return false; + } + + if (includeLayouts) { + return this.map.dependenciesOf(node).filter(Boolean); + } + + return GlobalDependencyMap.removeLayoutNodes(this.map, this.map.dependenciesOf(node)); + } + + #addNode(name) { + if (this.map.hasNode(name)) { + return; + } + + this.map.addNode(name); + } + + // node arguments are already normalized + #addDependency(from, toArray = []) { + this.#addNode(from); // only if not already added + + if (!Array.isArray(toArray)) { + throw new Error("Second argument to `addDependency` must be an Array."); + } + + // debug("%o depends on %o", from, toArray); + for (let to of toArray) { + this.#addNode(to); // only if not already added + if (from !== to) { + this.map.addDependency(from, to); + } + } + } + + addDependency(from, toArray = []) { + this.#addDependency( + this.normalizeNode(from), + toArray.map((to) => this.normalizeNode(to)), + ); + } + + addNewNodeRelationships(from, consumes = [], publishes = []) { + consumes = consumes.filter(Boolean); + publishes = publishes.filter(Boolean); + + debug("%o consumes %o and publishes to %o", from, consumes, publishes); + from = this.normalizeNode(from); + + this.map.addTemplate(from, consumes, publishes); + } + + // Layouts are not relevant to compile cache and can be ignored + hasDependency(from, to, includeLayouts) { + to = this.normalizeNode(to); + + let deps = this.getDependencies(from, includeLayouts); // normalizes `from` + + if (!deps) { + return false; + } + + return deps.includes(to); + } + + // Layouts are not relevant to compile cache and can be ignored + isFileRelevantTo(fullTemplateInputPath, comparisonFile, includeLayouts) { + fullTemplateInputPath = this.normalizeNode(fullTemplateInputPath); + comparisonFile = this.normalizeNode(comparisonFile); + + // No watch/serve changed file + if (!comparisonFile) { + return false; + } + + // The file that changed is the relevant file + if (fullTemplateInputPath === comparisonFile) { + return true; + } + + // The file that changed is a dependency of the template + // comparisonFile is used by fullTemplateInputPath + if (this.hasDependency(fullTemplateInputPath, comparisonFile, includeLayouts)) { + return true; + } + + return false; + } + + isFileUsedBy(parent, child, includeLayouts) { + if (this.hasDependency(parent, child, includeLayouts)) { + // child is used by parent + return true; + } + return false; + } + + getTemplateOrder() { + let order = []; + for (let entry of this.map.overallOrder()) { + order.push(entry); + } + + return order; + } + + stringify() { + return JSON.stringify(this.map, function replacer(key, value) { + // Serialize internal Map objects. + if (value instanceof Map) { + let obj = {}; + for (let [k, v] of value) { + obj[k] = v; + } + return obj; + } + + return value; + }); + } + + restore(persisted) { + let obj = JSON.parse(persisted); + let graph = new TemplateDepGraph(); + + // https://github.com/jriecken/dependency-graph/issues/44 + // Restore top level serialized Map objects (in stringify above) + for (let key in obj) { + let map = graph[key]; + for (let k in obj[key]) { + let v = obj[key][k]; + map.set(k, v); + } + } + this.map = graph; + } +} + +export default GlobalDependencyMap; diff --git a/node_modules/@11ty/eleventy/src/LayoutCache.js b/node_modules/@11ty/eleventy/src/LayoutCache.js new file mode 100644 index 00000000..006f502d --- /dev/null +++ b/node_modules/@11ty/eleventy/src/LayoutCache.js @@ -0,0 +1,98 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; + +import eventBus from "./EventBus.js"; + +// Note: this is only used for TemplateLayout right now but could be used for more +// Just be careful because right now the TemplateLayout cache keys are not directly mapped to paths +// So you may get collisions if you use this for other things. +class LayoutCache { + constructor() { + this.cache = {}; + this.cacheByInputPath = {}; + } + + clear() { + this.cache = {}; + this.cacheByInputPath = {}; + } + + // alias + removeAll() { + for (let layoutFilePath in this.cacheByInputPath) { + this.remove(layoutFilePath); + } + this.clear(); + } + + size() { + return Object.keys(this.cacheByInputPath).length; + } + + add(layoutTemplate) { + let keys = new Set(); + + if (typeof layoutTemplate === "string") { + throw new Error( + "Invalid argument type passed to LayoutCache->add(). Should be a TemplateLayout.", + ); + } + + if ("getFullKey" in layoutTemplate) { + keys.add(layoutTemplate.getFullKey()); + } + + if ("getKey" in layoutTemplate) { + // if `key` was an alias, also set to the pathed layout value too + // e.g. `layout: "default"` and `layout: "default.liquid"` will both map to the same template. + keys.add(layoutTemplate.getKey()); + } + + for (let key of keys) { + this.cache[key] = layoutTemplate; + } + + // also the full template input path for use with eleventy --serve/--watch e.g. `_includes/default.liquid` (see `remove` below) + let fullPath = TemplatePath.stripLeadingDotSlash(layoutTemplate.inputPath); + this.cacheByInputPath[fullPath] = layoutTemplate; + } + + has(key) { + return key in this.cache; + } + + get(key) { + if (!this.has(key)) { + throw new Error(`Could not find ${key} in LayoutCache.`); + } + + return this.cache[key]; + } + + remove(layoutFilePath) { + layoutFilePath = TemplatePath.stripLeadingDotSlash(layoutFilePath); + if (!this.cacheByInputPath[layoutFilePath]) { + // not a layout file + return; + } + + let layoutTemplate = this.cacheByInputPath[layoutFilePath]; + layoutTemplate.resetCaches(); + + let keys = layoutTemplate.getCacheKeys(); + for (let key of keys) { + delete this.cache[key]; + } + + delete this.cacheByInputPath[layoutFilePath]; + } +} + +let layoutCache = new LayoutCache(); + +eventBus.on("eleventy.resourceModified", () => { + // https://github.com/11ty/eleventy-plugin-bundle/issues/10 + layoutCache.removeAll(); +}); + +// singleton +export default layoutCache; diff --git a/node_modules/@11ty/eleventy/src/Plugins/HtmlBasePlugin.js b/node_modules/@11ty/eleventy/src/Plugins/HtmlBasePlugin.js new file mode 100644 index 00000000..304c0a24 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/HtmlBasePlugin.js @@ -0,0 +1,160 @@ +import { DeepCopy } from "@11ty/eleventy-utils"; +import urlFilter from "../Filters/Url.js"; +import PathPrefixer from "../Util/PathPrefixer.js"; +import { HtmlTransformer } from "../Util/HtmlTransformer.js"; +import isValidUrl from "../Util/ValidUrl.js"; + +function addPathPrefixToUrl(url, pathPrefix, base) { + let u; + if (base) { + u = new URL(url, base); + } else { + u = new URL(url); + } + + // Add pathPrefix **after** url is transformed using base + if (pathPrefix) { + u.pathname = PathPrefixer.joinUrlParts(pathPrefix, u.pathname); + } + return u.toString(); +} + +// pathprefix is only used when overrideBase is a full URL +function transformUrl(url, base, opts = {}) { + let { pathPrefix, pageUrl, htmlContext } = opts; + + // Warning, this will not work with HtmlTransformer, as we’ll receive "false" (string) here instead of `false` (boolean) + if (url === false) { + throw new Error( + `Invalid url transformed in the HTML \`\` plugin.${url === false ? ` Did you attempt to link to a \`permalink: false\` page?` : ""} Received: ${url}`, + ); + } + + // full URL, return as-is + if (isValidUrl(url)) { + return url; + } + + // Not a full URL, but with a full base URL + // e.g. relative urls like "subdir/", "../subdir", "./subdir" + if (isValidUrl(base)) { + // convert relative paths to absolute path first using pageUrl + if (pageUrl && !url.startsWith("/")) { + let urlObj = new URL(url, `http://example.com${pageUrl}`); + url = urlObj.pathname + (urlObj.hash || ""); + } + + return addPathPrefixToUrl(url, pathPrefix, base); + } + + // Not a full URL, nor a full base URL (call the built-in `url` filter) + return urlFilter(url, base); +} + +function eleventyHtmlBasePlugin(eleventyConfig, defaultOptions = {}) { + let opts = DeepCopy( + { + // eleventyConfig.pathPrefix is new in Eleventy 2.0.0-canary.15 + // `base` can be a directory (for path prefix transformations) + // OR a full URL with origin and pathname + baseHref: eleventyConfig.pathPrefix, + + extensions: "html", + }, + defaultOptions, + ); + + // `filters` option to rename filters was removed in 3.0.0-alpha.13 + // Renaming these would cause issues in other plugins (e.g. RSS) + if (opts.filters !== undefined) { + throw new Error( + "The `filters` option in the HTML Base plugin was removed to prevent future cross-plugin compatibility issues.", + ); + } + + if (opts.baseHref === undefined) { + throw new Error("The `baseHref` option is required in the HTML Base plugin."); + } + + eleventyConfig.addFilter("addPathPrefixToFullUrl", function (url) { + return addPathPrefixToUrl(url, eleventyConfig.pathPrefix); + }); + + // Apply to one URL + eleventyConfig.addFilter( + "htmlBaseUrl", + + /** @this {object} */ + function (url, baseOverride, pageUrlOverride) { + let base = baseOverride || opts.baseHref; + + // Do nothing with a default base + if (base === "/") { + return url; + } + + return transformUrl(url, base, { + pathPrefix: eleventyConfig.pathPrefix, + pageUrl: pageUrlOverride || this.page?.url, + }); + }, + ); + + // Apply to a block of HTML + eleventyConfig.addAsyncFilter( + "transformWithHtmlBase", + + /** @this {object} */ + function (content, baseOverride, pageUrlOverride) { + let base = baseOverride || opts.baseHref; + + // Do nothing with a default base + if (base === "/") { + return content; + } + + return HtmlTransformer.transformStandalone(content, (url, htmlContext) => { + return transformUrl(url.trim(), base, { + pathPrefix: eleventyConfig.pathPrefix, + pageUrl: pageUrlOverride || this.page?.url, + htmlContext, + }); + }); + }, + ); + + // Apply to all HTML output in your project + eleventyConfig.htmlTransformer.addUrlTransform( + opts.extensions, + + /** @this {object} */ + function (urlInMarkup, htmlContext) { + // baseHref override is via renderTransforms filter for adding the absolute URL (e.g. https://example.com/pathPrefix/) for RSS/Atom/JSON feeds + return transformUrl(urlInMarkup.trim(), this.baseHref || opts.baseHref, { + pathPrefix: eleventyConfig.pathPrefix, + pageUrl: this.url, + htmlContext, + }); + }, + { + priority: -2, // priority is descending, so this runs last (especially after AutoCopy and InputPathToUrl transform) + enabled: function (context) { + // Enabled when pathPrefix is non-default or via renderTransforms + return Boolean(context.baseHref) || opts.baseHref !== "/"; + }, + }, + ); +} + +Object.defineProperty(eleventyHtmlBasePlugin, "eleventyPackage", { + value: "@11ty/eleventy/html-base-plugin", +}); + +Object.defineProperty(eleventyHtmlBasePlugin, "eleventyPluginOptions", { + value: { + unique: true, + }, +}); + +export default eleventyHtmlBasePlugin; +export { transformUrl as applyBaseToUrl }; diff --git a/node_modules/@11ty/eleventy/src/Plugins/HtmlRelativeCopyPlugin.js b/node_modules/@11ty/eleventy/src/Plugins/HtmlRelativeCopyPlugin.js new file mode 100644 index 00000000..ac1391dc --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/HtmlRelativeCopyPlugin.js @@ -0,0 +1,52 @@ +import { HtmlRelativeCopy } from "../Util/HtmlRelativeCopy.js"; + +// one HtmlRelativeCopy instance per entry +function init(eleventyConfig, options) { + let opts = Object.assign( + { + extensions: "html", + match: false, // can be one glob string or an array of globs + paths: [], // directories to also look in for files + failOnError: true, // fails when a path matches (via `match`) but not found on file system + copyOptions: undefined, + }, + options, + ); + + let htmlrel = new HtmlRelativeCopy(); + htmlrel.setUserConfig(eleventyConfig); + htmlrel.addMatchingGlob(opts.match); + htmlrel.setFailOnError(opts.failOnError); + htmlrel.setCopyOptions(opts.copyOptions); + + eleventyConfig.htmlTransformer.addUrlTransform( + opts.extensions, + function (targetFilepathOrUrl) { + // @ts-ignore + htmlrel.copy(targetFilepathOrUrl, this.page.inputPath, this.page.outputPath); + + // TODO front matter option for manual copy + return targetFilepathOrUrl; + }, + { + enabled: () => htmlrel.isEnabled(), + // - MUST run after other plugins but BEFORE HtmlBase plugin + priority: -1, + }, + ); + + htmlrel.addPaths(opts.paths); +} + +function HtmlRelativeCopyPlugin(eleventyConfig) { + // Important: if this is empty, no URL transforms are added + for (let options of eleventyConfig.passthroughCopiesHtmlRelative) { + init(eleventyConfig, options); + } +} + +Object.defineProperty(HtmlRelativeCopyPlugin, "eleventyPackage", { + value: "@11ty/eleventy/html-relative-copy-plugin", +}); + +export { HtmlRelativeCopyPlugin }; diff --git a/node_modules/@11ty/eleventy/src/Plugins/I18nPlugin.js b/node_modules/@11ty/eleventy/src/Plugins/I18nPlugin.js new file mode 100644 index 00000000..6f53825f --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/I18nPlugin.js @@ -0,0 +1,317 @@ +import { bcp47Normalize } from "bcp-47-normalize"; +import iso639 from "iso-639-1"; +import { DeepCopy } from "@11ty/eleventy-utils"; + +// pathPrefix note: +// When using `locale_url` filter with the `url` filter, `locale_url` must run first like +// `| locale_url | url`. If you run `| url | locale_url` it won’t match correctly. + +// TODO improvement would be to throw an error if `locale_url` finds a url with the +// path prefix at the beginning? Would need a better way to know `url` has transformed a string +// rather than just raw comparison. +// e.g. --pathprefix=/en/ should return `/en/en/` for `/en/index.liquid` + +class LangUtils { + static getLanguageCodeFromInputPath(filepath) { + return (filepath || "").split("/").find((entry) => Comparator.isLangCode(entry)); + } + + static getLanguageCodeFromUrl(url) { + let s = (url || "").split("/"); + return s.length > 0 && Comparator.isLangCode(s[1]) ? s[1] : ""; + } + + static swapLanguageCodeNoCheck(str, langCode) { + let found = false; + return str + .split("/") + .map((entry) => { + // only match the first one + if (!found && Comparator.isLangCode(entry)) { + found = true; + return langCode; + } + return entry; + }) + .join("/"); + } + + static swapLanguageCode(str, langCode) { + if (!Comparator.isLangCode(langCode)) { + return str; + } + + return LangUtils.swapLanguageCodeNoCheck(str, langCode); + } +} + +class Comparator { + // https://en.wikipedia.org/wiki/IETF_language_tag#Relation_to_other_standards + // Requires a ISO-639-1 language code at the start (2 characters before the first -) + static isLangCode(code) { + let [s] = (code || "").split("-"); + if (!iso639.validate(s)) { + return false; + } + if (!bcp47Normalize(code)) { + return false; + } + return true; + } + + static urlHasLangCode(url, code) { + if (!Comparator.isLangCode(code)) { + return false; + } + + return url.split("/").some((entry) => entry === code); + } +} + +function normalizeInputPath(inputPath, extensionMap) { + if (extensionMap) { + return extensionMap.removeTemplateExtension(inputPath); + } + return inputPath; +} + +/* + * Input: { + * '/en-us/test/': './test/stubs-i18n/en-us/test.11ty.js', + * '/en/test/': './test/stubs-i18n/en/test.liquid', + * '/es/test/': './test/stubs-i18n/es/test.njk', + * '/non-lang-file/': './test/stubs-i18n/non-lang-file.njk' + * } + * + * Output: { + * '/en-us/test/': [ { url: '/en/test/' }, { url: '/es/test/' } ], + * '/en/test/': [ { url: '/en-us/test/' }, { url: '/es/test/' } ], + * '/es/test/': [ { url: '/en-us/test/' }, { url: '/en/test/' } ] + * } + */ +function getLocaleUrlsMap(urlToInputPath, extensionMap, options = {}) { + let filemap = {}; + + for (let url in urlToInputPath) { + // Group number comes from Pagination.js + let { inputPath: originalFilepath, groupNumber } = urlToInputPath[url]; + let filepath = normalizeInputPath(originalFilepath, extensionMap); + let replaced = + LangUtils.swapLanguageCodeNoCheck(filepath, "__11ty_i18n") + `_group:${groupNumber}`; + + if (!filemap[replaced]) { + filemap[replaced] = []; + } + + let langCode = LangUtils.getLanguageCodeFromInputPath(originalFilepath); + if (!langCode) { + langCode = LangUtils.getLanguageCodeFromUrl(url); + } + if (!langCode) { + langCode = options.defaultLanguage; + } + + if (langCode) { + filemap[replaced].push({ + url, + lang: langCode, + label: iso639.getNativeName(langCode.split("-")[0]), + }); + } else { + filemap[replaced].push({ url }); + } + } + + // Default sorted by lang code + for (let key in filemap) { + filemap[key].sort(function (a, b) { + if (a.lang < b.lang) { + return -1; + } + if (a.lang > b.lang) { + return 1; + } + return 0; + }); + } + + // map of input paths => array of localized urls + let urlMap = {}; + for (let filepath in filemap) { + for (let entry of filemap[filepath]) { + let url = entry.url; + if (!urlMap[url]) { + urlMap[url] = filemap[filepath].filter((entry) => { + if (entry.lang) { + return true; + } + return entry.url !== url; + }); + } + } + } + + return urlMap; +} + +function eleventyI18nPlugin(eleventyConfig, opts = {}) { + let options = DeepCopy( + { + defaultLanguage: "", + filters: { + url: "locale_url", + links: "locale_links", + }, + errorMode: "strict", // allow-fallback, never + }, + opts, + ); + + if (!options.defaultLanguage) { + throw new Error( + "You must specify a `defaultLanguage` in Eleventy’s Internationalization (I18N) plugin.", + ); + } + + let extensionMap; + eleventyConfig.on("eleventy.extensionmap", (map) => { + extensionMap = map; + }); + + let bench = eleventyConfig.benchmarkManager.get("Aggregate"); + let contentMaps = {}; + eleventyConfig.on("eleventy.contentMap", function ({ urlToInputPath, inputPathToUrl }) { + let b = bench.get("(i18n Plugin) Setting up content map."); + b.before(); + contentMaps.inputPathToUrl = inputPathToUrl; + contentMaps.urlToInputPath = urlToInputPath; + + contentMaps.localeUrlsMap = getLocaleUrlsMap(urlToInputPath, extensionMap, options); + b.after(); + }); + + eleventyConfig.addGlobalData("eleventyComputed.page.lang", () => { + // if addGlobalData receives a function it will execute it immediately, + // so we return a nested function for computed data + return (data) => { + return LangUtils.getLanguageCodeFromUrl(data.page.url) || options.defaultLanguage; + }; + }); + + // Normalize a theoretical URL based on the current page’s language + // If a non-localized file exists, returns the URL without a language assigned + // Fails if no file exists (localized and not localized) + eleventyConfig.addFilter(options.filters.url, function (url, langCodeOverride) { + let langCode = + langCodeOverride || + LangUtils.getLanguageCodeFromUrl(this.page?.url) || + options.defaultLanguage; + + // Already has a language code on it and has a relevant url with the target language code + if ( + contentMaps.localeUrlsMap[url] || + (!url.endsWith("/") && contentMaps.localeUrlsMap[`${url}/`]) + ) { + for (let existingUrlObj of contentMaps.localeUrlsMap[url] || + contentMaps.localeUrlsMap[`${url}/`]) { + if (Comparator.urlHasLangCode(existingUrlObj.url, langCode)) { + return existingUrlObj.url; + } + } + } + + // Needs the language code prepended to the URL + let prependedLangCodeUrl = `/${langCode}${url}`; + if ( + contentMaps.localeUrlsMap[prependedLangCodeUrl] || + (!prependedLangCodeUrl.endsWith("/") && contentMaps.localeUrlsMap[`${prependedLangCodeUrl}/`]) + ) { + return prependedLangCodeUrl; + } + + if ( + contentMaps.urlToInputPath[url] || + (!url.endsWith("/") && contentMaps.urlToInputPath[`${url}/`]) + ) { + // this is not a localized file (independent of a language code) + if (options.errorMode === "strict") { + throw new Error( + `Localized file for URL ${prependedLangCodeUrl} was not found in your project. A non-localized version does exist—are you sure you meant to use the \`${options.filters.url}\` filter for this? You can bypass this error using the \`errorMode\` option in the I18N plugin (current value: "${options.errorMode}").`, + ); + } + } else if (options.errorMode === "allow-fallback") { + // You’re linking to a localized file that doesn’t exist! + throw new Error( + `Localized file for URL ${prependedLangCodeUrl} was not found in your project! You will need to add it if you want to link to it using the \`${options.filters.url}\` filter. You can bypass this error using the \`errorMode\` option in the I18N plugin (current value: "${options.errorMode}").`, + ); + } + + return url; + }); + + // Refactor to use url + // Find the links that are localized alternates to the inputPath argument + eleventyConfig.addFilter(options.filters.links, function (urlOverride) { + let url = urlOverride || this.page?.url; + return (contentMaps.localeUrlsMap[url] || []).filter((entry) => { + return entry.url !== url; + }); + }); + + // Returns a `page`-esque variable for the root default language page + // If paginated, returns first result only + eleventyConfig.addFilter( + "locale_page", // This is not exposed in `options` because it is an Eleventy internals filter (used in get*CollectionItem filters) + function (pageOverride, languageCode) { + // both args here are optional + if (!languageCode) { + languageCode = options.defaultLanguage; + } + + let page = pageOverride || this.page; + let url; // new url + if (contentMaps.localeUrlsMap[page.url]) { + for (let entry of contentMaps.localeUrlsMap[page.url]) { + if (entry.lang === languageCode) { + url = entry.url; + } + } + } + + let inputPath = LangUtils.swapLanguageCode(page.inputPath, languageCode); + + if ( + !url || + !Array.isArray(contentMaps.inputPathToUrl[inputPath]) || + contentMaps.inputPathToUrl[inputPath].length === 0 + ) { + // no internationalized pages found + return page; + } + + let result = { + // // note that the permalink/slug may be different for the localized file! + url, + inputPath, + filePathStem: LangUtils.swapLanguageCode(page.filePathStem, languageCode), + // outputPath is omitted here, not necessary for GetCollectionItem.js if url is provided + __locale_page_resolved: true, + }; + return result; + }, + ); +} + +export { Comparator, LangUtils }; + +Object.defineProperty(eleventyI18nPlugin, "eleventyPackage", { + value: "@11ty/eleventy/i18n-plugin", +}); + +Object.defineProperty(eleventyI18nPlugin, "eleventyPluginOptions", { + value: { + unique: true, + }, +}); + +export default eleventyI18nPlugin; diff --git a/node_modules/@11ty/eleventy/src/Plugins/IdAttributePlugin.js b/node_modules/@11ty/eleventy/src/Plugins/IdAttributePlugin.js new file mode 100644 index 00000000..a55a13e2 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/IdAttributePlugin.js @@ -0,0 +1,110 @@ +import matchHelper from "posthtml-match-helper"; +import { decodeHTML } from "entities"; + +import slugifyFilter from "../Filters/Slugify.js"; +import MemoizeUtil from "../Util/MemoizeFunction.js"; + +const POSTHTML_PLUGIN_NAME = "11ty/eleventy/id-attribute"; + +function getTextNodeContent(node) { + if (node.attrs?.["eleventy:id-ignore"] === "") { + delete node.attrs["eleventy:id-ignore"]; + return ""; + } + if (!node.content) { + return ""; + } + + return node.content + .map((entry) => { + if (typeof entry === "string") { + return entry; + } + if (Array.isArray(entry.content)) { + return getTextNodeContent(entry); + } + return ""; + }) + .join(""); +} + +function IdAttributePlugin(eleventyConfig, options = {}) { + if (!options.slugify) { + options.slugify = MemoizeUtil(slugifyFilter); + } + if (!options.selector) { + options.selector = "[id],h1,h2,h3,h4,h5,h6"; + } + options.decodeEntities = options.decodeEntities ?? true; + options.checkDuplicates = options.checkDuplicates ?? "error"; + + eleventyConfig.htmlTransformer.addPosthtmlPlugin( + "html", + function idAttributePosthtmlPlugin(pluginOptions = {}) { + if (typeof options.filter === "function") { + if (options.filter(pluginOptions) === false) { + return function () {}; + } + } + + return function (tree) { + // One per page + let conflictCheck = {}; + // Cache heading nodes for conflict resolution + let headingNodes = {}; + + tree.match(matchHelper(options.selector), function (node) { + if (node.attrs?.id) { + let id = node.attrs?.id; + if (conflictCheck[id]) { + conflictCheck[id]++; + if (headingNodes[id]) { + // Rename conflicting assigned heading id + let newId = `${id}-${conflictCheck[id]}`; + headingNodes[newId] = headingNodes[id]; + headingNodes[newId].attrs.id = newId; + delete headingNodes[id]; + } else if (options.checkDuplicates === "error") { + // Existing `id` conflicts with assigned heading id, throw error + throw new Error( + 'You have more than one HTML `id` attribute using the same value (id="' + + id + + '") in your template (' + + pluginOptions.page.inputPath + + "). You can disable this error in the IdAttribute plugin with the `checkDuplicates: false` option.", + ); + } + } else { + conflictCheck[id] = 1; + } + } else if (!node.attrs?.id && node.content) { + node.attrs = node.attrs || {}; + let textContent = getTextNodeContent(node); + if (options.decodeEntities) { + textContent = decodeHTML(textContent); + } + let id = options.slugify(textContent); + + if (conflictCheck[id]) { + conflictCheck[id]++; + id = `${id}-${conflictCheck[id]}`; + } else { + conflictCheck[id] = 1; + } + + headingNodes[id] = node; + node.attrs.id = id; + } + + return node; + }); + }; + }, + { + // pluginOptions + name: POSTHTML_PLUGIN_NAME, + }, + ); +} + +export { IdAttributePlugin }; diff --git a/node_modules/@11ty/eleventy/src/Plugins/InputPathToUrl.js b/node_modules/@11ty/eleventy/src/Plugins/InputPathToUrl.js new file mode 100644 index 00000000..aca148bf --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/InputPathToUrl.js @@ -0,0 +1,191 @@ +import path from "node:path"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import isValidUrl from "../Util/ValidUrl.js"; + +function getValidPath(contentMap, testPath) { + // if the path is coming from Markdown, it may be encoded + let normalized = TemplatePath.addLeadingDotSlash(decodeURIComponent(testPath)); + + // it must exist in the content map to be valid + if (contentMap[normalized]) { + return normalized; + } +} + +function normalizeInputPath(targetInputPath, inputDir, sourceInputPath, contentMap) { + // inputDir is optional at the beginning of the developer supplied-path + + // Input directory already on the input path + if (TemplatePath.join(targetInputPath).startsWith(TemplatePath.join(inputDir))) { + let absolutePath = getValidPath(contentMap, targetInputPath); + if (absolutePath) { + return absolutePath; + } + } + + // Relative to project input directory + let relativeToInputDir = getValidPath(contentMap, TemplatePath.join(inputDir, targetInputPath)); + if (relativeToInputDir) { + return relativeToInputDir; + } + + if (targetInputPath && !path.isAbsolute(targetInputPath)) { + // Relative to source file’s input path + let sourceInputDir = TemplatePath.getDirFromFilePath(sourceInputPath); + let relativeToSourceFile = getValidPath( + contentMap, + TemplatePath.join(sourceInputDir, targetInputPath), + ); + if (relativeToSourceFile) { + return relativeToSourceFile; + } + } + + // the transform may have sent in a URL so we just return it as-is + return targetInputPath; +} + +function parseFilePath(filepath) { + if (filepath.startsWith("#") || filepath.startsWith("?")) { + return [filepath, ""]; + } + + try { + /* u: URL { + href: 'file:///tmpl.njk#anchor', + origin: 'null', + protocol: 'file:', + username: '', + password: '', + host: '', + hostname: '', + port: '', + pathname: '/tmpl.njk', + search: '', + searchParams: URLSearchParams {}, + hash: '#anchor' + } */ + + // Note that `node:url` -> pathToFileURL creates an absolute path, which we don’t want + // URL(`file:#anchor`) gives back a pathname of `/` + let u = new URL(`file:${filepath}`); + filepath = filepath.replace(u.search, ""); // includes ? + filepath = filepath.replace(u.hash, ""); // includes # + + return [ + // search includes ?, hash includes # + u.search + u.hash, + filepath, + ]; + } catch (e) { + return ["", filepath]; + } +} + +function FilterPlugin(eleventyConfig) { + let contentMap; + eleventyConfig.on("eleventy.contentMap", function ({ inputPathToUrl }) { + contentMap = inputPathToUrl; + }); + + eleventyConfig.addFilter("inputPathToUrl", function (targetFilePath) { + if (!contentMap) { + throw new Error("Internal error: contentMap not available for `inputPathToUrl` filter."); + } + + if (isValidUrl(targetFilePath)) { + return targetFilePath; + } + + let inputDir = eleventyConfig.directories.input; + let suffix = ""; + [suffix, targetFilePath] = parseFilePath(targetFilePath); + if (targetFilePath) { + targetFilePath = normalizeInputPath( + targetFilePath, + inputDir, + // @ts-ignore + this.page.inputPath, + contentMap, + ); + } + + let urls = contentMap[targetFilePath]; + if (!urls || urls.length === 0) { + throw new Error( + "`inputPathToUrl` filter could not find a matching target for " + targetFilePath, + ); + } + + return `${urls[0]}${suffix}`; + }); +} + +function TransformPlugin(eleventyConfig, defaultOptions = {}) { + let opts = Object.assign( + { + extensions: "html", + }, + defaultOptions, + ); + + let contentMap = null; + eleventyConfig.on("eleventy.contentMap", function ({ inputPathToUrl }) { + contentMap = inputPathToUrl; + }); + + eleventyConfig.htmlTransformer.addUrlTransform(opts.extensions, function (targetFilepathOrUrl) { + if (!contentMap) { + throw new Error("Internal error: contentMap not available for the `pathToUrl` Transform."); + } + if (isValidUrl(targetFilepathOrUrl)) { + return targetFilepathOrUrl; + } + + let inputDir = eleventyConfig.directories.input; + + let suffix = ""; + [suffix, targetFilepathOrUrl] = parseFilePath(targetFilepathOrUrl); + if (targetFilepathOrUrl) { + targetFilepathOrUrl = normalizeInputPath( + targetFilepathOrUrl, + inputDir, + // @ts-ignore + this.page.inputPath, + contentMap, + ); + } + + let urls = contentMap[targetFilepathOrUrl]; + if (!targetFilepathOrUrl || !urls || urls.length === 0) { + // fallback, transforms don’t error on missing paths (though the pathToUrl filter does) + return `${targetFilepathOrUrl}${suffix}`; + } + + return `${urls[0]}${suffix}`; + }); +} + +Object.defineProperty(FilterPlugin, "eleventyPackage", { + value: "@11ty/eleventy/inputpath-to-url-filter-plugin", +}); + +Object.defineProperty(FilterPlugin, "eleventyPluginOptions", { + value: { + unique: true, + }, +}); + +Object.defineProperty(TransformPlugin, "eleventyPackage", { + value: "@11ty/eleventy/inputpath-to-url-transform-plugin", +}); + +Object.defineProperty(TransformPlugin, "eleventyPluginOptions", { + value: { + unique: true, + }, +}); + +export default TransformPlugin; + +export { FilterPlugin, TransformPlugin }; diff --git a/node_modules/@11ty/eleventy/src/Plugins/Pagination.js b/node_modules/@11ty/eleventy/src/Plugins/Pagination.js new file mode 100644 index 00000000..8e5b1ded --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/Pagination.js @@ -0,0 +1,379 @@ +import { isPlainObject } from "@11ty/eleventy-utils"; +import lodash from "@11ty/lodash-custom"; +import { DeepCopy } from "@11ty/eleventy-utils"; + +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import { ProxyWrap } from "../Util/Objects/ProxyWrap.js"; +// import { DeepFreeze } from "../Util/Objects/DeepFreeze.js"; +import TemplateData from "../Data/TemplateData.js"; + +const { set: lodashSet, get: lodashGet, chunk: lodashChunk } = lodash; + +class PaginationConfigError extends EleventyBaseError {} +class PaginationError extends EleventyBaseError {} + +class Pagination { + constructor(tmpl, data, config) { + if (!config) { + throw new PaginationConfigError("Expected `config` argument to Pagination class."); + } + + this.config = config; + + this.setTemplate(tmpl); + this.setData(data); + } + + get inputPathForErrorMessages() { + if (this.template) { + return ` (${this.template.inputPath})`; + } + return ""; + } + + static hasPagination(data) { + return "pagination" in data; + } + + hasPagination() { + if (!this.data) { + throw new Error( + `Missing \`setData\` call for Pagination object${this.inputPathForErrorMessages}`, + ); + } + return Pagination.hasPagination(this.data); + } + + circularReferenceCheck(data) { + let key = data.pagination.data; + let includedTags = TemplateData.getIncludedTagNames(data); + + for (let tag of includedTags) { + if (`collections.${tag}` === key) { + throw new PaginationError( + `Pagination circular reference${this.inputPathForErrorMessages}, data:\`${key}\` iterates over both the \`${tag}\` collection and also supplies pages to that collection.`, + ); + } + } + } + + setData(data) { + this.data = data || {}; + this.target = []; + + if (!this.hasPagination()) { + return; + } + + if (!data.pagination) { + throw new Error( + `Misconfigured pagination data in template front matter${this.inputPathForErrorMessages} (YAML front matter precaution: did you use tabs and not spaces for indentation?).`, + ); + } else if (!("size" in data.pagination)) { + throw new Error( + `Missing pagination size in front matter data${this.inputPathForErrorMessages}`, + ); + } + this.circularReferenceCheck(data); + + this.size = data.pagination.size; + this.alias = data.pagination.alias; + this.fullDataSet = this._get(this.data, this._getDataKey()); + // this returns an array + this.target = this._resolveItems(); + this.chunkedItems = this.pagedItems; + } + + setTemplate(tmpl) { + this.template = tmpl; + } + + _getDataKey() { + return this.data.pagination.data; + } + + shouldResolveDataToObjectValues() { + if ("resolve" in this.data.pagination) { + return this.data.pagination.resolve === "values"; + } + return false; + } + + isFiltered(value) { + if ("filter" in this.data.pagination) { + let filtered = this.data.pagination.filter; + if (Array.isArray(filtered)) { + return filtered.indexOf(value) > -1; + } + + return filtered === value; + } + + return false; + } + + _has(target, key) { + let notFoundValue = "__NOT_FOUND_ERROR__"; + let data = lodashGet(target, key, notFoundValue); + return data !== notFoundValue; + } + + _get(target, key) { + let notFoundValue = "__NOT_FOUND_ERROR__"; + let data = lodashGet(target, key, notFoundValue); + if (data === notFoundValue) { + throw new Error( + `Could not find pagination data${this.inputPathForErrorMessages}, went looking for: ${key}`, + ); + } + return data; + } + + _resolveItems() { + let keys; + if (Array.isArray(this.fullDataSet)) { + keys = this.fullDataSet; + this.paginationTargetType = "array"; + } else if (isPlainObject(this.fullDataSet)) { + this.paginationTargetType = "object"; + if (this.shouldResolveDataToObjectValues()) { + keys = Object.values(this.fullDataSet); + } else { + keys = Object.keys(this.fullDataSet); + } + } else { + throw new Error( + `Unexpected data found in pagination target${this.inputPathForErrorMessages}: expected an Array or an Object.`, + ); + } + + // keys must be an array + let result = keys.slice(); + + if (this.data.pagination.before && typeof this.data.pagination.before === "function") { + // we don’t need to make a copy of this because we .slice() above to create a new copy + let fns = {}; + if (this.config) { + fns = this.config.javascriptFunctions; + } + result = this.data.pagination.before.call(fns, result, this.data); + } + + if (this.data.pagination.reverse === true) { + result = result.reverse(); + } + + if (this.data.pagination.filter) { + result = result.filter((value) => !this.isFiltered(value)); + } + + return result; + } + + get pagedItems() { + if (!this.data) { + throw new Error( + `Missing \`setData\` call for Pagination object${this.inputPathForErrorMessages}`, + ); + } + + const chunks = lodashChunk(this.target, this.size); + if (this.data.pagination?.generatePageOnEmptyData) { + return chunks.length ? chunks : [[]]; + } else { + return chunks; + } + } + + getPageCount() { + if (!this.hasPagination()) { + return 0; + } + + return this.chunkedItems.length; + } + + getNormalizedItems(pageItems) { + return this.size === 1 ? pageItems[0] : pageItems; + } + + getOverrideDataPages(items, pageNumber) { + return { + // See Issue #345 for more examples + page: { + previous: pageNumber > 0 ? this.getNormalizedItems(items[pageNumber - 1]) : null, + next: pageNumber < items.length - 1 ? this.getNormalizedItems(items[pageNumber + 1]) : null, + first: items.length ? this.getNormalizedItems(items[0]) : null, + last: items.length ? this.getNormalizedItems(items[items.length - 1]) : null, + }, + + pageNumber, + }; + } + + getOverrideDataLinks(pageNumber, templateCount, links) { + let obj = {}; + + // links are okay but hrefs are better + obj.previousPageLink = pageNumber > 0 ? links[pageNumber - 1] : null; + obj.previous = obj.previousPageLink; + + obj.nextPageLink = pageNumber < templateCount - 1 ? links[pageNumber + 1] : null; + obj.next = obj.nextPageLink; + + obj.firstPageLink = links.length > 0 ? links[0] : null; + obj.lastPageLink = links.length > 0 ? links[links.length - 1] : null; + + obj.links = links; + // todo deprecated, consistency with collections and use links instead + obj.pageLinks = links; + return obj; + } + + getOverrideDataHrefs(pageNumber, templateCount, hrefs) { + let obj = {}; + + // hrefs are better than links + obj.previousPageHref = pageNumber > 0 ? hrefs[pageNumber - 1] : null; + obj.nextPageHref = pageNumber < templateCount - 1 ? hrefs[pageNumber + 1] : null; + + obj.firstPageHref = hrefs.length > 0 ? hrefs[0] : null; + obj.lastPageHref = hrefs.length > 0 ? hrefs[hrefs.length - 1] : null; + + obj.hrefs = hrefs; + + // better names + obj.href = { + previous: obj.previousPageHref, + next: obj.nextPageHref, + first: obj.firstPageHref, + last: obj.lastPageHref, + }; + + return obj; + } + + async getPageTemplates() { + if (!this.data) { + throw new Error( + `Missing \`setData\` call for Pagination object${this.inputPathForErrorMessages}`, + ); + } + + if (!this.hasPagination()) { + return []; + } + + let entries = []; + let items = this.chunkedItems; + let pages = this.size === 1 ? items.map((entry) => entry[0]) : items; + + let links = []; + let hrefs = []; + + let hasPermalinkField = + Boolean(this.data[this.config.keys.permalink]) || + Boolean(this.data.eleventyComputed?.[this.config.keys.permalink]); + + // Do *not* pass collections through DeepCopy, we’ll re-add them back in later. + let collections = this.data.collections; + if (collections) { + delete this.data.collections; + } + + let parentData = DeepCopy( + { + pagination: { + data: this.data.pagination.data, + size: this.data.pagination.size, + alias: this.alias, + pages, + }, + }, + this.data, + ); + + // Restore skipped collections + if (collections) { + this.data.collections = collections; + // Keep the original reference to the collections, no deep copy!! + parentData.collections = collections; + } + + // TODO this does work fine but let’s wait on enabling it. + // DeepFreeze(parentData, ["collections"]); + + // TODO future improvement dea: use a light Template wrapper for paged template clones (PagedTemplate?) + // so that we don’t have the memory cost of the full template (and can reuse the parent + // template for some things) + + let indices = new Set(); + for (let j = 0; j <= items.length - 1; j++) { + indices.add(j); + } + + for (let pageNumber of indices) { + let cloned = await this.template.clone(); + + if (pageNumber > 0 && !hasPermalinkField) { + cloned.setExtraOutputSubdirectory(pageNumber); + } + + let paginationData = { + pagination: { + items: items[pageNumber], + }, + page: {}, + }; + Object.assign(paginationData.pagination, this.getOverrideDataPages(items, pageNumber)); + + if (this.alias) { + lodashSet(paginationData, this.alias, this.getNormalizedItems(items[pageNumber])); + } + + // Do *not* deep merge pagination data! See https://github.com/11ty/eleventy/issues/147#issuecomment-440802454 + let clonedData = ProxyWrap(paginationData, parentData); + + // Previous method: + // let clonedData = DeepCopy(paginationData, parentData); + + let { /*linkInstance,*/ rawPath, path, href } = await cloned.getOutputLocations(clonedData); + // TODO subdirectory to links if the site doesn’t live at / + if (rawPath) { + links.push("/" + rawPath); + } + + hrefs.push(href); + + // page.url and page.outputPath are used to avoid another getOutputLocations call later, see Template->addComputedData + clonedData.page.url = href; + clonedData.page.outputPath = path; + + entries.push({ + pageNumber, + + // This is used by i18n Plugin to allow subgroups of nested pagination to be separate + groupNumber: items[pageNumber]?.[0]?.eleventyPaginationGroupNumber, + + template: cloned, + data: clonedData, + }); + } + + // we loop twice to pass in the appropriate prev/next links (already full generated now) + let index = 0; + for (let pageEntry of entries) { + let linksObj = this.getOverrideDataLinks(index, items.length, links); + + Object.assign(pageEntry.data.pagination, linksObj); + + let hrefsObj = this.getOverrideDataHrefs(index, items.length, hrefs); + Object.assign(pageEntry.data.pagination, hrefsObj); + index++; + } + + return entries; + } +} + +export default Pagination; diff --git a/node_modules/@11ty/eleventy/src/Plugins/RenderPlugin.js b/node_modules/@11ty/eleventy/src/Plugins/RenderPlugin.js new file mode 100644 index 00000000..974b0e1d --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Plugins/RenderPlugin.js @@ -0,0 +1,520 @@ +import fs from "node:fs"; +import { Merge, TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; +import { evalToken } from "liquidjs"; + +// TODO add a first-class Markdown component to expose this using Markdown-only syntax (will need to be synchronous for markdown-it) + +import { ProxyWrap } from "../Util/Objects/ProxyWrap.js"; +import TemplateDataInitialGlobalData from "../Data/TemplateDataInitialGlobalData.js"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import TemplateRender from "../TemplateRender.js"; +import ProjectDirectories from "../Util/ProjectDirectories.js"; +import TemplateConfig from "../TemplateConfig.js"; +import EleventyExtensionMap from "../EleventyExtensionMap.js"; +import TemplateEngineManager from "../Engines/TemplateEngineManager.js"; +import Liquid from "../Engines/Liquid.js"; + +class EleventyNunjucksError extends EleventyBaseError {} + +/** @this {object} */ +async function compile(content, templateLang, options = {}) { + let { templateConfig, extensionMap } = options; + let strictMode = options.strictMode ?? false; + + if (!templateConfig) { + templateConfig = new TemplateConfig(null, false); + templateConfig.setDirectories(new ProjectDirectories()); + await templateConfig.init(); + } + + // Breaking change in 2.0+, previous default was `html` and now we default to the page template syntax + if (!templateLang) { + templateLang = this.page.templateSyntax; + } + + if (!extensionMap) { + if (strictMode) { + throw new Error("Internal error: missing `extensionMap` in RenderPlugin->compile."); + } + extensionMap = new EleventyExtensionMap(templateConfig); + extensionMap.engineManager = new TemplateEngineManager(templateConfig); + } + let tr = new TemplateRender(templateLang, templateConfig); + tr.extensionMap = extensionMap; + + if (templateLang) { + await tr.setEngineOverride(templateLang); + } else { + await tr.init(); + } + + // TODO tie this to the class, not the extension + if ( + tr.engine.name === "11ty.js" || + tr.engine.name === "11ty.cjs" || + tr.engine.name === "11ty.mjs" + ) { + throw new Error( + "11ty.js is not yet supported as a template engine for `renderTemplate`. Use `renderFile` instead!", + ); + } + + return tr.getCompiledTemplate(content); +} + +// No templateLang default, it should infer from the inputPath. +async function compileFile(inputPath, options = {}, templateLang) { + let { templateConfig, extensionMap, config } = options; + let strictMode = options.strictMode ?? false; + if (!inputPath) { + throw new Error("Missing file path argument passed to the `renderFile` shortcode."); + } + + let wasTemplateConfigMissing = false; + if (!templateConfig) { + templateConfig = new TemplateConfig(null, false); + templateConfig.setDirectories(new ProjectDirectories()); + wasTemplateConfigMissing = true; + } + if (config && typeof config === "function") { + await config(templateConfig.userConfig); + } + if (wasTemplateConfigMissing) { + await templateConfig.init(); + } + + let normalizedPath = TemplatePath.normalizeOperatingSystemFilePath(inputPath); + // Prefer the exists cache, if it’s available + if (!templateConfig.existsCache.exists(normalizedPath)) { + throw new Error( + "Could not find render plugin file for the `renderFile` shortcode, looking for: " + inputPath, + ); + } + + if (!extensionMap) { + if (strictMode) { + throw new Error("Internal error: missing `extensionMap` in RenderPlugin->compileFile."); + } + + extensionMap = new EleventyExtensionMap(templateConfig); + extensionMap.engineManager = new TemplateEngineManager(templateConfig); + } + let tr = new TemplateRender(inputPath, templateConfig); + tr.extensionMap = extensionMap; + + if (templateLang) { + await tr.setEngineOverride(templateLang); + } else { + await tr.init(); + } + + if (!tr.engine.needsToReadFileContents()) { + return tr.getCompiledTemplate(null); + } + + // TODO we could make this work with full templates (with front matter?) + let content = fs.readFileSync(inputPath, "utf8"); + return tr.getCompiledTemplate(content); +} + +/** @this {object} */ +async function renderShortcodeFn(fn, data) { + if (fn === undefined) { + return; + } else if (typeof fn !== "function") { + throw new Error(`The \`compile\` function did not return a function. Received ${fn}`); + } + + // if the user passes a string or other literal, remap to an object. + if (!isPlainObject(data)) { + data = { + _: data, + }; + } + + if ("data" in this && isPlainObject(this.data)) { + // when options.accessGlobalData is true, this allows the global data + // to be accessed inside of the shortcode as a fallback + + data = ProxyWrap(data, this.data); + } else { + // save `page` and `eleventy` for reuse + data.page = this.page; + data.eleventy = this.eleventy; + } + + return fn(data); +} + +/** + * @module 11ty/eleventy/Plugins/RenderPlugin + */ + +/** + * A plugin to add shortcodes to render an Eleventy template + * string (or file) inside of another template. {@link https://v3.11ty.dev/docs/plugins/render/} + * + * @since 1.0.0 + * @param {module:11ty/eleventy/UserConfig} eleventyConfig - User-land configuration instance. + * @param {object} options - Plugin options + */ +function eleventyRenderPlugin(eleventyConfig, options = {}) { + let templateConfig; + eleventyConfig.on("eleventy.config", (tmplConfigInstance) => { + templateConfig = tmplConfigInstance; + }); + + let extensionMap; + eleventyConfig.on("eleventy.extensionmap", (map) => { + extensionMap = map; + }); + + /** + * @typedef {object} options + * @property {string} [tagName] - The shortcode name to render a template string. + * @property {string} [tagNameFile] - The shortcode name to render a template file. + * @property {module:11ty/eleventy/TemplateConfig} [templateConfig] - Configuration object + * @property {boolean} [accessGlobalData] - Whether or not the template has access to the page’s data. + */ + let defaultOptions = { + tagName: "renderTemplate", + tagNameFile: "renderFile", + filterName: "renderContent", + templateConfig: null, + accessGlobalData: false, + }; + let opts = Object.assign(defaultOptions, options); + + function liquidTemplateTag(liquidEngine, tagName) { + // via https://github.com/harttle/liquidjs/blob/b5a22fa0910c708fe7881ef170ed44d3594e18f3/src/builtin/tags/raw.ts + return { + parse: function (tagToken, remainTokens) { + this.name = tagToken.name; + + if (eleventyConfig.liquid.parameterParsing === "builtin") { + this.orderedArgs = Liquid.parseArgumentsBuiltin(tagToken.args); + // note that Liquid does have a Hash class for name-based argument parsing but offers no easy to support both modes in one class + } else { + this.legacyArgs = tagToken.args; + } + + this.tokens = []; + + var stream = liquidEngine.parser + .parseStream(remainTokens) + .on("token", (token) => { + if (token.name === "end" + tagName) stream.stop(); + else this.tokens.push(token); + }) + .on("end", () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + + stream.start(); + }, + render: function* (ctx) { + let normalizedContext = {}; + if (ctx) { + if (opts.accessGlobalData) { + // parent template data cascade + normalizedContext.data = ctx.getAll(); + } + + normalizedContext.page = ctx.get(["page"]); + normalizedContext.eleventy = ctx.get(["eleventy"]); + } + + let argArray = []; + if (this.legacyArgs) { + let rawArgs = Liquid.parseArguments(null, this.legacyArgs); + for (let arg of rawArgs) { + let b = yield liquidEngine.evalValue(arg, ctx); + argArray.push(b); + } + } else if (this.orderedArgs) { + for (let arg of this.orderedArgs) { + let b = yield evalToken(arg, ctx); + argArray.push(b); + } + } + + // plaintext paired shortcode content + let body = this.tokens.map((token) => token.getText()).join(""); + + let ret = _renderStringShortcodeFn.call( + normalizedContext, + body, + // templateLang, data + ...argArray, + ); + yield ret; + return ret; + }, + }; + } + + // TODO I don’t think this works with whitespace control, e.g. {%- endrenderTemplate %} + function nunjucksTemplateTag(NunjucksLib, tagName) { + return new (function () { + this.tags = [tagName]; + + this.parse = function (parser, nodes) { + var tok = parser.nextToken(); + + var args = parser.parseSignature(true, true); + const begun = parser.advanceAfterBlockEnd(tok.value); + + // This code was ripped from the Nunjucks parser for `raw` + // https://github.com/mozilla/nunjucks/blob/fd500902d7c88672470c87170796de52fc0f791a/nunjucks/src/parser.js#L655 + const endTagName = "end" + tagName; + // Look for upcoming raw blocks (ignore all other kinds of blocks) + const rawBlockRegex = new RegExp( + "([\\s\\S]*?){%\\s*(" + tagName + "|" + endTagName + ")\\s*(?=%})%}", + ); + let rawLevel = 1; + let str = ""; + let matches = null; + + // Exit when there's nothing to match + // or when we've found the matching "endraw" block + while ((matches = parser.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) { + const all = matches[0]; + const pre = matches[1]; + const blockName = matches[2]; + + // Adjust rawlevel + if (blockName === tagName) { + rawLevel += 1; + } else if (blockName === endTagName) { + rawLevel -= 1; + } + + // Add to str + if (rawLevel === 0) { + // We want to exclude the last "endraw" + str += pre; + // Move tokenizer to beginning of endraw block + parser.tokens.backN(all.length - pre.length); + } else { + str += all; + } + } + + let body = new nodes.Output(begun.lineno, begun.colno, [ + new nodes.TemplateData(begun.lineno, begun.colno, str), + ]); + return new nodes.CallExtensionAsync(this, "run", args, [body]); + }; + + this.run = function (...args) { + let resolve = args.pop(); + let body = args.pop(); + let [context, ...argArray] = args; + + let normalizedContext = {}; + if (context.ctx?.page) { + normalizedContext.ctx = context.ctx; + + // TODO .data + // if(opts.accessGlobalData) { + // normalizedContext.data = context.ctx; + // } + + normalizedContext.page = context.ctx.page; + normalizedContext.eleventy = context.ctx.eleventy; + } + + body(function (e, bodyContent) { + if (e) { + resolve( + new EleventyNunjucksError(`Error with Nunjucks paired shortcode \`${tagName}\``, e), + ); + } + + Promise.resolve( + _renderStringShortcodeFn.call( + normalizedContext, + bodyContent, + // templateLang, data + ...argArray, + ), + ).then( + function (returnValue) { + resolve(null, new NunjucksLib.runtime.SafeString(returnValue)); + }, + function (e) { + resolve( + new EleventyNunjucksError(`Error with Nunjucks paired shortcode \`${tagName}\``, e), + null, + ); + }, + ); + }); + }; + })(); + } + + /** @this {object} */ + async function _renderStringShortcodeFn(content, templateLang, data = {}) { + // Default is fn(content, templateLang, data) but we want to support fn(content, data) too + if (typeof templateLang !== "string") { + data = templateLang; + templateLang = false; + } + + // TODO Render plugin `templateLang` is feeding bad input paths to the addDependencies call in Custom.js + let fn = await compile.call(this, content, templateLang, { + templateConfig: opts.templateConfig || templateConfig, + extensionMap, + }); + + return renderShortcodeFn.call(this, fn, data); + } + + /** @this {object} */ + async function _renderFileShortcodeFn(inputPath, data = {}, templateLang) { + let options = { + templateConfig: opts.templateConfig || templateConfig, + extensionMap, + }; + + let fn = await compileFile.call(this, inputPath, options, templateLang); + + return renderShortcodeFn.call(this, fn, data); + } + + // Render strings + if (opts.tagName) { + // use falsy to opt-out + eleventyConfig.addJavaScriptFunction(opts.tagName, _renderStringShortcodeFn); + + eleventyConfig.addLiquidTag(opts.tagName, function (liquidEngine) { + return liquidTemplateTag(liquidEngine, opts.tagName); + }); + + eleventyConfig.addNunjucksTag(opts.tagName, function (nunjucksLib) { + return nunjucksTemplateTag(nunjucksLib, opts.tagName); + }); + } + + // Filter for rendering strings + if (opts.filterName) { + eleventyConfig.addAsyncFilter(opts.filterName, _renderStringShortcodeFn); + } + + // Render File + // use `false` to opt-out + if (opts.tagNameFile) { + eleventyConfig.addAsyncShortcode(opts.tagNameFile, _renderFileShortcodeFn); + } +} + +// Will re-use the same configuration instance both at a top level and across any nested renders +class RenderManager { + /** @type {Promise|undefined} */ + #hasConfigInitialized; + #extensionMap; + #templateConfig; + + constructor() { + this.templateConfig = new TemplateConfig(null, false); + this.templateConfig.setDirectories(new ProjectDirectories()); + } + + get templateConfig() { + return this.#templateConfig; + } + + set templateConfig(templateConfig) { + if (!templateConfig || templateConfig === this.#templateConfig) { + return; + } + + this.#templateConfig = templateConfig; + + // This is the only plugin running on the Edge + this.#templateConfig.userConfig.addPlugin(eleventyRenderPlugin, { + templateConfig: this.#templateConfig, + accessGlobalData: true, + }); + + this.#extensionMap = new EleventyExtensionMap(this.#templateConfig); + this.#extensionMap.engineManager = new TemplateEngineManager(this.#templateConfig); + } + + async init() { + if (this.#hasConfigInitialized) { + return this.#hasConfigInitialized; + } + if (this.templateConfig.hasInitialized()) { + return true; + } + this.#hasConfigInitialized = this.templateConfig.init(); + await this.#hasConfigInitialized; + + return true; + } + + // `callback` is async-friendly but requires await upstream + config(callback) { + // run an extra `function(eleventyConfig)` configuration callbacks + if (callback && typeof callback === "function") { + return callback(this.templateConfig.userConfig); + } + } + + get initialGlobalData() { + if (!this._data) { + this._data = new TemplateDataInitialGlobalData(this.templateConfig); + } + return this._data; + } + + // because we don’t have access to the full data cascade—but + // we still want configuration data added via `addGlobalData` + async getData(...data) { + await this.init(); + + let globalData = await this.initialGlobalData.getData(); + let merged = Merge({}, globalData, ...data); + return merged; + } + + async compile(content, templateLang, options = {}) { + await this.init(); + + options.templateConfig = this.templateConfig; + options.extensionMap = this.#extensionMap; + options.strictMode = true; + + // We don’t need `compile.call(this)` here because the Edge always uses "liquid" as the template lang (instead of relying on this.page.templateSyntax) + // returns promise + return compile(content, templateLang, options); + } + + async render(fn, edgeData, buildTimeData) { + await this.init(); + + let mergedData = await this.getData(edgeData); + // Set .data for options.accessGlobalData feature + let context = { + data: mergedData, + }; + + return renderShortcodeFn.call(context, fn, buildTimeData); + } +} + +Object.defineProperty(eleventyRenderPlugin, "eleventyPackage", { + value: "@11ty/eleventy/render-plugin", +}); + +Object.defineProperty(eleventyRenderPlugin, "eleventyPluginOptions", { + value: { + unique: true, + }, +}); + +export default eleventyRenderPlugin; + +export { compileFile as File, compile as String, RenderManager }; diff --git a/node_modules/@11ty/eleventy/src/Template.js b/node_modules/@11ty/eleventy/src/Template.js new file mode 100644 index 00000000..64c47095 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Template.js @@ -0,0 +1,1200 @@ +import util from "node:util"; +import os from "node:os"; +import path from "node:path"; +import fs from "node:fs"; + +import lodash from "@11ty/lodash-custom"; +import { DateTime } from "luxon"; +import { TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; +import chalk from "kleur"; + +import ConsoleLogger from "./Util/ConsoleLogger.js"; +import getDateFromGitLastUpdated from "./Util/DateGitLastUpdated.js"; +import getDateFromGitFirstAdded from "./Util/DateGitFirstAdded.js"; +import TemplateData from "./Data/TemplateData.js"; +import TemplateContent from "./TemplateContent.js"; +import TemplatePermalink from "./TemplatePermalink.js"; +import TemplateLayout from "./TemplateLayout.js"; +import TemplateFileSlug from "./TemplateFileSlug.js"; +import ComputedData from "./Data/ComputedData.js"; +import Pagination from "./Plugins/Pagination.js"; +import TemplateBehavior from "./TemplateBehavior.js"; +import TemplateContentPrematureUseError from "./Errors/TemplateContentPrematureUseError.js"; +import TemplateContentUnrenderedTemplateError from "./Errors/TemplateContentUnrenderedTemplateError.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import ReservedData from "./Util/ReservedData.js"; +import TransformsUtil from "./Util/TransformsUtil.js"; +import { FileSystemManager } from "./Util/FileSystemManager.js"; + +const { set: lodashSet, get: lodashGet } = lodash; +const fsStat = util.promisify(fs.stat); + +const debug = debugUtil("Eleventy:Template"); +const debugDev = debugUtil("Dev:Eleventy:Template"); + +class Template extends TemplateContent { + #logger; + #fsManager; + + constructor(templatePath, templateData, extensionMap, config) { + debugDev("new Template(%o)", templatePath); + super(templatePath, config); + + this.parsed = path.parse(templatePath); + + // for pagination + this.extraOutputSubdirectory = ""; + + this.extensionMap = extensionMap; + this.templateData = templateData; + this.#initFileSlug(); + + this.linters = []; + this.transforms = {}; + + this.isVerbose = true; + this.isDryRun = false; + this.writeCount = 0; + + this.fileSlug = new TemplateFileSlug(this.inputPath, this.extensionMap, this.eleventyConfig); + this.fileSlugStr = this.fileSlug.getSlug(); + this.filePathStem = this.fileSlug.getFullPathWithoutExtension(); + + this.outputFormat = "fs"; + + this.behavior = new TemplateBehavior(this.config); + this.behavior.setOutputFormat(this.outputFormat); + } + + #initFileSlug() { + this.fileSlug = new TemplateFileSlug(this.inputPath, this.extensionMap, this.eleventyConfig); + this.fileSlugStr = this.fileSlug.getSlug(); + this.filePathStem = this.fileSlug.getFullPathWithoutExtension(); + } + + /* mimic constructor arg order */ + resetCachedTemplate({ templateData, extensionMap, eleventyConfig }) { + super.resetCachedTemplate({ eleventyConfig }); + this.templateData = templateData; + this.extensionMap = extensionMap; + // this.#fsManager = undefined; + this.#initFileSlug(); + } + + get fsManager() { + if (!this.#fsManager) { + this.#fsManager = new FileSystemManager(this.eleventyConfig); + } + return this.#fsManager; + } + + get logger() { + if (!this.#logger) { + this.#logger = new ConsoleLogger(); + this.#logger.isVerbose = this.isVerbose; + } + return this.#logger; + } + + /* Setter for Logger */ + set logger(logger) { + this.#logger = logger; + } + + isRenderable() { + return this.behavior.isRenderable(); + } + + isRenderableDisabled() { + return this.behavior.isRenderableDisabled(); + } + + isRenderableOptional() { + // A template that is lazily rendered once if used by a second order dependency of another template dependency. + // e.g. You change firstpost.md, which is used by feed.xml, but secondpost.md (also used by feed.xml) + // has not yet rendered and needs to be rendered once to populate the cache. + return this.behavior.isRenderableOptional(); + } + + setRenderableOverride(renderableOverride) { + this.behavior.setRenderableOverride(renderableOverride); + } + + reset() { + this.renderCount = 0; + this.writeCount = 0; + } + + resetCaches(types) { + types = this.getResetTypes(types); + + super.resetCaches(types); + + if (types.data) { + delete this._dataCache; + // delete this._usePermalinkRoot; + // delete this._stats; + } + + if (types.render) { + delete this._cacheRenderedPromise; + delete this._cacheRenderedTransformsAndLayoutsPromise; + } + } + + setOutputFormat(to) { + this.outputFormat = to; + this.behavior.setOutputFormat(to); + } + + setIsVerbose(isVerbose) { + this.isVerbose = isVerbose; + this.logger.isVerbose = isVerbose; + } + + setDryRunViaIncremental(isIncremental) { + this.isDryRun = isIncremental; + this.isIncremental = isIncremental; + } + + setDryRun(isDryRun) { + this.isDryRun = !!isDryRun; + } + + setExtraOutputSubdirectory(dir) { + this.extraOutputSubdirectory = dir + "/"; + } + + getTemplateSubfolder() { + let dir = TemplatePath.absolutePath(this.parsed.dir); + let inputDir = TemplatePath.absolutePath(this.inputDir); + return TemplatePath.stripLeadingSubPath(dir, inputDir); + } + + templateUsesLayouts(pageData) { + if (this.hasTemplateRender()) { + return pageData?.[this.config.keys.layout] && this.templateRender.engine.useLayouts(); + } + + // If `layout` prop is set, default to true when engine is unknown + return Boolean(pageData?.[this.config.keys.layout]); + } + + getLayout(layoutKey) { + // already cached downstream in TemplateLayout -> TemplateCache + try { + return TemplateLayout.getTemplate(layoutKey, this.eleventyConfig, this.extensionMap); + } catch (e) { + throw new EleventyBaseError( + `Problem creating an Eleventy Layout for the "${this.inputPath}" template file.`, + e, + ); + } + } + + get baseFile() { + return this.extensionMap.removeTemplateExtension(this.parsed.base); + } + + async _getRawPermalinkInstance(permalinkValue) { + let perm = new TemplatePermalink(permalinkValue, this.extraOutputSubdirectory); + perm.setUrlTransforms(this.config.urlTransforms); + + this.behavior.setFromPermalink(perm); + + return perm; + } + + async _getLink(data) { + if (!data) { + throw new Error("Internal error: data argument missing in Template->_getLink"); + } + + let permalink = + data[this.config.keys.permalink] ?? + data?.[this.config.keys.computed]?.[this.config.keys.permalink]; + let permalinkValue; + + // `permalink: false` means render but no file system write, e.g. use in collections only) + // `permalink: true` throws an error + if (typeof permalink === "boolean") { + debugDev("Using boolean permalink %o", permalink); + permalinkValue = permalink; + } else if (permalink && (!this.config.dynamicPermalinks || data.dynamicPermalink === false)) { + debugDev("Not using dynamic permalinks, using %o", permalink); + permalinkValue = permalink; + } else if (isPlainObject(permalink)) { + // Empty permalink {} object should act as if no permalink was set at all + // and inherit the default behavior + let isEmptyObject = Object.keys(permalink).length === 0; + if (!isEmptyObject) { + let promises = []; + let keys = []; + for (let key in permalink) { + keys.push(key); + if (key !== "build" && Array.isArray(permalink[key])) { + promises.push( + Promise.all([...permalink[key]].map((entry) => super.renderPermalink(entry, data))), + ); + } else { + promises.push(super.renderPermalink(permalink[key], data)); + } + } + + let results = await Promise.all(promises); + + permalinkValue = {}; + for (let j = 0, k = keys.length; j < k; j++) { + let key = keys[j]; + permalinkValue[key] = results[j]; + debug( + "Rendering permalink.%o for %o: %s becomes %o", + key, + this.inputPath, + permalink[key], + results[j], + ); + } + } + } else if (permalink) { + // render variables inside permalink front matter, bypass markdown + permalinkValue = await super.renderPermalink(permalink, data); + debug("Rendering permalink for %o: %s becomes %o", this.inputPath, permalink, permalinkValue); + debugDev("Permalink rendered with data: %o", data); + } + + // Override default permalink behavior. Only do this if permalink was _not_ in the data cascade + if (!permalink && this.config.dynamicPermalinks && data.dynamicPermalink !== false) { + let tr = await this.getTemplateRender(); + let permalinkCompilation = tr.engine.permalinkNeedsCompilation(""); + if (typeof permalinkCompilation === "function") { + let ret = await this._renderFunction(permalinkCompilation, permalinkValue, this.inputPath); + if (ret !== undefined) { + if (typeof ret === "function") { + // function + permalinkValue = await this._renderFunction(ret, data); + } else { + // scalar + permalinkValue = ret; + } + } + } + } + + if (permalinkValue !== undefined) { + return this._getRawPermalinkInstance(permalinkValue); + } + + // No `permalink` specified in data cascade, do the default + let p = TemplatePermalink.generate( + this.getTemplateSubfolder(), + this.baseFile, + this.extraOutputSubdirectory, + this.engine.defaultTemplateFileExtension, + ); + p.setUrlTransforms(this.config.urlTransforms); + return p; + } + + async usePermalinkRoot() { + // @cachedproperty + if (this._usePermalinkRoot === undefined) { + // TODO this only works with immediate front matter and not data files + let { data } = await this.getFrontMatterData(); + this._usePermalinkRoot = data[this.config.keys.permalinkRoot]; + } + + return this._usePermalinkRoot; + } + + async getOutputLocations(data) { + this.bench.get("(count) getOutputLocations").incrementCount(); + let link = await this._getLink(data); + + let path; + if (await this.usePermalinkRoot()) { + path = link.toPathFromRoot(); + } else { + path = link.toPath(this.outputDir); + } + + return { + linkInstance: link, + rawPath: link.toOutputPath(), + href: link.toHref(), + path: path, + }; + } + + // This is likely now a test-only method + // Preferred to use the singular `getOutputLocations` above. + async getRawOutputPath(data) { + this.bench.get("(count) getRawOutputPath").incrementCount(); + let link = await this._getLink(data); + return link.toOutputPath(); + } + + // Preferred to use the singular `getOutputLocations` above. + async getOutputHref(data) { + this.bench.get("(count) getOutputHref").incrementCount(); + let link = await this._getLink(data); + return link.toHref(); + } + + // Preferred to use the singular `getOutputLocations` above. + async getOutputPath(data) { + this.bench.get("(count) getOutputPath").incrementCount(); + let link = await this._getLink(data); + if (await this.usePermalinkRoot()) { + return link.toPathFromRoot(); + } + return link.toPath(this.outputDir); + } + + async _testGetAllLayoutFrontMatterData() { + let { data: frontMatterData } = await this.getFrontMatterData(); + + if (frontMatterData[this.config.keys.layout]) { + let layout = this.getLayout(frontMatterData[this.config.keys.layout]); + return await layout.getData(); + } + return {}; + } + + async #getData() { + debugDev("%o getData", this.inputPath); + let localData = {}; + let globalData = {}; + + if (this.templateData) { + localData = await this.templateData.getTemplateDirectoryData(this.inputPath); + globalData = await this.templateData.getGlobalData(this.inputPath); + debugDev("%o getData getTemplateDirectoryData and getGlobalData", this.inputPath); + } + + let { data: frontMatterData } = await this.getFrontMatterData(); + + let mergedLayoutData = {}; + let tr = await this.getTemplateRender(); + if (tr.engine.useLayouts()) { + let layoutKey = + frontMatterData[this.config.keys.layout] || + localData[this.config.keys.layout] || + globalData[this.config.keys.layout]; + + // Layout front matter data + if (layoutKey) { + let layout = this.getLayout(layoutKey); + + mergedLayoutData = await layout.getData(); + debugDev("%o getData merged layout chain front matter", this.inputPath); + } + } + + try { + let mergedData = TemplateData.mergeDeep( + this.config.dataDeepMerge, + {}, + globalData, + mergedLayoutData, + localData, + frontMatterData, + ); + + if (this.config.freezeReservedData) { + ReservedData.check(mergedData); + } + + await this.addPage(mergedData); + + debugDev("%o getData mergedData", this.inputPath); + + return mergedData; + } catch (e) { + if ( + ReservedData.isReservedDataError(e) || + (e instanceof TypeError && + e.message.startsWith("Cannot add property") && + e.message.endsWith("not extensible")) + ) { + throw new EleventyBaseError( + `You attempted to set one of Eleventy’s reserved data property names${e.reservedNames ? `: ${e.reservedNames.join(", ")}` : ""}. You can opt-out of this behavior with \`eleventyConfig.setFreezeReservedData(false)\` or rename/remove the property in your data cascade that conflicts with Eleventy’s reserved property names (e.g. \`eleventy\`, \`pkg\`, and others). Learn more: https://v3.11ty.dev/docs/data-eleventy-supplied/`, + e, + ); + } + + throw e; + } + } + + async getData() { + if (!this._dataCache) { + // @cachedproperty + this._dataCache = this.#getData(); + } + + return this._dataCache; + } + + async addPage(data) { + if (!("page" in data)) { + data.page = {}; + } + + // Make sure to keep these keys synchronized in src/Util/ReservedData.js + data.page.inputPath = this.inputPath; + data.page.fileSlug = this.fileSlugStr; + data.page.filePathStem = this.filePathStem; + data.page.outputFileExtension = this.engine.defaultTemplateFileExtension; + data.page.templateSyntax = this.templateRender.getEnginesList( + data[this.config.keys.engineOverride], + ); + + let newDate = await this.getMappedDate(data); + // Skip date assignment if custom date is falsy. + if (newDate) { + data.page.date = newDate; + } + + // data.page.url + // data.page.outputPath + // data.page.excerpt from gray-matter and Front Matter + // data.page.lang from I18nPlugin + } + + // Tests only + async render() { + throw new Error("Internal error: `Template->render` was removed in Eleventy 3.0."); + } + + // Tests only + async renderLayout() { + throw new Error("Internal error: `Template->renderLayout` was removed in Eleventy 3.0."); + } + + async renderDirect(str, data, bypassMarkdown) { + return super.render(str, data, bypassMarkdown); + } + + // This is the primary render mechanism, called via TemplateMap->populateContentDataInMap + async renderPageEntryWithoutLayout(pageEntry) { + // @cachedproperty + if (!this._cacheRenderedPromise) { + this._cacheRenderedPromise = this.renderDirect(pageEntry.rawInput, pageEntry.data); + this.renderCount++; + } + + return this._cacheRenderedPromise; + } + + setLinters(linters) { + if (!isPlainObject(linters)) { + throw new Error("Object expected in setLinters"); + } + // this acts as a reset + this.linters = []; + for (let linter of Object.values(linters).filter((l) => typeof l === "function")) { + this.addLinter(linter); + } + } + + addLinter(callback) { + this.linters.push(callback); + } + + async runLinters(str, page) { + let { inputPath, outputPath, url } = page; + let pageData = page.data.page; + + for (let linter of this.linters) { + // these can be asynchronous but no guarantee of order when they run + linter.call( + { + inputPath, + outputPath, + url, + page: pageData, + }, + str, + inputPath, + outputPath, + ); + } + } + + setTransforms(transforms) { + if (!isPlainObject(transforms)) { + throw new Error("Object expected in setTransforms"); + } + this.transforms = transforms; + } + + async runTransforms(str, pageEntry) { + return TransformsUtil.runAll(str, pageEntry.data.page, this.transforms, { + logger: this.logger, + }); + } + + async #renderComputedUnit(entry, data) { + if (typeof entry === "string") { + return this.renderComputedData(entry, data); + } + + if (isPlainObject(entry)) { + for (let key in entry) { + entry[key] = await this.#renderComputedUnit(entry[key], data); + } + } + + if (Array.isArray(entry)) { + for (let j = 0, k = entry.length; j < k; j++) { + entry[j] = await this.#renderComputedUnit(entry[j], data); + } + } + + return entry; + } + + _addComputedEntry(computedData, obj, parentKey, declaredDependencies) { + // this check must come before isPlainObject + if (typeof obj === "function") { + computedData.add(parentKey, obj, declaredDependencies); + } else if (Array.isArray(obj) || typeof obj === "string") { + // Arrays are treated as one entry in the dependency graph now, Issue #3728 + computedData.addTemplateString( + parentKey, + async function (innerData) { + return this.tmpl.#renderComputedUnit(obj, innerData); + }, + declaredDependencies, + this.getParseForSymbolsFunction(obj), + this, + ); + } else if (isPlainObject(obj)) { + // Arrays used to be computed here + for (let key in obj) { + let keys = []; + if (parentKey) { + keys.push(parentKey); + } + keys.push(key); + this._addComputedEntry(computedData, obj[key], keys.join("."), declaredDependencies); + } + } else { + // Numbers, booleans, etc + computedData.add(parentKey, obj, declaredDependencies); + } + } + + async addComputedData(data) { + if (isPlainObject(data?.[this.config.keys.computed])) { + this.computedData = new ComputedData(this.config); + + // Note that `permalink` is only a thing that gets consumed—it does not go directly into generated data + // this allows computed entries to use page.url or page.outputPath and they’ll be resolved properly + + // TODO Room for optimization here—we don’t need to recalculate `getOutputHref` and `getOutputPath` + // TODO Why are these using addTemplateString instead of add + this.computedData.addTemplateString( + "page.url", + async function (data) { + return this.tmpl.getOutputHref(data); + }, + data.permalink ? ["permalink"] : undefined, + false, // skip symbol resolution + this, + ); + + this.computedData.addTemplateString( + "page.outputPath", + async function (data) { + return this.tmpl.getOutputPath(data); + }, + data.permalink ? ["permalink"] : undefined, + false, // skip symbol resolution + this, + ); + + // Check for reserved properties in computed data + if (this.config.freezeReservedData) { + ReservedData.check(data[this.config.keys.computed]); + } + + // actually add the computed data + this._addComputedEntry(this.computedData, data[this.config.keys.computed]); + + // limited run of computed data—save the stuff that relies on collections for later. + debug("First round of computed data for %o", this.inputPath); + await this.computedData.setupData(data, function (entry) { + return !this.isUsesStartsWith(entry, "collections."); + + // TODO possible improvement here is to only process page.url, page.outputPath, permalink + // instead of only punting on things that rely on collections. + // let firstPhaseComputedData = ["page.url", "page.outputPath", ...this.getOrderFor("page.url"), ...this.getOrderFor("page.outputPath")]; + // return firstPhaseComputedData.indexOf(entry) > -1; + }); + } else { + if (!("page" in data)) { + data.page = {}; + } + + // pagination will already have these set via Pagination->getPageTemplates + if (data.page.url && data.page.outputPath) { + return; + } + + let { href, path } = await this.getOutputLocations(data); + data.page.url = href; + data.page.outputPath = path; + } + } + + // Computed data consuming collections! + async resolveRemainingComputedData(data) { + // If it doesn’t exist, computed data is not used for this template + if (this.computedData) { + debug("Second round of computed data for %o", this.inputPath); + return this.computedData.processRemainingData(data); + } + } + + static augmentWithTemplateContentProperty(obj) { + return Object.defineProperties(obj, { + needsCheck: { + enumerable: false, + writable: true, + value: true, + }, + _templateContent: { + enumerable: false, + writable: true, + value: undefined, + }, + templateContent: { + enumerable: true, + set(content) { + if (content === undefined) { + this.needsCheck = false; + } + this._templateContent = content; + }, + get() { + if (this.needsCheck && this._templateContent === undefined) { + if (this.template.isRenderable()) { + // should at least warn here + throw new TemplateContentPrematureUseError( + `Tried to use templateContent too early on ${this.inputPath}${ + this.pageNumber ? ` (page ${this.pageNumber})` : "" + }`, + ); + } else { + throw new TemplateContentUnrenderedTemplateError( + `Tried to use templateContent on unrendered template: ${ + this.inputPath + }${this.pageNumber ? ` (page ${this.pageNumber})` : ""}`, + ); + } + } + return this._templateContent; + }, + }, + // Alias for templateContent for consistency + content: { + enumerable: true, + get() { + return this.templateContent; + }, + set() { + throw new Error("Setter not available for `content`. Use `templateContent` instead."); + }, + }, + }); + } + + static async runPreprocessors(inputPath, content, data, preprocessors) { + let skippedVia = false; + for (let [name, preprocessor] of Object.entries(preprocessors)) { + let { filter, callback } = preprocessor; + + let filters; + if (Array.isArray(filter)) { + filters = filter; + } else if (typeof filter === "string") { + filters = filter.split(","); + } else { + throw new Error( + `Expected file extensions passed to "${name}" content preprocessor to be a string or array. Received: ${filter}`, + ); + } + + filters = filters.map((extension) => { + if (extension.startsWith(".") || extension === "*") { + return extension; + } + + return `.${extension}`; + }); + + if (!filters.some((extension) => extension === "*" || inputPath.endsWith(extension))) { + // skip + continue; + } + + try { + let ret = await callback.call( + { + inputPath, + }, + data, + content, + ); + + // Returning explicit false is the same as ignoring the template + if (ret === false) { + skippedVia = name; + continue; + } + + // Different from transforms: returning falsy (not false) here does nothing (skips the preprocessor) + if (ret) { + content = ret; + } + } catch (e) { + throw new EleventyBaseError( + `Preprocessor \`${name}\` encountered an error when transforming ${inputPath}.`, + e, + ); + } + } + + return { + skippedVia, + content, + }; + } + + async getTemplates(data) { + let content = await this.getPreRender(); + let { skippedVia, content: rawInput } = await Template.runPreprocessors( + this.inputPath, + content, + data, + this.config.preprocessors, + ); + + if (skippedVia) { + debug( + "Skipping %o, the %o preprocessor returned an explicit `false`", + this.inputPath, + skippedVia, + ); + return []; + } + + // Raw Input *includes* preprocessor modifications + // https://github.com/11ty/eleventy/issues/1206 + data.page.rawInput = rawInput; + + if (!Pagination.hasPagination(data)) { + await this.addComputedData(data); + + let obj = { + template: this, // not on the docs but folks are relying on it + rawInput, + groupNumber: 0, // i18n plugin + data, + + page: data.page, + inputPath: this.inputPath, + fileSlug: this.fileSlugStr, + filePathStem: this.filePathStem, + date: data.page.date, + outputPath: data.page.outputPath, + url: data.page.url, + }; + + obj = Template.augmentWithTemplateContentProperty(obj); + + return [obj]; + } else { + // needs collections for pagination items + // but individual pagination entries won’t be part of a collection + this.paging = new Pagination(this, data, this.config); + + let pageTemplates = await this.paging.getPageTemplates(); + let objects = []; + + for (let pageEntry of pageTemplates) { + await pageEntry.template.addComputedData(pageEntry.data); + + let obj = { + template: pageEntry.template, // not on the docs but folks are relying on it + rawInput, + pageNumber: pageEntry.pageNumber, + groupNumber: pageEntry.groupNumber || 0, + + data: pageEntry.data, + + inputPath: this.inputPath, + fileSlug: this.fileSlugStr, + filePathStem: this.filePathStem, + + page: pageEntry.data.page, + date: pageEntry.data.page.date, + outputPath: pageEntry.data.page.outputPath, + url: pageEntry.data.page.url, + }; + + obj = Template.augmentWithTemplateContentProperty(obj); + + objects.push(obj); + } + + return objects; + } + } + + async _write({ url, outputPath, data, rawInput }, finalContent) { + let lang = { + start: "Writing", + finished: "written", + }; + + if (!this.isDryRun) { + if (this.logger.isLoggingEnabled()) { + let isVirtual = this.isVirtualTemplate(); + let tr = await this.getTemplateRender(); + let engineList = tr.getReadableEnginesListDifferingFromFileExtension(); + let suffix = `${isVirtual ? " (virtual)" : ""}${engineList ? ` (${engineList})` : ""}`; + this.logger.log( + `${lang.start} ${outputPath} ${chalk.gray(`from ${this.inputPath}${suffix}`)}`, + ); + } + } else if (this.isDryRun) { + return; + } + + let templateBenchmarkDir = this.bench.get("Template make parent directory"); + templateBenchmarkDir.before(); + + if (this.eleventyConfig.templateHandling?.writeMode === "async") { + await this.fsManager.createDirectoryForFile(outputPath); + } else { + this.fsManager.createDirectoryForFileSync(outputPath); + } + + templateBenchmarkDir.after(); + + if (!Buffer.isBuffer(finalContent) && typeof finalContent !== "string") { + throw new Error( + `The return value from the render function for the ${this.engine.name} template was not a String or Buffer. Received ${finalContent}`, + ); + } + + let templateBenchmark = this.bench.get("Template Write"); + templateBenchmark.before(); + + if (this.eleventyConfig.templateHandling?.writeMode === "async") { + await this.fsManager.writeFile(outputPath, finalContent); + } else { + this.fsManager.writeFileSync(outputPath, finalContent); + } + + templateBenchmark.after(); + this.writeCount++; + debug(`${outputPath} ${lang.finished}.`); + + let ret = { + inputPath: this.inputPath, + outputPath: outputPath, + url, + content: finalContent, + rawInput, + }; + + if (data && this.config.dataFilterSelectors?.size > 0) { + ret.data = this.retrieveDataForJsonOutput(data, this.config.dataFilterSelectors); + } + + return ret; + } + + async #renderPageEntryWithLayoutsAndTransforms(pageEntry) { + let content; + let layoutKey = pageEntry.data[this.config.keys.layout]; + if (this.engine.useLayouts() && layoutKey) { + let layout = pageEntry.template.getLayout(layoutKey); + content = await layout.renderPageEntry(pageEntry); + } else { + content = pageEntry.templateContent; + } + + await this.runLinters(content, pageEntry); + + content = await this.runTransforms(content, pageEntry); + return content; + } + + async renderPageEntry(pageEntry) { + // @cachedproperty + if (!pageEntry.template._cacheRenderedTransformsAndLayoutsPromise) { + pageEntry.template._cacheRenderedTransformsAndLayoutsPromise = + this.#renderPageEntryWithLayoutsAndTransforms(pageEntry); + } + + return pageEntry.template._cacheRenderedTransformsAndLayoutsPromise; + } + + retrieveDataForJsonOutput(data, selectors) { + let filtered = {}; + for (let selector of selectors) { + let value = lodashGet(data, selector); + lodashSet(filtered, selector, value); + } + return filtered; + } + + async generateMapEntry(mapEntry, to) { + let ret = []; + + for (let page of mapEntry._pages) { + let content; + + // Note that behavior.render is overridden when using json or ndjson output + if (page.template.isRenderable()) { + // this reuses page.templateContent, it doesn’t render it + content = await page.template.renderPageEntry(page); + } + + if (to === "json" || to === "ndjson") { + let obj = { + url: page.url, + inputPath: page.inputPath, + outputPath: page.outputPath, + rawInput: page.rawInput, + content: content, + }; + + if (this.config.dataFilterSelectors?.size > 0) { + obj.data = this.retrieveDataForJsonOutput(page.data, this.config.dataFilterSelectors); + } + + if (to === "ndjson") { + let jsonString = JSON.stringify(obj); + this.logger.toStream(jsonString + os.EOL); + continue; + } + + // json + ret.push(obj); + continue; + } + + if (!page.template.isRenderable()) { + debug("Template not written %o from %o.", page.outputPath, page.template.inputPath); + continue; + } + + if (!page.template.behavior.isWriteable()) { + debug( + "Template not written %o from %o (via permalink: false, permalink.build: false, or a permalink object without a build property).", + page.outputPath, + page.template.inputPath, + ); + continue; + } + + // compile returned undefined + if (content !== undefined) { + ret.push(this._write(page, content)); + } + } + + return Promise.all(ret); + } + + async clone() { + // TODO do we need to even run the constructor here or can we simplify it even more + let tmpl = new Template( + this.inputPath, + this.templateData, + this.extensionMap, + this.eleventyConfig, + ); + + // We use this cheap property setter below instead + // await tmpl.getTemplateRender(); + + // preserves caches too, e.g. _frontMatterDataCache + // Does not yet include .computedData + for (let key in this) { + tmpl[key] = this[key]; + } + + return tmpl; + } + + getWriteCount() { + return this.writeCount; + } + + getRenderCount() { + return this.renderCount; + } + + async getInputFileStat() { + // @cachedproperty + if (!this._stats) { + this._stats = fsStat(this.inputPath); + } + + return this._stats; + } + + async _getDateInstance(key = "birthtimeMs") { + let stat = await this.getInputFileStat(); + + // Issue 1823: https://github.com/11ty/eleventy/issues/1823 + // return current Date in a Lambda + // otherwise ctime would be "1980-01-01T00:00:00.000Z" + // otherwise birthtime would be "1970-01-01T00:00:00.000Z" + if (stat.birthtimeMs === 0) { + return new Date(); + } + + let newDate = new Date(stat[key]); + + debug( + "Template date: using file’s %o for %o of %o (from %o)", + key, + this.inputPath, + newDate, + stat.birthtimeMs, + ); + + return newDate; + } + + async getMappedDate(data) { + let dateValue = data?.date; + + // These can return a Date object, or a string. + // Already type checked to be functions in UserConfig + for (let fn of this.config.customDateParsing) { + let ret = fn.call( + { + page: data.page, + }, + dateValue, + ); + + if (ret) { + debug("getMappedDate: date value override via `addDateParsing` callback to %o", ret); + dateValue = ret; + } + } + + if (dateValue) { + debug("getMappedDate: using a date in the data for %o of %o", this.inputPath, data.date); + if (dateValue?.constructor?.name === "DateTime") { + // YAML does its own date parsing + debug("getMappedDate: found DateTime instance: %o", dateValue); + return dateValue.toJSDate(); + } + + if (dateValue instanceof Date) { + // YAML does its own date parsing + debug("getMappedDate: found Date instance (maybe from YAML): %o", dateValue); + return dateValue; + } + + if (typeof dateValue !== "string") { + throw new Error( + `Data cascade value for \`date\` (${dateValue}) is invalid for ${this.inputPath}. Expected a JavaScript Date instance, luxon DateTime instance, or String value.`, + ); + } + + // special strings + if (!this.isVirtualTemplate()) { + if (dateValue.toLowerCase() === "git last modified") { + let d = await getDateFromGitLastUpdated(this.inputPath); + if (d) { + return d; + } + + // return now if this file is not yet available in `git` + return new Date(); + } + if (dateValue.toLowerCase() === "last modified") { + return this._getDateInstance("ctimeMs"); + } + if (dateValue.toLowerCase() === "git created") { + let d = await getDateFromGitFirstAdded(this.inputPath); + if (d) { + return d; + } + + // return now if this file is not yet available in `git` + return new Date(); + } + if (dateValue.toLowerCase() === "created") { + return this._getDateInstance("birthtimeMs"); + } + } + + // try to parse with Luxon + let date = DateTime.fromISO(dateValue, { zone: "utc" }); + if (!date.isValid) { + throw new Error( + `Data cascade value for \`date\` (${dateValue}) is invalid for ${this.inputPath}`, + ); + } + debug("getMappedDate: Luxon parsed %o: %o and %o", dateValue, date, date.toJSDate()); + + return date.toJSDate(); + } + + // No Date supplied in the Data Cascade, try to find the date in the file name + let filepathRegex = this.inputPath.match(/(\d{4}-\d{2}-\d{2})/); + if (filepathRegex !== null) { + // if multiple are found in the path, use the first one for the date + let dateObj = DateTime.fromISO(filepathRegex[1], { + zone: "utc", + }).toJSDate(); + debug( + "getMappedDate: using filename regex time for %o of %o: %o", + this.inputPath, + filepathRegex[1], + dateObj, + ); + return dateObj; + } + + // No Date supplied in the Data Cascade + if (this.isVirtualTemplate()) { + return new Date(); + } + + return this._getDateInstance("birthtimeMs"); + } + + // Important reminder: Template data is first generated in TemplateMap + async getTemplateMapEntries(data) { + debugDev("%o getMapped()", this.inputPath); + + this.behavior.setRenderViaDataCascade(data); + + let entries = []; + // does not return outputPath or url, we don’t want to render permalinks yet + entries.push({ + template: this, + inputPath: this.inputPath, + data, + }); + + return entries; + } +} + +export default Template; diff --git a/node_modules/@11ty/eleventy/src/TemplateBehavior.js b/node_modules/@11ty/eleventy/src/TemplateBehavior.js new file mode 100644 index 00000000..8dff97c3 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateBehavior.js @@ -0,0 +1,85 @@ +import { isPlainObject } from "@11ty/eleventy-utils"; + +class TemplateBehavior { + #isRenderOptional; + + constructor(config) { + this.render = true; + this.write = true; + this.outputFormat = null; + + if (!config) { + throw new Error("Missing config argument in TemplateBehavior"); + } + this.config = config; + } + + // Render override set to false + isRenderableDisabled() { + return this.renderableOverride === false; + } + + isRenderableOptional() { + return this.#isRenderOptional; + } + + // undefined (fallback), true, false + setRenderableOverride(renderableOverride) { + if (renderableOverride === "optional") { + this.#isRenderOptional = true; + this.renderableOverride = undefined; + } else { + this.#isRenderOptional = false; + this.renderableOverride = renderableOverride; + } + } + + // permalink *has* a build key or output is json/ndjson + isRenderable() { + return this.renderableOverride ?? (this.render || this.isRenderForced()); + } + + setOutputFormat(format) { + this.outputFormat = format; + } + + isRenderForced() { + return this.outputFormat === "json" || this.outputFormat === "ndjson"; + } + + isWriteable() { + return this.write; + } + + // Duplicate logic with TemplatePermalink constructor + setRenderViaDataCascade(data) { + // render is false *only* if `build` key does not exist in permalink objects (both in data and eleventyComputed) + // (note that permalink: false means it won’t write but will still render) + + let keys = new Set(); + if (isPlainObject(data.permalink)) { + for (let key of Object.keys(data.permalink)) { + keys.add(key); + } + } + + let computedKey = this.config.keys.computed; + if (computedKey in data && isPlainObject(data[computedKey]?.permalink)) { + for (let key of Object.keys(data[computedKey].permalink)) { + keys.add(key); + } + } + + if (keys.size) { + this.render = keys.has("build"); + } + } + + setFromPermalink(templatePermalink) { + // this.render is duplicated between TemplatePermalink and `setRenderViaDataCascade` above + this.render = templatePermalink._isRendered; + + this.write = templatePermalink._writeToFileSystem; + } +} +export default TemplateBehavior; diff --git a/node_modules/@11ty/eleventy/src/TemplateCollection.js b/node_modules/@11ty/eleventy/src/TemplateCollection.js new file mode 100644 index 00000000..6e99a32a --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateCollection.js @@ -0,0 +1,77 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; + +import TemplateData from "./Data/TemplateData.js"; +import Sortable from "./Util/Objects/Sortable.js"; +import { isGlobMatch } from "./Util/GlobMatcher.js"; + +class TemplateCollection extends Sortable { + constructor() { + super(); + + this._filteredByGlobsCache = new Map(); + } + + getAll() { + return this.items.slice(); + } + + getAllSorted() { + return this.sort(Sortable.sortFunctionDateInputPath); + } + + getSortedByDate() { + return this.sort(Sortable.sortFunctionDate); + } + + getGlobs(globs) { + if (typeof globs === "string") { + globs = [globs]; + } + + globs = globs.map((glob) => TemplatePath.addLeadingDotSlash(glob)); + + return globs; + } + + getFilteredByGlob(globs) { + globs = this.getGlobs(globs); + + let key = globs.join("::"); + if (!this._dirty) { + // Try to find a pre-sorted list and clone it. + if (this._filteredByGlobsCache.has(key)) { + return [...this._filteredByGlobsCache.get(key)]; + } + } else if (this._filteredByGlobsCache.size) { + // Blow away cache + this._filteredByGlobsCache = new Map(); + } + + let filtered = this.getAllSorted().filter((item) => { + return isGlobMatch(item.inputPath, globs); + }); + this._dirty = false; + this._filteredByGlobsCache.set(key, [...filtered]); + return filtered; + } + + getFilteredByTag(tagName) { + return this.getAllSorted().filter((item) => { + if (!tagName || TemplateData.getIncludedTagNames(item.data).includes(tagName)) { + return true; + } + return false; + }); + } + + getFilteredByTags(...tags) { + return this.getAllSorted().filter((item) => { + let itemTags = new Set(TemplateData.getIncludedTagNames(item.data)); + return tags.every((requiredTag) => { + return itemTags.has(requiredTag); + }); + }); + } +} + +export default TemplateCollection; diff --git a/node_modules/@11ty/eleventy/src/TemplateConfig.js b/node_modules/@11ty/eleventy/src/TemplateConfig.js new file mode 100644 index 00000000..e1fff8f9 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateConfig.js @@ -0,0 +1,565 @@ +import fs from "node:fs"; +import chalk from "kleur"; +import { Merge, TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import { EleventyImportRaw } from "./Util/Require.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import UserConfig from "./UserConfig.js"; +import GlobalDependencyMap from "./GlobalDependencyMap.js"; +import ExistsCache from "./Util/ExistsCache.js"; +import eventBus from "./EventBus.js"; +import ProjectTemplateFormats from "./Util/ProjectTemplateFormats.js"; + +const debug = debugUtil("Eleventy:TemplateConfig"); +const debugDev = debugUtil("Dev:Eleventy:TemplateConfig"); + +/** + * @module 11ty/eleventy/TemplateConfig + */ + +/** + * Config as used by the template. + * @typedef {object} module:11ty/eleventy/TemplateConfig~TemplateConfig~config + * @property {String} [pathPrefix] - The path prefix. + */ + +/** + * Errors in eleventy config. + * @ignore + */ +class EleventyConfigError extends EleventyBaseError {} + +/** + * Errors in eleventy plugins. + * @ignore + */ +class EleventyPluginError extends EleventyBaseError {} + +/** + * Config for a template. + * @ignore + * @param {{}} customRootConfig - tbd. + * @param {String} projectConfigPath - Path to local project config. + */ +class TemplateConfig { + #templateFormats; + #runMode; + #configManuallyDefined = false; + /** @type {UserConfig} */ + #userConfig = new UserConfig(); + #existsCache = new ExistsCache(); + #usesGraph; + #previousBuildModifiedFile; + + constructor(customRootConfig, projectConfigPath) { + /** @type {object} */ + this.overrides = {}; + + /** + * @type {String} + * @description Path to local project config. + * @default .eleventy.js + */ + if (projectConfigPath !== undefined) { + this.#configManuallyDefined = true; + + if (!projectConfigPath) { + // falsy skips config files + this.projectConfigPaths = []; + } else { + this.projectConfigPaths = [projectConfigPath]; + } + } else { + this.projectConfigPaths = [ + ".eleventy.js", + "eleventy.config.js", + "eleventy.config.mjs", + "eleventy.config.cjs", + ]; + } + + if (customRootConfig) { + /** + * @type {object} + * @description Custom root config. + */ + this.customRootConfig = customRootConfig; + debug("Warning: Using custom root config!"); + } else { + this.customRootConfig = null; + } + + this.hasConfigMerged = false; + this.isEsm = false; + + this.userConfig.events.on("eleventy#templateModified", (inputPath, metadata = {}) => { + // Might support multiple at some point + this.setPreviousBuildModifiedFile(inputPath, metadata); + + // Issue #3569, set that this file exists in the cache + this.#existsCache.set(inputPath, true); + }); + } + + setPreviousBuildModifiedFile(inputPath, metadata = {}) { + this.#previousBuildModifiedFile = inputPath; + } + + getPreviousBuildModifiedFile() { + return this.#previousBuildModifiedFile; + } + + get userConfig() { + return this.#userConfig; + } + + get aggregateBenchmark() { + return this.userConfig.benchmarks.aggregate; + } + + /* Setter for Logger */ + setLogger(logger) { + this.logger = logger; + this.userConfig.logger = this.logger; + } + + /* Setter for Directories instance */ + setDirectories(directories) { + this.directories = directories; + this.userConfig.directories = directories.getUserspaceInstance(); + } + + /* Setter for TemplateFormats instance */ + setTemplateFormats(templateFormats) { + this.#templateFormats = templateFormats; + } + + get templateFormats() { + if (!this.#templateFormats) { + this.#templateFormats = new ProjectTemplateFormats(); + } + return this.#templateFormats; + } + + /* Backwards compat */ + get inputDir() { + return this.directories.input; + } + + setRunMode(runMode) { + this.#runMode = runMode; + } + + shouldSpiderJavaScriptDependencies() { + // not for a standard build + return ( + (this.#runMode === "watch" || this.#runMode === "serve") && + this.userConfig.watchJavaScriptDependencies + ); + } + + /** + * Normalises local project config file path. + * + * @method + * @returns {String|undefined} - The normalised local project config file path. + */ + getLocalProjectConfigFile() { + let configFiles = this.getLocalProjectConfigFiles(); + + let configFile = configFiles.find((path) => path && fs.existsSync(path)); + if (configFile) { + return configFile; + } + } + + getLocalProjectConfigFiles() { + let paths = this.projectConfigPaths; + if (paths?.length > 0) { + return TemplatePath.addLeadingDotSlashArray(paths.filter((path) => Boolean(path))); + } + return []; + } + + setProjectUsingEsm(isEsmProject) { + this.isEsm = !!isEsmProject; + this.usesGraph.setIsEsm(isEsmProject); + } + + getIsProjectUsingEsm() { + return this.isEsm; + } + + /** + * Resets the configuration. + */ + async reset() { + debugDev("Resetting configuration: TemplateConfig and UserConfig."); + this.userConfig.reset(); + this.usesGraph.reset(); // needs to be before forceReloadConfig #3711 + + // await this.initializeRootConfig(); + await this.forceReloadConfig(); + + // Clear the compile cache + eventBus.emit("eleventy.compileCacheReset"); + } + + /** + * Resets the configuration while in watch mode. + * + * @todo Add implementation. + */ + resetOnWatch() { + // nothing yet + } + + hasInitialized() { + return this.hasConfigMerged; + } + + /** + * Async-friendly init method + */ + async init(overrides) { + await this.initializeRootConfig(); + + if (overrides) { + this.appendToRootConfig(overrides); + } + + this.config = await this.mergeConfig(); + this.hasConfigMerged = true; + } + + /** + * Force a reload of the configuration object. + */ + async forceReloadConfig() { + this.hasConfigMerged = false; + await this.init(); + } + + /** + * Returns the config object. + * + * @returns {{}} - The config object. + */ + getConfig() { + if (!this.hasConfigMerged) { + throw new Error("Invalid call to .getConfig(). Needs an .init() first."); + } + + return this.config; + } + + /** + * Overwrites the config path. + * + * @param {String} path - The new config path. + */ + async setProjectConfigPath(path) { + this.#configManuallyDefined = true; + + if (path !== undefined) { + this.projectConfigPaths = [path]; + } else { + this.projectConfigPaths = []; + } + + if (this.hasConfigMerged) { + // merge it again + debugDev("Merging in getConfig again after setting the local project config path."); + await this.forceReloadConfig(); + } + } + + /** + * Overwrites the path prefix. + * + * @param {String} pathPrefix - The new path prefix. + */ + setPathPrefix(pathPrefix) { + if (pathPrefix && pathPrefix !== "/") { + debug("Setting pathPrefix to %o", pathPrefix); + this.overrides.pathPrefix = pathPrefix; + } + } + + /** + * Gets the current path prefix denoting the root folder the output will be deployed to + * + * @returns {String} - The path prefix string + */ + getPathPrefix() { + if (this.overrides.pathPrefix) { + return this.overrides.pathPrefix; + } + + if (!this.hasConfigMerged) { + throw new Error("Config has not yet merged. Needs `init()`."); + } + + return this.config?.pathPrefix; + } + + /** + * Bootstraps the config object. + */ + async initializeRootConfig() { + this.rootConfig = this.customRootConfig; + if (!this.rootConfig) { + let { default: cfg } = await import("./defaultConfig.js"); + this.rootConfig = cfg; + } + + if (typeof this.rootConfig === "function") { + // Not yet using async in defaultConfig.js + this.rootConfig = this.rootConfig.call(this, this.userConfig); + } + + debug("Default Eleventy config %o", this.rootConfig); + } + + /* + * Add additional overrides to the root config object, used for testing + * + * @param {object} - a subset of the return Object from the user’s config file. + */ + appendToRootConfig(obj) { + Object.assign(this.rootConfig, obj); + } + + /* + * Process the userland plugins from the Config + * + * @param {object} - the return Object from the user’s config file. + */ + async processPlugins({ dir, pathPrefix }) { + this.userConfig.dir = dir; + this.userConfig.pathPrefix = pathPrefix; + + // for Nested addPlugin calls, Issue #1925 + this.userConfig._enablePluginExecution(); + + let storedActiveNamespace = this.userConfig.activeNamespace; + for (let { plugin, options, pluginNamespace } of this.userConfig.plugins) { + try { + this.userConfig.activeNamespace = pluginNamespace; + await this.userConfig._executePlugin(plugin, options); + } catch (e) { + let name = this.userConfig._getPluginName(plugin); + let namespaces = [storedActiveNamespace, pluginNamespace].filter((entry) => !!entry); + + let namespaceStr = ""; + if (namespaces.length) { + namespaceStr = ` (namespace: ${namespaces.join(".")})`; + } + + throw new EleventyPluginError( + `Error processing ${name ? `the \`${name}\`` : "a"} plugin${namespaceStr}`, + e, + ); + } + } + + this.userConfig.activeNamespace = storedActiveNamespace; + + this.userConfig._disablePluginExecution(); + } + + /** + * Fetches and executes the local configuration file + * + * @returns {Promise} merged - The merged config file object. + */ + async requireLocalConfigFile() { + let localConfig = {}; + let exportedConfig = {}; + + let path = this.projectConfigPaths.filter((path) => path).find((path) => fs.existsSync(path)); + + if (this.projectConfigPaths.length > 0 && this.#configManuallyDefined && !path) { + throw new EleventyConfigError( + "A configuration file was specified but not found: " + this.projectConfigPaths.join(", "), + ); + } + + debug(`Merging default config with ${path}`); + if (path) { + try { + let { default: configDefaultReturn, config: exportedConfigObject } = + await EleventyImportRaw(path, this.isEsm ? "esm" : "cjs"); + + exportedConfig = exportedConfigObject || {}; + + if (this.directories && Object.keys(exportedConfigObject?.dir || {}).length > 0) { + debug( + "Setting directories via `config.dir` export from config file: %o", + exportedConfigObject.dir, + ); + this.directories.setViaConfigObject(exportedConfigObject.dir); + } + + if (typeof configDefaultReturn === "function") { + localConfig = await configDefaultReturn(this.userConfig); + } else { + localConfig = configDefaultReturn; + } + + // Removed a check for `filters` in 3.0.0-alpha.6 (now using addTransform instead) https://v3.11ty.dev/docs/config/#transforms + } catch (err) { + let isModuleError = + err instanceof Error && (err?.message || "").includes("Cannot find module"); + + // TODO the error message here is bad and I feel bad (needs more accurate info) + return Promise.reject( + new EleventyConfigError( + `Error in your Eleventy config file '${path}'.` + + (isModuleError ? chalk.cyan(" You may need to run `npm install`.") : ""), + err, + ), + ); + } + } else { + debug( + "Project config file not found (not an error—skipping). Looked in: %o", + this.projectConfigPaths, + ); + } + + return { + localConfig, + exportedConfig, + }; + } + + /** + * Merges different config files together. + * + * @returns {Promise} merged - The merged config file. + */ + async mergeConfig() { + let { localConfig, exportedConfig } = await this.requireLocalConfigFile(); + + // Merge `export const config = {}` with `return {}` in config callback + if (isPlainObject(exportedConfig)) { + localConfig = Merge(localConfig || {}, exportedConfig); + } + + if (this.directories) { + if (Object.keys(this.userConfig.directoryAssignments || {}).length > 0) { + debug( + "Setting directories via set*Directory configuration APIs %o", + this.userConfig.directoryAssignments, + ); + this.directories.setViaConfigObject(this.userConfig.directoryAssignments); + } + + if (localConfig && Object.keys(localConfig?.dir || {}).length > 0) { + debug( + "Setting directories via `dir` object return from configuration file: %o", + localConfig.dir, + ); + this.directories.setViaConfigObject(localConfig.dir); + } + } + + // `templateFormats` is an override via `setTemplateFormats` + if (this.userConfig?.templateFormats) { + this.templateFormats.setViaConfig(this.userConfig.templateFormats); + } else if (localConfig?.templateFormats || this.rootConfig?.templateFormats) { + // Local project config or defaultConfig.js + this.templateFormats.setViaConfig( + localConfig.templateFormats || this.rootConfig?.templateFormats, + ); + } + + // `templateFormatsAdded` is additive via `addTemplateFormats` + if (this.userConfig?.templateFormatsAdded) { + this.templateFormats.addViaConfig(this.userConfig.templateFormatsAdded); + } + + let mergedConfig = Merge({}, this.rootConfig, localConfig); + + // Setup a few properties for plugins: + + // Set frozen templateFormats + mergedConfig.templateFormats = Object.freeze(this.templateFormats.getTemplateFormats()); + + // Setup pathPrefix set via command line for plugin consumption + if (this.overrides.pathPrefix) { + mergedConfig.pathPrefix = this.overrides.pathPrefix; + } + + // Returning a falsy value (e.g. "") from user config should reset to the default value. + if (!mergedConfig.pathPrefix) { + mergedConfig.pathPrefix = this.rootConfig.pathPrefix; + } + + // This is not set in UserConfig.js so that getters aren’t converted to strings + // We want to error if someone attempts to use a setter there. + if (this.directories) { + mergedConfig.directories = this.directories.getUserspaceInstance(); + } + + // Delay processing plugins until after the result of localConfig is returned + // But BEFORE the rest of the config options are merged + // this way we can pass directories and other template information to plugins + + await this.userConfig.events.emit("eleventy.beforeConfig", this.userConfig); + + let pluginsBench = this.aggregateBenchmark.get("Processing plugins in config"); + pluginsBench.before(); + await this.processPlugins(mergedConfig); + pluginsBench.after(); + + // Template formats added via plugins + if (this.userConfig?.templateFormatsAdded) { + this.templateFormats.addViaConfig(this.userConfig.templateFormatsAdded); + mergedConfig.templateFormats = Object.freeze(this.templateFormats.getTemplateFormats()); + } + + let eleventyConfigApiMergingObject = this.userConfig.getMergingConfigObject(); + + if ("templateFormats" in eleventyConfigApiMergingObject) { + throw new Error( + "Internal error: templateFormats should not return from `getMergingConfigObject`", + ); + } + + // Overrides are only used by pathPrefix + debug("Configuration overrides: %o", this.overrides); + Merge(mergedConfig, eleventyConfigApiMergingObject, this.overrides); + + debug("Current configuration: %o", mergedConfig); + + // Add to the merged config too + mergedConfig.uses = this.usesGraph; + + return mergedConfig; + } + + get usesGraph() { + if (!this.#usesGraph) { + this.#usesGraph = new GlobalDependencyMap(); + this.#usesGraph.setIsEsm(this.isEsm); + this.#usesGraph.setTemplateConfig(this); + } + return this.#usesGraph; + } + + get uses() { + if (!this.usesGraph) { + throw new Error("The Eleventy Global Dependency Graph has not yet been initialized."); + } + return this.usesGraph; + } + + get existsCache() { + return this.#existsCache; + } +} + +export default TemplateConfig; diff --git a/node_modules/@11ty/eleventy/src/TemplateContent.js b/node_modules/@11ty/eleventy/src/TemplateContent.js new file mode 100644 index 00000000..97d440fc --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateContent.js @@ -0,0 +1,748 @@ +import os from "node:os"; + +import fs from "node:fs"; +import matter from "gray-matter"; +import lodash from "@11ty/lodash-custom"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import TemplateData from "./Data/TemplateData.js"; +import TemplateRender from "./TemplateRender.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import EleventyErrorUtil from "./Errors/EleventyErrorUtil.js"; +import eventBus from "./EventBus.js"; + +import { withResolvers } from "./Util/PromiseUtil.js"; + +const { set: lodashSet } = lodash; +const debug = debugUtil("Eleventy:TemplateContent"); +const debugDev = debugUtil("Dev:Eleventy:TemplateContent"); + +class TemplateContentFrontMatterError extends EleventyBaseError {} +class TemplateContentCompileError extends EleventyBaseError {} +class TemplateContentRenderError extends EleventyBaseError {} + +class TemplateContent { + #initialized = false; + #config; + #templateRender; + #preprocessorEngine; + #extensionMap; + #configOptions; + + constructor(inputPath, templateConfig) { + if (!templateConfig || templateConfig.constructor.name !== "TemplateConfig") { + throw new Error("Missing or invalid `templateConfig` argument"); + } + this.eleventyConfig = templateConfig; + this.inputPath = inputPath; + } + + async asyncTemplateInitialization() { + if (!this.hasTemplateRender()) { + await this.getTemplateRender(); + } + + if (this.#initialized) { + return; + } + this.#initialized = true; + + let preprocessorEngineName = this.templateRender.getPreprocessorEngineName(); + if (preprocessorEngineName && this.templateRender.engine.getName() !== preprocessorEngineName) { + let engine = await this.templateRender.getEngineByName(preprocessorEngineName); + this.#preprocessorEngine = engine; + } + } + + resetCachedTemplate({ eleventyConfig }) { + this.eleventyConfig = eleventyConfig; + } + + get dirs() { + return this.eleventyConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + get outputDir() { + return this.dirs.output; + } + + getResetTypes(types) { + if (types) { + return Object.assign( + { + data: false, + read: false, + render: false, + }, + types, + ); + } + + return { + data: true, + read: true, + render: true, + }; + } + + // Called during an incremental build when the template instance is cached but needs to be reset because it has changed + resetCaches(types) { + types = this.getResetTypes(types); + + if (types.read) { + delete this.readingPromise; + delete this.inputContent; + delete this._frontMatterDataCache; + } + if (types.render) { + this.#templateRender = undefined; + } + } + + get extensionMap() { + if (!this.#extensionMap) { + throw new Error("Internal error: Missing `extensionMap` in TemplateContent."); + } + return this.#extensionMap; + } + + set extensionMap(map) { + this.#extensionMap = map; + } + + set eleventyConfig(config) { + this.#config = config; + + if (this.#config.constructor.name === "TemplateConfig") { + this.#configOptions = this.#config.getConfig(); + } else { + throw new Error("Tried to get an TemplateConfig but none was found."); + } + } + + get eleventyConfig() { + if (this.#config.constructor.name === "TemplateConfig") { + return this.#config; + } + throw new Error("Tried to get an TemplateConfig but none was found."); + } + + get config() { + if (this.#config.constructor.name === "TemplateConfig" && !this.#configOptions) { + this.#configOptions = this.#config.getConfig(); + } + + return this.#configOptions; + } + + get bench() { + return this.config.benchmarkManager.get("Aggregate"); + } + + get engine() { + return this.templateRender.engine; + } + + get templateRender() { + if (!this.hasTemplateRender()) { + throw new Error(`\`templateRender\` has not yet initialized on ${this.inputPath}`); + } + + return this.#templateRender; + } + + hasTemplateRender() { + return !!this.#templateRender; + } + + async getTemplateRender() { + if (!this.#templateRender) { + this.#templateRender = new TemplateRender(this.inputPath, this.eleventyConfig); + this.#templateRender.extensionMap = this.extensionMap; + + return this.#templateRender.init().then(() => { + return this.#templateRender; + }); + } + + return this.#templateRender; + } + + // For monkey patchers + get frontMatter() { + if (this.frontMatterOverride) { + return this.frontMatterOverride; + } else { + throw new Error( + "Unfortunately you’re using code that monkey patched some Eleventy internals and it isn’t async-friendly. Change your code to use the async `read()` method on the template instead!", + ); + } + } + + // For monkey patchers + set frontMatter(contentOverride) { + this.frontMatterOverride = contentOverride; + } + + getInputPath() { + return this.inputPath; + } + + getInputDir() { + return this.inputDir; + } + + isVirtualTemplate() { + let def = this.getVirtualTemplateDefinition(); + return !!def; + } + + getVirtualTemplateDefinition() { + let inputDirRelativeInputPath = + this.eleventyConfig.directories.getInputPathRelativeToInputDirectory(this.inputPath); + return this.config.virtualTemplates[inputDirRelativeInputPath]; + } + + async #read() { + let content = await this.inputContent; + + if (content || content === "") { + let tr = await this.getTemplateRender(); + if (tr.engine.useJavaScriptImport()) { + return { + data: {}, + content, + }; + } + + let options = this.config.frontMatterParsingOptions || {}; + let fm; + try { + // Added in 3.0, passed along to front matter engines + options.filePath = this.inputPath; + fm = matter(content, options); + } catch (e) { + throw new TemplateContentFrontMatterError( + `Having trouble reading front matter from template ${this.inputPath}`, + e, + ); + } + + if (options.excerpt && fm.excerpt) { + let excerptString = fm.excerpt + (options.excerpt_separator || "---"); + if (fm.content.startsWith(excerptString + os.EOL)) { + // with an os-specific newline after excerpt separator + fm.content = fm.excerpt.trim() + "\n" + fm.content.slice((excerptString + os.EOL).length); + } else if (fm.content.startsWith(excerptString + "\n")) { + // with a newline (\n) after excerpt separator + // This is necessary for some git configurations on windows + fm.content = fm.excerpt.trim() + "\n" + fm.content.slice((excerptString + 1).length); + } else if (fm.content.startsWith(excerptString)) { + // no newline after excerpt separator + fm.content = fm.excerpt + fm.content.slice(excerptString.length); + } + + // alias, defaults to page.excerpt + let alias = options.excerpt_alias || "page.excerpt"; + lodashSet(fm.data, alias, fm.excerpt); + } + + // For monkey patchers that used `frontMatter` 🤧 + // https://github.com/11ty/eleventy/issues/613#issuecomment-999637109 + // https://github.com/11ty/eleventy/issues/2710#issuecomment-1373854834 + // Removed this._frontMatter monkey patcher help in 3.0.0-alpha.7 + + return fm; + } else { + return { + data: {}, + content: "", + excerpt: "", + }; + } + } + + async read() { + if (!this.readingPromise) { + if (!this.inputContent) { + // @cachedproperty + this.inputContent = this.getInputContent(); + } + + // @cachedproperty + this.readingPromise = this.#read(); + } + + return this.readingPromise; + } + + /* Incremental builds cache the Template instances (in TemplateWriter) but + * these template specific caches are important for Pagination */ + static cache(path, content) { + this._inputCache.set(TemplatePath.absolutePath(path), content); + } + + static getCached(path) { + return this._inputCache.get(TemplatePath.absolutePath(path)); + } + + static deleteFromInputCache(path) { + this._inputCache.delete(TemplatePath.absolutePath(path)); + } + + // Used via clone + setInputContent(content) { + this.inputContent = content; + } + + async getInputContent() { + let tr = await this.getTemplateRender(); + + let virtualTemplateDefinition = this.getVirtualTemplateDefinition(); + if (virtualTemplateDefinition) { + let { content } = virtualTemplateDefinition; + return content; + } + + if ( + tr.engine.useJavaScriptImport() && + typeof tr.engine.getInstanceFromInputPath === "function" + ) { + return tr.engine.getInstanceFromInputPath(this.inputPath); + } + + if (!tr.engine.needsToReadFileContents()) { + return ""; + } + + let templateBenchmark = this.bench.get("Template Read"); + templateBenchmark.before(); + + let content; + + if (this.config.useTemplateCache) { + content = TemplateContent.getCached(this.inputPath); + } + + if (!content && content !== "") { + let contentBuffer = fs.readFileSync(this.inputPath); + + content = contentBuffer.toString("utf8"); + + if (this.config.useTemplateCache) { + TemplateContent.cache(this.inputPath, content); + } + } + + templateBenchmark.after(); + + return content; + } + + async _testGetFrontMatter() { + let fm = this.frontMatterOverride ? this.frontMatterOverride : await this.read(); + + return fm; + } + + async getPreRender() { + let fm = this.frontMatterOverride ? this.frontMatterOverride : await this.read(); + + return fm.content; + } + + async #getFrontMatterData() { + let fm = await this.read(); + + // gray-matter isn’t async-friendly but can return a promise from custom front matter + if (fm.data instanceof Promise) { + fm.data = await fm.data; + } + + let tr = await this.getTemplateRender(); + let extraData = await tr.engine.getExtraDataFromFile(this.inputPath); + + let virtualTemplateDefinition = this.getVirtualTemplateDefinition(); + let virtualTemplateData; + if (virtualTemplateDefinition) { + virtualTemplateData = virtualTemplateDefinition.data; + } + + let data = Object.assign(fm.data, extraData, virtualTemplateData); + + TemplateData.cleanupData(data, { + file: this.inputPath, + isVirtualTemplate: Boolean(virtualTemplateData), + }); + + return { + data, + excerpt: fm.excerpt, + }; + } + + async getFrontMatterData() { + if (!this._frontMatterDataCache) { + // @cachedproperty + this._frontMatterDataCache = this.#getFrontMatterData(); + } + + return this._frontMatterDataCache; + } + + async getEngineOverride() { + return this.getFrontMatterData().then((data) => { + return data[this.config.keys.engineOverride]; + }); + } + + // checks engines + isTemplateCacheable() { + if (this.#preprocessorEngine) { + return this.#preprocessorEngine.cacheable; + } + return this.engine.cacheable; + } + + _getCompileCache(str) { + // Caches used to be bifurcated based on engine name, now they’re based on inputPath + // TODO does `cacheable` need to help inform whether a cache is used here? + let inputPathMap = TemplateContent._compileCache.get(this.inputPath); + if (!inputPathMap) { + inputPathMap = new Map(); + TemplateContent._compileCache.set(this.inputPath, inputPathMap); + } + + let cacheable = this.isTemplateCacheable(); + let { useCache, key } = this.engine.getCompileCacheKey(str, this.inputPath); + + // We also tie the compile cache key to the UserConfig instance, to alleviate issues with global template cache + // Better to move the cache to the Eleventy instance instead, no? + // (This specifically failed I18nPluginTest cases with filters being cached across tests and not having access to each plugin’s options) + key = this.eleventyConfig.userConfig._getUniqueId() + key; + + return [cacheable, key, inputPathMap, useCache]; + } + + async compile(str, options = {}) { + let { type, bypassMarkdown, engineOverride } = options; + + // Must happen before cacheable fetch below + // Likely only necessary for Eleventy Layouts, see TemplateMap->initDependencyMap + await this.asyncTemplateInitialization(); + + // this.templateRender is guaranteed here + let tr = await this.getTemplateRender(); + if (engineOverride !== undefined) { + debugDev("%o overriding template engine to use %o", this.inputPath, engineOverride); + await tr.setEngineOverride(engineOverride, bypassMarkdown); + } else { + tr.setUseMarkdown(!bypassMarkdown); + } + if (bypassMarkdown && !this.engine.needsCompilation(str)) { + return function () { + return str; + }; + } + + debugDev("%o compile() using engine: %o", this.inputPath, tr.engineName); + + try { + let res; + if (this.config.useTemplateCache) { + let [cacheable, key, cache, useCache] = this._getCompileCache(str); + if (cacheable && key) { + if (useCache && cache.has(key)) { + this.bench.get("(count) Template Compile Cache Hit").incrementCount(); + return cache.get(key); + } + + this.bench.get("(count) Template Compile Cache Miss").incrementCount(); + + // Compile cache is cleared when the resource is modified (below) + + // Compilation is async, so we eagerly cache a Promise that eventually + // resolves to the compiled function + let withRes = withResolvers(); + res = withRes.resolve; + + cache.set(key, withRes.promise); + } + } + + let typeStr = type ? ` ${type}` : ""; + let templateBenchmark = this.bench.get(`Template Compile${typeStr}`); + let inputPathBenchmark = this.bench.get(`> Compile${typeStr} > ${this.inputPath}`); + templateBenchmark.before(); + inputPathBenchmark.before(); + + let fn = await tr.getCompiledTemplate(str); + inputPathBenchmark.after(); + templateBenchmark.after(); + debugDev("%o getCompiledTemplate function created", this.inputPath); + if (this.config.useTemplateCache && res) { + res(fn); + } + return fn; + } catch (e) { + let [cacheable, key, cache] = this._getCompileCache(str); + if (cacheable && key) { + cache.delete(key); + } + debug(`Having trouble compiling template ${this.inputPath}: %O`, str); + throw new TemplateContentCompileError( + `Having trouble compiling template ${this.inputPath}`, + e, + ); + } + } + + getParseForSymbolsFunction(str) { + let engine = this.engine; + + // Don’t use markdown as the engine to parse for symbols + // TODO pass in engineOverride here + if (this.#preprocessorEngine) { + engine = this.#preprocessorEngine; + } + + if ("parseForSymbols" in engine) { + return () => { + if (Array.isArray(str)) { + return str + .filter((entry) => typeof entry === "string") + .map((entry) => engine.parseForSymbols(entry)) + .flat(); + } + if (typeof str === "string") { + return engine.parseForSymbols(str); + } + return []; + }; + } + } + + // used by computed data or for permalink functions + async _renderFunction(fn, ...args) { + let mixins = Object.assign({}, this.config.javascriptFunctions); + let result = await fn.call(mixins, ...args); + + // normalize Buffer away if returned from permalink + if (Buffer.isBuffer(result)) { + return result.toString(); + } + + return result; + } + + async renderComputedData(str, data) { + if (typeof str === "function") { + return this._renderFunction(str, data); + } + + return this._render(str, data, { + type: "Computed Data", + bypassMarkdown: true, + }); + } + + async renderPermalink(permalink, data) { + let tr = await this.getTemplateRender(); + let permalinkCompilation = tr.engine.permalinkNeedsCompilation(permalink); + + // No string compilation: + // ({ compileOptions: { permalink: "raw" }}) + // These mean `permalink: false`, which is no file system writing: + // ({ compileOptions: { permalink: false }}) + // ({ compileOptions: { permalink: () => false }}) + // ({ compileOptions: { permalink: () => (() = > false) }}) + if (permalinkCompilation === false && typeof permalink !== "function") { + return permalink; + } + + /* Custom `compile` function for permalinks, usage: + permalink: function(permalinkString, inputPath) { + return async function(data) { + return "THIS IS MY RENDERED PERMALINK"; + } + } + */ + if (permalinkCompilation && typeof permalinkCompilation === "function") { + permalink = await this._renderFunction(permalinkCompilation, permalink, this.inputPath); + } + + // Raw permalink function (in the app code data cascade) + if (typeof permalink === "function") { + return this._renderFunction(permalink, data); + } + + return this._render(permalink, data, { + type: "Permalink", + bypassMarkdown: true, + }); + } + + async render(str, data, bypassMarkdown) { + return this._render(str, data, { + type: "Content", + bypassMarkdown, + }); + } + + _getPaginationLogSuffix(data) { + let suffix = []; + if ("pagination" in data) { + suffix.push(" ("); + if (data.pagination.pages) { + suffix.push( + `${data.pagination.pages.length} page${data.pagination.pages.length !== 1 ? "s" : ""}`, + ); + } else { + suffix.push("Pagination"); + } + suffix.push(")"); + } + return suffix.join(""); + } + + async _render(str, data, options = {}) { + let { bypassMarkdown, type } = options; + + try { + if (bypassMarkdown && !this.engine.needsCompilation(str)) { + return str; + } + + let fn = await this.compile(str, { + bypassMarkdown, + engineOverride: data[this.config.keys.engineOverride], + type, + }); + + if (fn === undefined) { + return; + } else if (typeof fn !== "function") { + throw new Error(`The \`compile\` function did not return a function. Received ${fn}`); + } + + // Benchmark + let templateBenchmark = this.bench.get("Render"); + let inputPathBenchmark = this.bench.get( + `> Render${type ? ` ${type}` : ""} > ${this.inputPath}${this._getPaginationLogSuffix(data)}`, + ); + + templateBenchmark.before(); + if (inputPathBenchmark) { + inputPathBenchmark.before(); + } + + let rendered = await fn(data); + + if (inputPathBenchmark) { + inputPathBenchmark.after(); + } + templateBenchmark.after(); + debugDev("%o getCompiledTemplate called, rendered content created", this.inputPath); + return rendered; + } catch (e) { + if (EleventyErrorUtil.isPrematureTemplateContentError(e)) { + return Promise.reject(e); + } else { + let tr = await this.getTemplateRender(); + let engine = tr.getReadableEnginesList(); + debug(`Having trouble rendering ${engine} template ${this.inputPath}: %O`, str); + return Promise.reject( + new TemplateContentRenderError( + `Having trouble rendering ${engine} template ${this.inputPath}`, + e, + ), + ); + } + } + } + + getExtensionEntries() { + return this.engine.extensionEntries; + } + + isFileRelevantToThisTemplate(incrementalFile, metadata = {}) { + // always relevant if incremental file not set (build everything) + if (!incrementalFile) { + return true; + } + + let hasDependencies = this.engine.hasDependencies(incrementalFile); + + let isRelevant = this.engine.isFileRelevantTo(this.inputPath, incrementalFile); + + debug( + "Test dependencies to see if %o is relevant to %o: %o", + this.inputPath, + incrementalFile, + isRelevant, + ); + + let extensionEntries = this.getExtensionEntries().filter((entry) => !!entry.isIncrementalMatch); + if (extensionEntries.length) { + for (let entry of extensionEntries) { + if ( + entry.isIncrementalMatch.call( + { + inputPath: this.inputPath, + isFullTemplate: metadata.isFullTemplate, + isFileRelevantToInputPath: isRelevant, + doesFileHaveDependencies: hasDependencies, + }, + incrementalFile, + ) + ) { + return true; + } + } + + return false; + } else { + // Not great way of building all templates if this is a layout, include, JS dependency. + // TODO improve this for default template syntaxes + + // This is the fallback way of determining if something is incremental (no isIncrementalMatch available) + // This will be true if the inputPath and incrementalFile are the same + if (isRelevant) { + return true; + } + + // only return true here if dependencies are not known + if (!hasDependencies && !metadata.isFullTemplate) { + return true; + } + } + + return false; + } +} + +TemplateContent._inputCache = new Map(); +TemplateContent._compileCache = new Map(); +eventBus.on("eleventy.resourceModified", (path) => { + // delete from input cache + TemplateContent.deleteFromInputCache(path); + + // delete from compile cache + let normalized = TemplatePath.addLeadingDotSlash(path); + let compileCache = TemplateContent._compileCache.get(normalized); + if (compileCache) { + compileCache.clear(); + } +}); + +// Used when the configuration file reset https://github.com/11ty/eleventy/issues/2147 +eventBus.on("eleventy.compileCacheReset", () => { + TemplateContent._compileCache = new Map(); +}); + +export default TemplateContent; diff --git a/node_modules/@11ty/eleventy/src/TemplateFileSlug.js b/node_modules/@11ty/eleventy/src/TemplateFileSlug.js new file mode 100644 index 00000000..03c9a29e --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateFileSlug.js @@ -0,0 +1,57 @@ +import path from "node:path"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +class TemplateFileSlug { + constructor(inputPath, extensionMap, eleventyConfig) { + let inputDir = eleventyConfig.directories.input; + if (inputDir) { + inputPath = TemplatePath.stripLeadingSubPath(inputPath, inputDir); + } + + this.inputPath = inputPath; + this.cleanInputPath = inputPath.replace(/^.\//, ""); + + let dirs = this.cleanInputPath.split("/"); + this.dirs = dirs; + this.dirs.pop(); + + this.parsed = path.parse(inputPath); + this.filenameNoExt = extensionMap.removeTemplateExtension(this.parsed.base); + } + + // `page.filePathStem` see https://v3.11ty.dev/docs/data-eleventy-supplied/#page-variable + getFullPathWithoutExtension() { + return "/" + TemplatePath.join(...this.dirs, this._getRawSlug()); + } + + _getRawSlug() { + let slug = this.filenameNoExt; + return this._stripDateFromSlug(slug); + } + + /** Removes dates in the format of YYYY-MM-DD from a given slug string candidate. */ + _stripDateFromSlug(slug) { + let reg = slug.match(/\d{4}-\d{2}-\d{2}-(.*)/); + if (reg) { + return reg[1]; + } + return slug; + } + + // `page.fileSlug` see https://v3.11ty.dev/docs/data-eleventy-supplied/#page-variable + getSlug() { + let rawSlug = this._getRawSlug(); + + if (rawSlug === "index") { + if (!this.dirs.length) { + return ""; + } + let lastDir = this.dirs[this.dirs.length - 1]; + return this._stripDateFromSlug(lastDir); + } + + return rawSlug; + } +} + +export default TemplateFileSlug; diff --git a/node_modules/@11ty/eleventy/src/TemplateGlob.js b/node_modules/@11ty/eleventy/src/TemplateGlob.js new file mode 100644 index 00000000..9db85e92 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateGlob.js @@ -0,0 +1,35 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; + +class TemplateGlob { + static normalizePath(...paths) { + if (paths[0].charAt(0) === "!") { + throw new Error( + `TemplateGlob.normalizePath does not accept ! glob paths like: ${paths.join("")}`, + ); + } + return TemplatePath.addLeadingDotSlash(TemplatePath.join(...paths)); + } + + static normalize(path) { + path = path.trim(); + if (path.charAt(0) === "!") { + return "!" + TemplateGlob.normalizePath(path.slice(1)); + } else { + return TemplateGlob.normalizePath(path); + } + } + + static map(files) { + if (typeof files === "string") { + return TemplateGlob.normalize(files); + } else if (Array.isArray(files)) { + return files.map(function (path) { + return TemplateGlob.normalize(path); + }); + } else { + return files; + } + } +} + +export default TemplateGlob; diff --git a/node_modules/@11ty/eleventy/src/TemplateLayout.js b/node_modules/@11ty/eleventy/src/TemplateLayout.js new file mode 100644 index 00000000..f8526f23 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateLayout.js @@ -0,0 +1,240 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import TemplateLayoutPathResolver from "./TemplateLayoutPathResolver.js"; +import TemplateContent from "./TemplateContent.js"; +import TemplateData from "./Data/TemplateData.js"; +import layoutCache from "./LayoutCache.js"; + +// const debug = debugUtil("Eleventy:TemplateLayout"); +const debugDev = debugUtil("Dev:Eleventy:TemplateLayout"); + +class TemplateLayout extends TemplateContent { + constructor(key, extensionMap, eleventyConfig) { + if (!eleventyConfig || eleventyConfig.constructor.name !== "TemplateConfig") { + throw new Error("Expected `eleventyConfig` in TemplateLayout constructor."); + } + + let resolver = new TemplateLayoutPathResolver(key, extensionMap, eleventyConfig); + let resolvedPath = resolver.getFullPath(); + + super(resolvedPath, eleventyConfig); + + if (!extensionMap) { + throw new Error("Expected `extensionMap` in TemplateLayout constructor."); + } + + this.extensionMap = extensionMap; + this.key = resolver.getNormalizedLayoutKey(); + this.dataKeyLayoutPath = key; + this.inputPath = resolvedPath; + } + + getKey() { + return this.key; + } + + getFullKey() { + return TemplateLayout.resolveFullKey(this.dataKeyLayoutPath, this.inputDir); + } + + getCacheKeys() { + return new Set([this.dataKeyLayoutPath, this.getFullKey(), this.key]); + } + + static resolveFullKey(key, inputDir) { + return TemplatePath.join(inputDir, key); + } + + static getTemplate(key, eleventyConfig, extensionMap) { + let config = eleventyConfig.getConfig(); + if (!config.useTemplateCache) { + return new TemplateLayout(key, extensionMap, eleventyConfig); + } + + let inputDir = eleventyConfig.directories.input; + let fullKey = TemplateLayout.resolveFullKey(key, inputDir); + if (!layoutCache.has(fullKey)) { + let layout = new TemplateLayout(key, extensionMap, eleventyConfig); + + layoutCache.add(layout); + debugDev("Added %o to LayoutCache", key); + + return layout; + } + + return layoutCache.get(fullKey); + } + + async getTemplateLayoutMapEntry() { + let { data: frontMatterData } = await this.getFrontMatterData(); + return { + // Used by `TemplateLayout.getTemplate()` + key: this.dataKeyLayoutPath, + + // used by `this.getData()` + frontMatterData, + }; + } + + async #getTemplateLayoutMap() { + // For both the eleventy.layouts event and cyclical layout chain checking (e.g., a => b => c => a) + let layoutChain = new Set(); + layoutChain.add(this.inputPath); + + let cfgKey = this.config.keys.layout; + let map = []; + let mapEntry = await this.getTemplateLayoutMapEntry(); + + map.push(mapEntry); + + while (mapEntry.frontMatterData && cfgKey in mapEntry.frontMatterData) { + // Layout of the current layout + let parentLayoutKey = mapEntry.frontMatterData[cfgKey]; + + let layout = TemplateLayout.getTemplate( + parentLayoutKey, + this.eleventyConfig, + this.extensionMap, + ); + + // Abort if a circular layout chain is detected. Otherwise, we'll time out and run out of memory. + if (layoutChain.has(layout.inputPath)) { + throw new Error( + `Your layouts have a circular reference, starting at ${map[0].key}! The layout at ${layout.inputPath} was specified twice in this layout chain.`, + ); + } + + // Keep track of this layout so we can detect duplicates in subsequent iterations + layoutChain.add(layout.inputPath); + + // reassign for next loop + mapEntry = await layout.getTemplateLayoutMapEntry(); + + map.push(mapEntry); + } + + this.layoutChain = Array.from(layoutChain); + + return map; + } + + async getTemplateLayoutMap() { + if (!this.cachedLayoutMap) { + this.cachedLayoutMap = this.#getTemplateLayoutMap(); + } + + return this.cachedLayoutMap; + } + + async getLayoutChain() { + if (!Array.isArray(this.layoutChain)) { + await this.getTemplateLayoutMap(); + } + + return this.layoutChain; + } + + async #getData() { + let map = await this.getTemplateLayoutMap(); + let dataToMerge = []; + for (let j = map.length - 1; j >= 0; j--) { + dataToMerge.push(map[j].frontMatterData); + } + + // Deep merge of layout front matter + let data = TemplateData.mergeDeep(this.config.dataDeepMerge, {}, ...dataToMerge); + delete data[this.config.keys.layout]; + + return data; + } + + async getData() { + if (!this.dataCache) { + this.dataCache = this.#getData(); + } + + return this.dataCache; + } + + async #getCachedCompiledLayoutFunction() { + let rawInput = await this.getPreRender(); + return this.compile(rawInput); + } + + // Do only cache this layout’s render function and delegate the rest to the other templates. + async getCachedCompiledLayoutFunction() { + if (!this.cachedCompiledLayoutFunction) { + this.cachedCompiledLayoutFunction = this.#getCachedCompiledLayoutFunction(); + } + + return this.cachedCompiledLayoutFunction; + } + + async getCompiledLayoutFunctions() { + let layoutMap = await this.getTemplateLayoutMap(); + let fns = []; + + try { + fns.push({ + render: await this.getCachedCompiledLayoutFunction(), + }); + + if (layoutMap.length > 1) { + let [, /*currentLayout*/ parentLayout] = layoutMap; + let { key } = parentLayout; + + let layoutTemplate = TemplateLayout.getTemplate( + key, + this.eleventyConfig, + this.extensionMap, + ); + + // The parent already includes the rest of the layout chain + let upstreamFns = await layoutTemplate.getCompiledLayoutFunctions(); + for (let j = 0, k = upstreamFns.length; j < k; j++) { + fns.push(upstreamFns[j]); + } + } + + return fns; + } catch (e) { + debugDev("Clearing LayoutCache after error."); + layoutCache.clear(); + throw e; + } + } + + async render() { + throw new Error("Internal error: `render` was removed from TemplateLayout.js in Eleventy 3.0."); + } + + // Inefficient? We want to compile all the templatelayouts into a single reusable callback? + // Trouble: layouts may need data variables present downstream/upstream + // This is called from Template->renderPageEntry + async renderPageEntry(pageEntry) { + let templateContent = pageEntry.templateContent; + let compiledFunctions = await this.getCompiledLayoutFunctions(); + for (let { render } of compiledFunctions) { + let data = { + content: templateContent, + ...pageEntry.data, + }; + + templateContent = await render(data); + } + + // Don’t set `templateContent` on pageEntry because collection items should not have layout markup + return templateContent; + } + + resetCaches(types) { + super.resetCaches(types); + delete this.dataCache; + delete this.layoutChain; + delete this.cachedLayoutMap; + delete this.cachedCompiledLayoutFunction; + } +} + +export default TemplateLayout; diff --git a/node_modules/@11ty/eleventy/src/TemplateLayoutPathResolver.js b/node_modules/@11ty/eleventy/src/TemplateLayoutPathResolver.js new file mode 100644 index 00000000..9f5a8ee6 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateLayoutPathResolver.js @@ -0,0 +1,136 @@ +import fs from "node:fs"; +import { TemplatePath } from "@11ty/eleventy-utils"; +// import debugUtil from "debug"; +// const debug = debugUtil("Eleventy:TemplateLayoutPathResolver"); + +class TemplateLayoutPathResolver { + constructor(path, extensionMap, templateConfig) { + if (!templateConfig) { + throw new Error("Expected `templateConfig` in TemplateLayoutPathResolver constructor"); + } + + this.templateConfig = templateConfig; + this.originalPath = path; + this.originalDisplayPath = + TemplatePath.join(this.layoutsDir, this.originalPath) + + ` (via \`layout: ${this.originalPath}\`)`; // for error messaging + + this.path = path; + this.aliases = {}; + this.extensionMap = extensionMap; + if (!extensionMap) { + throw new Error("Expected `extensionMap` in TemplateLayoutPathResolver constructor."); + } + + this.init(); + } + + getVirtualTemplate(layoutPath) { + let inputDirRelativePath = + this.templateConfig.directories.getLayoutPathRelativeToInputDirectory(layoutPath); + return this.config.virtualTemplates[inputDirRelativePath]; + } + + get dirs() { + return this.templateConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + get layoutsDir() { + return this.dirs.layouts || this.dirs.includes; + } + + /* Backwards compat */ + getLayoutsDir() { + return this.layoutsDir; + } + + setAliases() { + this.aliases = Object.assign({}, this.config.layoutAliases, this.aliases); + } + + // for testing + set config(cfg) { + this._config = cfg; + this.init(); + } + + get config() { + if (!this.templateConfig) { + throw new Error("Internal error: Missing this.templateConfig"); + } + + return this.templateConfig.getConfig(); + } + + exists(layoutPath) { + if (this.getVirtualTemplate(layoutPath)) { + return true; + } + let fullPath = this.templateConfig.directories.getLayoutPath(layoutPath); + if (this.templateConfig.existsCache.exists(fullPath)) { + return true; + } + return false; + } + + init() { + // we might be able to move this into the constructor? + this.aliases = Object.assign({}, this.config.layoutAliases, this.aliases); + + if (this.aliases[this.path]) { + this.path = this.aliases[this.path]; + } + + let useLayoutResolution = this.config.layoutResolution; + + if (this.path.split(".").length > 0 && this.exists(this.path)) { + this.filename = this.path; + this.fullPath = this.templateConfig.directories.getLayoutPath(this.path); + } else if (useLayoutResolution) { + this.filename = this.findFileName(); + this.fullPath = this.templateConfig.directories.getLayoutPath(this.filename || ""); + } + } + + addLayoutAlias(from, to) { + this.aliases[from] = to; + } + + getFileName() { + if (!this.filename) { + throw new Error( + `You’re trying to use a layout that does not exist: ${this.originalDisplayPath}`, + ); + } + + return this.filename; + } + + getFullPath() { + if (!this.filename) { + throw new Error( + `You’re trying to use a layout that does not exist: ${this.originalDisplayPath}`, + ); + } + + return this.fullPath; + } + + findFileName() { + for (let filename of this.extensionMap.getFileList(this.path)) { + if (this.exists(filename)) { + return filename; + } + } + } + + getNormalizedLayoutKey() { + return TemplatePath.stripLeadingSubPath(this.fullPath, this.layoutsDir); + } +} + +export default TemplateLayoutPathResolver; diff --git a/node_modules/@11ty/eleventy/src/TemplateMap.js b/node_modules/@11ty/eleventy/src/TemplateMap.js new file mode 100644 index 00000000..52cceb18 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateMap.js @@ -0,0 +1,684 @@ +import { isPlainObject, TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import TemplateCollection from "./TemplateCollection.js"; +import EleventyErrorUtil from "./Errors/EleventyErrorUtil.js"; +import UsingCircularTemplateContentReferenceError from "./Errors/UsingCircularTemplateContentReferenceError.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import DuplicatePermalinkOutputError from "./Errors/DuplicatePermalinkOutputError.js"; +import TemplateData from "./Data/TemplateData.js"; +import GlobalDependencyMap from "./GlobalDependencyMap.js"; + +const debug = debugUtil("Eleventy:TemplateMap"); + +class EleventyMapPagesError extends EleventyBaseError {} +class EleventyDataSchemaError extends EleventyBaseError {} + +// These template URL filenames are allowed to exclude file extensions +const EXTENSIONLESS_URL_ALLOWLIST = [ + "/_redirects", // Netlify specific + "/.htaccess", // Apache + "/_headers", // Cloudflare +]; + +// must match TemplateDepGraph +const SPECIAL_COLLECTION_NAMES = { + keys: "[keys]", + all: "all", +}; + +class TemplateMap { + #dependencyMapInitialized = false; + + constructor(eleventyConfig) { + if (!eleventyConfig || eleventyConfig.constructor.name !== "TemplateConfig") { + throw new Error("Missing or invalid `eleventyConfig` argument."); + } + this.eleventyConfig = eleventyConfig; + this.map = []; + this.collectionsData = null; + this.cached = false; + this.verboseOutput = true; + this.collection = new TemplateCollection(); + } + + set userConfig(config) { + this._userConfig = config; + } + + get userConfig() { + if (!this._userConfig) { + // TODO use this.config for this, need to add collections to mergeable props in userconfig + this._userConfig = this.eleventyConfig.userConfig; + } + + return this._userConfig; + } + + get config() { + if (!this._config) { + this._config = this.eleventyConfig.getConfig(); + } + return this._config; + } + + async add(template) { + if (!template) { + return; + } + + let data = await template.getData(); + let entries = await template.getTemplateMapEntries(data); + + for (let map of entries) { + this.map.push(map); + } + } + + getMap() { + return this.map; + } + + getTagTarget(str) { + if (str === "collections") { + // special, means targeting `collections` specifically + return SPECIAL_COLLECTION_NAMES.keys; + } + + if (str.startsWith("collections.")) { + return str.slice("collections.".length); + } + + // Fixes #2851 + if (str.startsWith("collections['") || str.startsWith('collections["')) { + return str.slice("collections['".length, -2); + } + } + + getPaginationTagTarget(entry) { + if (entry.data.pagination?.data) { + return this.getTagTarget(entry.data.pagination.data); + } + } + + #addEntryToGlobalDependencyGraph(entry) { + let consumes = []; + consumes.push(this.getPaginationTagTarget(entry)); + + if (Array.isArray(entry.data.eleventyImport?.collections)) { + for (let tag of entry.data.eleventyImport.collections) { + consumes.push(tag); + } + } + + // Important: consumers must come before publishers + + // TODO it’d be nice to set the dependency relationship for addCollection here + // But collections are not yet populated (they populate after template order) + let publishes = TemplateData.getIncludedCollectionNames(entry.data); + + this.config.uses.addNewNodeRelationships(entry.inputPath, consumes, publishes); + } + + addAllToGlobalDependencyGraph() { + this.#dependencyMapInitialized = true; + + // Should come before individual entry additions + this.config.uses.initializeUserConfigurationApiCollections(); + + for (let entry of this.map) { + this.#addEntryToGlobalDependencyGraph(entry); + } + } + + async setCollectionByTagName(tagName) { + if (this.isUserConfigCollectionName(tagName)) { + // async + this.collectionsData[tagName] = await this.getUserConfigCollection(tagName); + } else { + this.collectionsData[tagName] = this.getTaggedCollection(tagName); + } + + let precompiled = this.config.precompiledCollections; + if (precompiled?.[tagName]) { + if ( + tagName === "all" || + !Array.isArray(this.collectionsData[tagName]) || + this.collectionsData[tagName].length === 0 + ) { + this.collectionsData[tagName] = precompiled[tagName]; + } + } + } + + // TODO(slightlyoff): major bottleneck + async initDependencyMap(fullTemplateOrder) { + // Temporary workaround for async constructor work in templates + // Issue #3170 #3870 + let inputPathSet = new Set(fullTemplateOrder); + await Promise.all( + this.map + .filter(({ inputPath }) => { + return inputPathSet.has(inputPath); + }) + .map(({ template }) => { + // This also happens for layouts in TemplateContent->compile + return template.asyncTemplateInitialization(); + }), + ); + + for (let depEntry of fullTemplateOrder) { + if (GlobalDependencyMap.isCollection(depEntry)) { + let tagName = GlobalDependencyMap.getTagName(depEntry); + // [keys] should initialize `all` + if (tagName === SPECIAL_COLLECTION_NAMES.keys) { + await this.setCollectionByTagName("all"); + // [NAME] is special and implied (e.g. [keys]) + } else if (!tagName.startsWith("[") && !tagName.endsWith("]")) { + // is a tag (collection) entry + await this.setCollectionByTagName(tagName); + } + continue; + } + + // is a template entry + let map = this.getMapEntryForInputPath(depEntry); + await this.#initDependencyMapEntry(map); + } + } + + async #initDependencyMapEntry(map) { + try { + map._pages = await map.template.getTemplates(map.data); + } catch (e) { + throw new EleventyMapPagesError( + "Error generating template page(s) for " + map.inputPath + ".", + e, + ); + } + + if (map._pages.length === 0) { + // Reminder: a serverless code path was removed here. + } else { + let counter = 0; + for (let page of map._pages) { + // Copy outputPath to map entry + // This is no longer used internally, just for backwards compatibility + // Error added in v3 for https://github.com/11ty/eleventy/issues/3183 + if (map.data.pagination) { + if (!Object.prototype.hasOwnProperty.call(map, "outputPath")) { + Object.defineProperty(map, "outputPath", { + get() { + throw new Error( + "Internal error: `.outputPath` on a paginated map entry is not consistent. Use `_pages[…].outputPath` instead.", + ); + }, + }); + } + } else if (!map.outputPath) { + map.outputPath = page.outputPath; + } + + if (counter === 0 || map.data.pagination?.addAllPagesToCollections) { + if (map.data.eleventyExcludeFromCollections !== true) { + // is in *some* collections + this.collection.add(page); + } + } + + counter++; + } + } + } + + getTemplateOrder() { + // 1. Templates that don’t use Pagination + // 2. Pagination templates that consume config API collections + // 3. Pagination templates consuming `collections` + // 4. Pagination templates consuming `collections.all` + let fullTemplateOrder = this.config.uses.getTemplateOrder(); + + return fullTemplateOrder + .map((entry) => { + if (GlobalDependencyMap.isCollection(entry)) { + return entry; + } + + let inputPath = TemplatePath.addLeadingDotSlash(entry); + if (!this.hasMapEntryForInputPath(inputPath)) { + return false; + } + return inputPath; + }) + .filter(Boolean); + } + + async cache() { + if (!this.#dependencyMapInitialized) { + this.addAllToGlobalDependencyGraph(); + } + + this.collectionsData = {}; + + for (let entry of this.map) { + entry.data.collections = this.collectionsData; + } + + let fullTemplateOrder = this.getTemplateOrder(); + debug( + "Rendering templates in order (%o concurrency): %O", + this.userConfig.getConcurrency(), + fullTemplateOrder, + ); + + await this.initDependencyMap(fullTemplateOrder); + await this.resolveRemainingComputedData(); + + let orderedPaths = this.#removeTagsFromTemplateOrder(fullTemplateOrder); + + let orderedMap = orderedPaths.map((inputPath) => { + return this.getMapEntryForInputPath(inputPath); + }); + + await this.config.events.emitLazy("eleventy.contentMap", () => { + return { + inputPathToUrl: this.generateInputUrlContentMap(orderedMap), + urlToInputPath: this.generateUrlMap(orderedMap), + }; + }); + + await this.runDataSchemas(orderedMap); + await this.populateContentDataInMap(orderedMap); + + this.populateCollectionsWithContent(); + this.cached = true; + + this.checkForDuplicatePermalinks(); + this.checkForMissingFileExtensions(); + + await this.config.events.emitLazy("eleventy.layouts", () => this.generateLayoutsMap()); + } + + generateInputUrlContentMap(orderedMap) { + let entries = {}; + for (let entry of orderedMap) { + entries[entry.inputPath] = entry._pages.map((entry) => entry.url); + } + return entries; + } + + generateUrlMap(orderedMap) { + let entries = {}; + for (let entry of orderedMap) { + for (let page of entry._pages) { + // duplicate urls throw an error, so we can return non array here + entries[page.url] = { + inputPath: entry.inputPath, + groupNumber: page.groupNumber, + }; + } + } + return entries; + } + + hasMapEntryForInputPath(inputPath) { + return Boolean(this.getMapEntryForInputPath(inputPath)); + } + + // TODO(slightlyoff): hot inner loop? + getMapEntryForInputPath(inputPath) { + let absoluteInputPath = TemplatePath.absolutePath(inputPath); + return this.map.find((entry) => { + if (entry.inputPath === inputPath || entry.inputPath === absoluteInputPath) { + return entry; + } + }); + } + + #removeTagsFromTemplateOrder(maps) { + return maps.filter((dep) => !GlobalDependencyMap.isCollection(dep)); + } + + async runDataSchemas(orderedMap) { + for (let map of orderedMap) { + if (!map._pages) { + continue; + } + + for (let pageEntry of map._pages) { + // Data Schema callback #879 + if (typeof pageEntry.data[this.config.keys.dataSchema] === "function") { + try { + await pageEntry.data[this.config.keys.dataSchema](pageEntry.data); + } catch (e) { + throw new EleventyDataSchemaError( + `Error in the data schema for: ${map.inputPath} (via \`eleventyDataSchema\`)`, + e, + ); + } + } + } + } + } + + async populateContentDataInMap(orderedMap) { + let usedTemplateContentTooEarlyMap = []; + + // Note that empty pagination templates will be skipped here as not renderable + let filteredMap = orderedMap.filter((entry) => entry.template.isRenderable()); + + // Get concurrency level from user config + const concurrency = this.userConfig.getConcurrency(); + + // Process the templates in chunks to limit concurrency + // This replaces the functionality of p-map's concurrency option + for (let i = 0; i < filteredMap.length; i += concurrency) { + // Create a chunk of tasks that will run in parallel + const chunk = filteredMap.slice(i, i + concurrency); + + // Run the chunk of tasks in parallel + await Promise.all( + chunk.map(async (map) => { + if (!map._pages) { + throw new Error(`Internal error: _pages not found for ${map.inputPath}`); + } + + // IMPORTANT: this is where template content is rendered + try { + for (let pageEntry of map._pages) { + pageEntry.templateContent = + await pageEntry.template.renderPageEntryWithoutLayout(pageEntry); + } + } catch (e) { + if (EleventyErrorUtil.isPrematureTemplateContentError(e)) { + // Add to list of templates that need to be processed again + usedTemplateContentTooEarlyMap.push(map); + + // Reset cached render promise + for (let pageEntry of map._pages) { + pageEntry.template.resetCaches({ render: true }); + } + } else { + throw e; + } + } + }), + ); + } + + // Process templates that had premature template content errors + // This is the second pass for templates that couldn't be rendered in the first pass + for (let map of usedTemplateContentTooEarlyMap) { + try { + for (let pageEntry of map._pages) { + pageEntry.templateContent = + await pageEntry.template.renderPageEntryWithoutLayout(pageEntry); + } + } catch (e) { + if (EleventyErrorUtil.isPrematureTemplateContentError(e)) { + // If we still have template content errors after the second pass, + // it's likely a circular reference + throw new UsingCircularTemplateContentReferenceError( + `${map.inputPath} contains a circular reference (using collections) to its own templateContent.`, + ); + } else { + // rethrow? + throw e; + } + } + } + } + + getTaggedCollection(tag) { + let result; + if (!tag || tag === "all") { + result = this.collection.getAllSorted(); + } else { + result = this.collection.getFilteredByTag(tag); + } + + // May not return an array (can be anything) + // https://www.11ty.dev/docs/collections-api/#return-values + debug(`Collection: collections.${tag || "all"} size: ${result?.length}`); + + return result; + } + + /* 3.0.0-alpha.1: setUserConfigCollections method removed (was only used for testing) */ + isUserConfigCollectionName(name) { + let collections = this.userConfig.getCollections(); + return name && !!collections[name]; + } + + getUserConfigCollectionNames() { + return Object.keys(this.userConfig.getCollections()); + } + + async getUserConfigCollection(name) { + let configCollections = this.userConfig.getCollections(); + + // This works with async now + let result = await configCollections[name](this.collection); + + // May not return an array (can be anything) + // https://www.11ty.dev/docs/collections-api/#return-values + debug(`Collection: collections.${name} size: ${result?.length}`); + return result; + } + + populateCollectionsWithContent() { + for (let collectionName in this.collectionsData) { + // skip custom collections set in configuration files that have arbitrary types + if (!Array.isArray(this.collectionsData[collectionName])) { + continue; + } + + for (let item of this.collectionsData[collectionName]) { + // skip custom collections set in configuration files that have arbitrary types + if (!isPlainObject(item) || !("inputPath" in item)) { + continue; + } + + let entry = this.getMapEntryForInputPath(item.inputPath); + // This check skips precompiled collections + if (entry) { + let index = item.pageNumber || 0; + let content = entry._pages[index]._templateContent; + if (content !== undefined) { + item.templateContent = content; + } + } + } + } + } + + async resolveRemainingComputedData() { + let promises = []; + for (let entry of this.map) { + for (let pageEntry of entry._pages) { + if (this.config.keys.computed in pageEntry.data) { + promises.push(pageEntry.template.resolveRemainingComputedData(pageEntry.data)); + } + } + } + return Promise.all(promises); + } + + async generateLayoutsMap() { + let layouts = {}; + + for (let entry of this.map) { + for (let page of entry._pages) { + let tmpl = page.template; + if (tmpl.templateUsesLayouts(page.data)) { + let layoutKey = page.data[this.config.keys.layout]; + let layout = tmpl.getLayout(layoutKey); + let layoutChain = await layout.getLayoutChain(); + let priors = []; + for (let filepath of layoutChain) { + if (!layouts[filepath]) { + layouts[filepath] = new Set(); + } + layouts[filepath].add(page.inputPath); + for (let prior of priors) { + layouts[filepath].add(prior); + } + priors.push(filepath); + } + } + } + } + + for (let key in layouts) { + layouts[key] = Array.from(layouts[key]); + } + + return layouts; + } + + #onEachPage(callback) { + for (let template of this.map) { + for (let page of template._pages) { + callback(page, template); + } + } + } + + checkForDuplicatePermalinks() { + let inputs = {}; + let outputPaths = {}; + let warnings = {}; + this.#onEachPage((page, template) => { + if (page.outputPath === false || page.url === false) { + // do nothing (also serverless) + } else { + // Make sure output doesn’t overwrite input (e.g. --input=. --output=.) + // Related to https://github.com/11ty/eleventy/issues/3327 + if (page.outputPath === page.inputPath) { + throw new DuplicatePermalinkOutputError( + `The template at "${page.inputPath}" attempted to overwrite itself.`, + ); + } else if (inputs[page.outputPath]) { + throw new DuplicatePermalinkOutputError( + `The template at "${page.inputPath}" attempted to overwrite an existing template at "${page.outputPath}".`, + ); + } + inputs[page.inputPath] = true; + + if (!outputPaths[page.outputPath]) { + outputPaths[page.outputPath] = [template.inputPath]; + } else { + warnings[page.outputPath] = `Output conflict: multiple input files are writing to \`${ + page.outputPath + }\`. Use distinct \`permalink\` values to resolve this conflict. + 1. ${template.inputPath} +${outputPaths[page.outputPath] + .map(function (inputPath, index) { + return ` ${index + 2}. ${inputPath}\n`; + }) + .join("")} +`; + outputPaths[page.outputPath].push(template.inputPath); + } + } + }); + + let warningList = Object.values(warnings); + if (warningList.length) { + // throw one at a time + throw new DuplicatePermalinkOutputError(warningList[0]); + } + } + + checkForMissingFileExtensions() { + // disabled in config + if (this.userConfig?.errorReporting?.allowMissingExtensions === true) { + return; + } + + this.#onEachPage((page) => { + if ( + page.outputPath === false || + page.url === false || + page.data.eleventyAllowMissingExtension || + EXTENSIONLESS_URL_ALLOWLIST.some((url) => page.url.endsWith(url)) + ) { + // do nothing (also serverless) + } else { + if (TemplatePath.getExtension(page.outputPath) === "") { + let e = + new Error(`The template at '${page.inputPath}' attempted to write to '${page.outputPath}'${page.data.permalink ? ` (via \`permalink\` value: '${page.data.permalink}')` : ""}, which is a target on the file system that does not include a file extension. + +You *probably* want to add a file extension to your permalink so that hosts will know how to correctly serve this file to web browsers. Without a file extension, this file may not be reliably deployed without additional hosting configuration (it won’t have a mime type) and may also cause local development issues if you later attempt to write to a subdirectory of the same name. + +Learn more: https://v3.11ty.dev/docs/permalinks/#trailing-slashes + +This is usually but not *always* an error so if you’d like to disable this error message, add \`eleventyAllowMissingExtension: true\` somewhere in the data cascade for this template or use \`eleventyConfig.configureErrorReporting({ allowMissingExtensions: true });\` to disable this feature globally.`); + e.skipOriginalStack = true; + throw e; + } + } + }); + } + + // TODO move these into TemplateMapTest.js + _testGetAllTags() { + let allTags = {}; + for (let map of this.map) { + let tags = map.data.tags; + if (Array.isArray(tags)) { + for (let tag of tags) { + allTags[tag] = true; + } + } + } + return Object.keys(allTags); + } + + async _testGetUserConfigCollectionsData() { + let collections = {}; + let configCollections = this.userConfig.getCollections(); + + for (let name in configCollections) { + collections[name] = configCollections[name](this.collection); + + debug(`Collection: collections.${name} size: ${collections[name].length}`); + } + + return collections; + } + + async _testGetTaggedCollectionsData() { + let collections = {}; + collections.all = this.collection.getAllSorted(); + debug(`Collection: collections.all size: ${collections.all.length}`); + + let tags = this._testGetAllTags(); + for (let tag of tags) { + collections[tag] = this.collection.getFilteredByTag(tag); + debug(`Collection: collections.${tag} size: ${collections[tag].length}`); + } + return collections; + } + + async _testGetAllCollectionsData() { + let collections = {}; + let taggedCollections = await this._testGetTaggedCollectionsData(); + Object.assign(collections, taggedCollections); + + let userConfigCollections = await this._testGetUserConfigCollectionsData(); + Object.assign(collections, userConfigCollections); + + return collections; + } + + async _testGetCollectionsData() { + if (!this.cached) { + await this.cache(); + } + + return this.collectionsData; + } +} + +export default TemplateMap; diff --git a/node_modules/@11ty/eleventy/src/TemplatePassthrough.js b/node_modules/@11ty/eleventy/src/TemplatePassthrough.js new file mode 100644 index 00000000..b27b634e --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplatePassthrough.js @@ -0,0 +1,389 @@ +import path from "node:path"; + +import { isDynamicPattern } from "tinyglobby"; +import { filesize } from "filesize"; +import copy from "@11ty/recursive-copy"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import checkPassthroughCopyBehavior from "./Util/PassthroughCopyBehaviorCheck.js"; +import ProjectDirectories from "./Util/ProjectDirectories.js"; + +const debug = debugUtil("Eleventy:TemplatePassthrough"); + +class TemplatePassthroughError extends EleventyBaseError {} + +class TemplatePassthrough { + isDryRun = false; + #isInputPathGlob; + #benchmarks; + #isAlreadyNormalized = false; + #projectDirCheck = false; + + // paths already guaranteed from the autocopy plugin + static factory(inputPath, outputPath, opts = {}) { + let p = new TemplatePassthrough( + { + inputPath, + outputPath, + copyOptions: opts.copyOptions, + }, + opts.templateConfig, + ); + + return p; + } + + constructor(path, templateConfig) { + if (!templateConfig || templateConfig.constructor.name !== "TemplateConfig") { + throw new Error( + "Internal error: Missing `templateConfig` or was not an instance of `TemplateConfig`.", + ); + } + this.templateConfig = templateConfig; + + this.rawPath = path; + + // inputPath is relative to the root of your project and not your Eleventy input directory. + // TODO normalize these with forward slashes + this.inputPath = this.normalizeIfDirectory(path.inputPath); + this.#isInputPathGlob = isDynamicPattern(this.inputPath); + + this.outputPath = path.outputPath; + this.copyOptions = path.copyOptions; // custom options for recursive-copy + } + + get benchmarks() { + if (!this.#benchmarks) { + this.#benchmarks = { + aggregate: this.config.benchmarkManager.get("Aggregate"), + }; + } + + return this.#benchmarks; + } + + get config() { + return this.templateConfig.getConfig(); + } + + get directories() { + return this.templateConfig.directories; + } + + // inputDir is used when stripping from output path in `getOutputPath` + get inputDir() { + return this.templateConfig.directories.input; + } + + get outputDir() { + return this.templateConfig.directories.output; + } + + // Skips `getFiles()` normalization + setIsAlreadyNormalized(isNormalized) { + this.#isAlreadyNormalized = Boolean(isNormalized); + } + + setCheckSourceDirectory(check) { + this.#projectDirCheck = Boolean(check); + } + + /* { inputPath, outputPath } though outputPath is *not* the full path: just the output directory */ + getPath() { + return this.rawPath; + } + + async getOutputPath(inputFileFromGlob) { + let { inputDir, outputDir, outputPath, inputPath } = this; + + if (outputPath === true) { + // no explicit target, implied target + if (this.isDirectory(inputPath)) { + let inputRelativePath = TemplatePath.stripLeadingSubPath( + inputFileFromGlob || inputPath, + inputDir, + ); + return ProjectDirectories.normalizeDirectory( + TemplatePath.join(outputDir, inputRelativePath), + ); + } + + return TemplatePath.normalize( + TemplatePath.join( + outputDir, + TemplatePath.stripLeadingSubPath(inputFileFromGlob || inputPath, inputDir), + ), + ); + } + + if (inputFileFromGlob) { + return this.getOutputPathForGlobFile(inputFileFromGlob); + } + + // Has explicit target + + // Bug when copying incremental file overwriting output directory (and making it a file) + // e.g. public/test.css -> _site + // https://github.com/11ty/eleventy/issues/2278 + let fullOutputPath = TemplatePath.normalize(TemplatePath.join(outputDir, outputPath)); + if (outputPath === "" || this.isDirectory(inputPath)) { + fullOutputPath = ProjectDirectories.normalizeDirectory(fullOutputPath); + } + + // TODO room for improvement here: + if ( + !this.#isInputPathGlob && + this.isExists(inputPath) && + !this.isDirectory(inputPath) && + this.isDirectory(fullOutputPath) + ) { + let filename = path.parse(inputPath).base; + return TemplatePath.normalize(TemplatePath.join(fullOutputPath, filename)); + } + + return fullOutputPath; + } + + async getOutputPathForGlobFile(inputFileFromGlob) { + return TemplatePath.join( + await this.getOutputPath(), + TemplatePath.getLastPathSegment(inputFileFromGlob), + ); + } + + setDryRun(isDryRun) { + this.isDryRun = Boolean(isDryRun); + } + + setRunMode(runMode) { + this.runMode = runMode; + } + + setFileSystemSearch(fileSystemSearch) { + this.fileSystemSearch = fileSystemSearch; + } + + async getFiles(glob) { + debug("Searching for: %o", glob); + let b = this.benchmarks.aggregate.get("Searching the file system (passthrough)"); + b.before(); + + if (!this.fileSystemSearch) { + throw new Error("Internal error: Missing `fileSystemSearch` property."); + } + + // TODO perf this globs once per addPassthroughCopy entry + let files = TemplatePath.addLeadingDotSlashArray( + await this.fileSystemSearch.search("passthrough", glob, { + ignore: [ + // *only* ignores output dir (not node_modules!) + this.outputDir, + ], + }), + ); + b.after(); + return files; + } + + isExists(filePath) { + return this.templateConfig.existsCache.exists(filePath); + } + + isDirectory(filePath) { + return this.templateConfig.existsCache.isDirectory(filePath); + } + + // dir is guaranteed to exist by context + // dir may not be a directory + normalizeIfDirectory(input) { + if (typeof input === "string") { + if (input.endsWith(path.sep) || input.endsWith("/")) { + return input; + } + + // When inputPath is a directory, make sure it has a slash for passthrough copy aliasing + // https://github.com/11ty/eleventy/issues/2709 + if (this.isDirectory(input)) { + return `${input}/`; + } + } + + return input; + } + + // maps input paths to output paths + async getFileMap() { + if (this.#isAlreadyNormalized) { + return [ + { + inputPath: this.inputPath, + outputPath: this.outputPath, + }, + ]; + } + + // TODO VirtualFileSystem candidate + if (!isDynamicPattern(this.inputPath) && this.isExists(this.inputPath)) { + return [ + { + inputPath: this.inputPath, + outputPath: await this.getOutputPath(), + }, + ]; + } + + let paths = []; + // If not directory or file, attempt to get globs + let files = await this.getFiles(this.inputPath); + for (let filePathFromGlob of files) { + paths.push({ + inputPath: filePathFromGlob, + outputPath: await this.getOutputPath(filePathFromGlob), + }); + } + + return paths; + } + + /* Types: + * 1. via glob, individual files found + * 2. directory, triggers an event for each file + * 3. individual file + */ + async copy(src, dest, copyOptions) { + if (this.#projectDirCheck && !this.directories.isFileInProjectFolder(src)) { + return Promise.reject( + new TemplatePassthroughError( + "Source file is not in the project directory. Check your passthrough paths.", + ), + ); + } + + if (!this.directories.isFileInOutputFolder(dest)) { + return Promise.reject( + new TemplatePassthroughError( + "Destination is not in the site output directory. Check your passthrough paths.", + ), + ); + } + + let fileCopyCount = 0; + let fileSizeCount = 0; + let map = {}; + let b = this.benchmarks.aggregate.get("Passthrough Copy File"); + + // returns a promise + return copy(src, dest, copyOptions) + .on(copy.events.COPY_FILE_START, (copyOp) => { + // Access to individual files at `copyOp.src` + map[copyOp.src] = copyOp.dest; + b.before(); + }) + .on(copy.events.COPY_FILE_COMPLETE, (copyOp) => { + fileCopyCount++; + fileSizeCount += copyOp.stats.size; + if (copyOp.stats.size > 5000000) { + debug(`Copied %o (⚠️ large) file from %o`, filesize(copyOp.stats.size), copyOp.src); + } else { + debug(`Copied %o file from %o`, filesize(copyOp.stats.size), copyOp.src); + } + b.after(); + }) + .then( + () => { + return { + count: fileCopyCount, + size: fileSizeCount, + map, + }; + }, + (error) => { + if (copyOptions.overwrite === false && error.code === "EEXIST") { + // just ignore if the output already exists and overwrite: false + debug("Overwrite error ignored: %O", error); + return { + count: 0, + size: 0, + map, + }; + } + + return Promise.reject(error); + }, + ); + } + + async write() { + if (this.isDryRun) { + return Promise.resolve({ + count: 0, + map: {}, + }); + } + + debug("Copying %o", this.inputPath); + let fileMap = await this.getFileMap(); + + // default options for recursive-copy + // see https://www.npmjs.com/package/recursive-copy#arguments + let copyOptionsDefault = { + overwrite: true, // overwrite output. fails when input is directory (mkdir) and output is file + dot: true, // copy dotfiles + junk: false, // copy cache files like Thumbs.db + results: false, + expand: false, // follow symlinks (matches recursive-copy default) + debug: false, // (matches recursive-copy default) + + // Note: `filter` callback function only passes in a relative path, which is unreliable + // See https://github.com/timkendrick/recursive-copy/blob/4c9a8b8a4bf573285e9c4a649a30a2b59ccf441c/lib/copy.js#L59 + // e.g. `{ filePaths: [ './img/coolkid.jpg' ], relativePaths: [ '' ] }` + }; + + let copyOptions = Object.assign(copyOptionsDefault, this.copyOptions); + + let promises = fileMap.map((entry) => { + // For-free passthrough copy + if (checkPassthroughCopyBehavior(this.config, this.runMode)) { + let aliasMap = {}; + aliasMap[entry.inputPath] = entry.outputPath; + + return Promise.resolve({ + count: 0, + map: aliasMap, + }); + } + + // Copy the files (only in build mode) + return this.copy(entry.inputPath, entry.outputPath, copyOptions); + }); + + // IMPORTANT: this returns an array of promises, does not await for promise to finish + return Promise.all(promises).then( + (results) => { + // collate the count and input/output map results from the array. + let count = 0; + let size = 0; + let map = {}; + + for (let result of results) { + count += result.count; + size += result.size; + Object.assign(map, result.map); + } + + return { + count, + size, + map, + }; + }, + (err) => { + throw new TemplatePassthroughError(`Error copying passthrough files: ${err.message}`, err); + }, + ); + } +} + +export default TemplatePassthrough; diff --git a/node_modules/@11ty/eleventy/src/TemplatePassthroughManager.js b/node_modules/@11ty/eleventy/src/TemplatePassthroughManager.js new file mode 100644 index 00000000..114dfa93 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplatePassthroughManager.js @@ -0,0 +1,368 @@ +import { isDynamicPattern } from "tinyglobby"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import TemplatePassthrough from "./TemplatePassthrough.js"; +import checkPassthroughCopyBehavior from "./Util/PassthroughCopyBehaviorCheck.js"; +import { isGlobMatch } from "./Util/GlobMatcher.js"; +import { withResolvers } from "./Util/PromiseUtil.js"; + +const debug = debugUtil("Eleventy:TemplatePassthroughManager"); + +class TemplatePassthroughManagerCopyError extends EleventyBaseError {} + +class TemplatePassthroughManager { + #isDryRun = false; + #afterBuild; + #queue = new Map(); + #extensionMap; + + constructor(templateConfig) { + if (!templateConfig || templateConfig.constructor.name !== "TemplateConfig") { + throw new Error("Internal error: Missing or invalid `templateConfig` argument."); + } + + this.templateConfig = templateConfig; + this.config = templateConfig.getConfig(); + + // eleventy# event listeners are removed on each build + this.config.events.on("eleventy#copy", ({ source, target, options }) => { + this.enqueueCopy(source, target, options); + }); + + this.config.events.on("eleventy#beforerender", () => { + this.#afterBuild = withResolvers(); + }); + + this.config.events.on("eleventy#render", () => { + let { resolve } = this.#afterBuild; + resolve(); + }); + + this.reset(); + } + + reset() { + this.count = 0; + this.size = 0; + this.conflictMap = {}; + this.incrementalFile; + + this.#queue = new Map(); + } + + set extensionMap(extensionMap) { + this.#extensionMap = extensionMap; + } + + get extensionMap() { + if (!this.#extensionMap) { + throw new Error("Internal error: missing `extensionMap` in TemplatePassthroughManager."); + } + return this.#extensionMap; + } + + get inputDir() { + return this.templateConfig.directories.input; + } + + get outputDir() { + return this.templateConfig.directories.output; + } + + setDryRun(isDryRun) { + this.#isDryRun = Boolean(isDryRun); + } + + setRunMode(runMode) { + this.runMode = runMode; + } + + setIncrementalFile(path) { + if (path) { + this.incrementalFile = path; + } + } + + resetIncrementalFile() { + this.incrementalFile = undefined; + } + + _normalizePaths(path, outputPath, copyOptions = {}) { + return { + inputPath: TemplatePath.addLeadingDotSlash(path), + outputPath: outputPath ? TemplatePath.stripLeadingDotSlash(outputPath) : true, + copyOptions, + }; + } + + getConfigPaths() { + let paths = []; + let pathsRaw = this.config.passthroughCopies || {}; + debug("`addPassthroughCopy` config API paths: %o", pathsRaw); + for (let [inputPath, { outputPath, copyOptions }] of Object.entries(pathsRaw)) { + paths.push(this._normalizePaths(inputPath, outputPath, copyOptions)); + } + debug("`addPassthroughCopy` config API normalized paths: %o", paths); + return paths; + } + + getConfigPathGlobs() { + return this.getConfigPaths().map((path) => { + return TemplatePath.convertToRecursiveGlobSync(path.inputPath); + }); + } + + getNonTemplatePaths(paths) { + let matches = []; + for (let path of paths) { + if (!this.extensionMap.hasEngine(path)) { + matches.push(path); + } + } + + return matches; + } + + getCopyCount() { + return this.count; + } + + getCopySize() { + return this.size; + } + + getMetadata() { + return { + copyCount: this.getCopyCount(), + copySize: this.getCopySize(), + }; + } + + setFileSystemSearch(fileSystemSearch) { + this.fileSystemSearch = fileSystemSearch; + } + + getTemplatePassthroughForPath(path) { + let inst = new TemplatePassthrough(path, this.templateConfig); + + inst.setFileSystemSearch(this.fileSystemSearch); + inst.setDryRun(this.#isDryRun); + inst.setRunMode(this.runMode); + + return inst; + } + + async copyPassthrough(pass) { + if (!(pass instanceof TemplatePassthrough)) { + throw new TemplatePassthroughManagerCopyError( + "copyPassthrough expects an instance of TemplatePassthrough", + ); + } + + let { inputPath } = pass.getPath(); + + // TODO https://github.com/11ty/eleventy/issues/2452 + // De-dupe both the input and output paired together to avoid the case + // where an input/output pair has been added via multiple passthrough methods (glob, file suffix, etc) + // Probably start with the `filter` callback in recursive-copy but it only passes relative paths + // See the note in TemplatePassthrough.js->write() + + // Also note that `recursive-copy` handles repeated overwrite copy to the same destination just fine. + // e.g. `for(let j=0, k=1000; j { + for (let src in map) { + let dest = map[src]; + if (this.conflictMap[dest]) { + if (src !== this.conflictMap[dest]) { + let paths = [src, this.conflictMap[dest]].sort(); + throw new TemplatePassthroughManagerCopyError( + `Multiple passthrough copy files are trying to write to the same output file (${TemplatePath.standardizeFilePath(dest)}). ${paths.map((p) => TemplatePath.standardizeFilePath(p)).join(" and ")}`, + ); + } else { + // Multiple entries from the same source + debug( + "A passthrough copy entry (%o) caused the same file (%o) to be copied more than once to the output (%o). This is atomically safe but a waste of build resources.", + inputPath, + src, + dest, + ); + } + } + + this.conflictMap[dest] = src; + } + + if (pass.isDryRun) { + // We don’t count the skipped files as we need to iterate over them + debug( + "Skipped %o (either from --dryrun or --incremental or for-free passthrough copy)", + inputPath, + ); + } else { + if (count) { + this.count += count; + this.size += size; + debug("Copied %o (%d files, %d size)", inputPath, count || 0, size || 0); + } else { + debug("Skipped copying %o (emulated passthrough copy)", inputPath); + } + } + + return { + count, + map, + }; + }, + function (e) { + return Promise.reject( + new TemplatePassthroughManagerCopyError(`Having trouble copying '${inputPath}'`, e), + ); + }, + ); + } + + isPassthroughCopyFile(paths, changedFile) { + if (!changedFile) { + return false; + } + + // passthrough copy by non-matching engine extension (via templateFormats) + for (let path of paths) { + if (path === changedFile && !this.extensionMap.hasEngine(path)) { + return true; + } + } + + for (let path of this.getConfigPaths()) { + if (TemplatePath.startsWithSubPath(changedFile, path.inputPath)) { + return path; + } + if ( + changedFile && + isDynamicPattern(path.inputPath) && + isGlobMatch(changedFile, [path.inputPath]) + ) { + return path; + } + } + + return false; + } + + getAllNormalizedPaths(paths = []) { + if (this.incrementalFile) { + let isPassthrough = this.isPassthroughCopyFile(paths, this.incrementalFile); + + if (isPassthrough) { + if (isPassthrough.outputPath) { + return [isPassthrough]; + } + + return [this._normalizePaths(this.incrementalFile)]; + } + + // Fixes https://github.com/11ty/eleventy/issues/2491 + if (!checkPassthroughCopyBehavior(this.config, this.runMode)) { + return []; + } + } + + let normalizedPaths = this.getConfigPaths(); + if (debug.enabled) { + for (let path of normalizedPaths) { + debug("TemplatePassthrough copying from config: %o", path); + } + } + + if (paths?.length) { + let passthroughPaths = this.getNonTemplatePaths(paths); + for (let path of passthroughPaths) { + let normalizedPath = this._normalizePaths(path); + + debug( + `TemplatePassthrough copying from non-matching file extension: ${normalizedPath.inputPath}`, + ); + + normalizedPaths.push(normalizedPath); + } + } + + return normalizedPaths; + } + + // keys: output + // values: input + getAliasesFromPassthroughResults(result) { + let entries = {}; + for (let entry of result) { + for (let src in entry.map) { + let dest = TemplatePath.stripLeadingSubPath(entry.map[src], this.outputDir); + entries["/" + encodeURI(dest)] = src; + } + } + return entries; + } + + async #waitForTemplatesRendered() { + if (!this.#afterBuild) { + return Promise.resolve(); // immediately resolve + } + + let { promise } = this.#afterBuild; + return promise; + } + + enqueueCopy(source, target, copyOptions) { + let key = `${source}=>${target}`; + + // light de-dupe the same source/target combo (might be in the same file, might be viaTransforms) + if (this.#queue.has(key)) { + return; + } + + let passthrough = TemplatePassthrough.factory(source, target, { + templateConfig: this.templateConfig, + copyOptions, + }); + + passthrough.setCheckSourceDirectory(true); + passthrough.setIsAlreadyNormalized(true); + passthrough.setRunMode(this.runMode); + passthrough.setDryRun(this.#isDryRun); + + this.#queue.set(key, this.copyPassthrough(passthrough)); + } + + async copyAll(templateExtensionPaths) { + debug("TemplatePassthrough copy started."); + let normalizedPaths = this.getAllNormalizedPaths(templateExtensionPaths); + + let passthroughs = normalizedPaths.map((path) => this.getTemplatePassthroughForPath(path)); + + let promises = passthroughs.map((pass) => this.copyPassthrough(pass)); + + await this.#waitForTemplatesRendered(); + + for (let [key, afterBuildCopyPromises] of this.#queue) { + promises.push(afterBuildCopyPromises); + } + + return Promise.all(promises).then(async (results) => { + let aliases = this.getAliasesFromPassthroughResults(results); + await this.config.events.emit("eleventy.passthrough", { + map: aliases, + }); + + debug(`TemplatePassthrough copy finished. Current count: ${this.count} (size: ${this.size})`); + return results; + }); + } +} + +export default TemplatePassthroughManager; diff --git a/node_modules/@11ty/eleventy/src/TemplatePermalink.js b/node_modules/@11ty/eleventy/src/TemplatePermalink.js new file mode 100644 index 00000000..9ad51119 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplatePermalink.js @@ -0,0 +1,195 @@ +import path from "node:path"; +import { TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; + +class TemplatePermalink { + // `link` with template syntax should have already been rendered in Template.js + constructor(link, extraSubdir) { + let isLinkAnObject = isPlainObject(link); + + this._isRendered = true; + this._writeToFileSystem = true; + + let buildLink; + + if (isLinkAnObject) { + if ("build" in link) { + buildLink = link.build; + } + + // find the first string key + for (let key in link) { + if (typeof key !== "string") { + continue; + } + break; + } + } else { + buildLink = link; + } + + // permalink: false and permalink: build: false + if (typeof buildLink === "boolean") { + if (buildLink === false) { + this._writeToFileSystem = false; + } else { + throw new Error( + `\`permalink: ${ + isLinkAnObject ? "build: " : "" + }true\` is not a supported feature in Eleventy. Did you mean \`permalink: ${ + isLinkAnObject ? "build: " : "" + }false\`?`, + ); + } + } else if (buildLink) { + if (typeof buildLink !== "string") { + let stringToString = "toString" in buildLink ? `:\n\n${buildLink.toString()}` : ""; + throw new Error( + "Expected permalink value to be a string. Received `" + + typeof buildLink + + "`" + + stringToString, + ); + } + this.buildLink = buildLink; + } + + if (isLinkAnObject) { + // default if permalink is an Object but does not have a `build` prop + if (!("build" in link)) { + this._writeToFileSystem = false; + this._isRendered = false; + } + } + + this.extraPaginationSubdir = extraSubdir || ""; + } + + setUrlTransforms(transforms) { + this._urlTransforms = transforms; + } + + get urlTransforms() { + return this._urlTransforms || []; + } + + _addDefaultLinkFilename(link) { + return link + (link.slice(-1) === "/" ? "index.html" : ""); + } + + toOutputPath() { + if (!this.buildLink) { + // empty or false + return false; + } + let cleanLink = this._addDefaultLinkFilename(this.buildLink); + let parsed = path.parse(cleanLink); + + return TemplatePath.join(parsed.dir, this.extraPaginationSubdir, parsed.base); + } + + // Used in url transforms feature + static getUrlStem(original) { + let subject = original; + if (original.endsWith(".html")) { + subject = original.slice(0, -1 * ".html".length); + } + return TemplatePermalink.normalizePathToUrl(subject); + } + + static normalizePathToUrl(original) { + let compare = original || ""; + + let needleHtml = "/index.html"; + let needleBareTrailingSlash = "/index/"; + let needleBare = "/index"; + if (compare.endsWith(needleHtml)) { + return compare.slice(0, compare.length - needleHtml.length) + "/"; + } else if (compare.endsWith(needleBareTrailingSlash)) { + return compare.slice(0, compare.length - needleBareTrailingSlash.length) + "/"; + } else if (compare.endsWith(needleBare)) { + return compare.slice(0, compare.length - needleBare.length) + "/"; + } + + return original; + } + + // This method is used to generate the `page.url` variable. + + // remove all index.html’s from links + // index.html becomes / + // test/index.html becomes test/ + toHref() { + if (!this.buildLink) { + // empty or false + return false; + } + + let transformedLink = this.toOutputPath(); + let original = (transformedLink.charAt(0) !== "/" ? "/" : "") + transformedLink; + + let normalized = TemplatePermalink.normalizePathToUrl(original) || ""; + for (let transform of this.urlTransforms) { + original = + transform({ + url: normalized, + urlStem: TemplatePermalink.getUrlStem(original), + }) ?? original; + } + + return TemplatePermalink.normalizePathToUrl(original); + } + + toPath(outputDir) { + if (!this.buildLink) { + return false; + } + + let uri = this.toOutputPath(); + + if (uri === false) { + return false; + } + + return TemplatePath.addLeadingDotSlash(TemplatePath.normalize(outputDir + "/" + uri)); + } + + toPathFromRoot() { + if (!this.buildLink) { + return false; + } + + let uri = this.toOutputPath(); + + if (uri === false) { + return false; + } + + return TemplatePath.addLeadingDotSlash(TemplatePath.normalize(uri)); + } + + static _hasDuplicateFolder(dir, base) { + let folders = dir.split("/"); + if (!folders[folders.length - 1]) { + folders.pop(); + } + return folders[folders.length - 1] === base; + } + + static generate(dir, filenameNoExt, extraSubdir, fileExtension = "html") { + let path; + if (fileExtension === "html") { + let hasDupeFolder = TemplatePermalink._hasDuplicateFolder(dir, filenameNoExt); + + path = + (dir ? dir + "/" : "") + + (filenameNoExt !== "index" && !hasDupeFolder ? filenameNoExt + "/" : "") + + "index.html"; + } else { + path = (dir ? dir + "/" : "") + filenameNoExt + "." + fileExtension; + } + + return new TemplatePermalink(path, extraSubdir); + } +} + +export default TemplatePermalink; diff --git a/node_modules/@11ty/eleventy/src/TemplateRender.js b/node_modules/@11ty/eleventy/src/TemplateRender.js new file mode 100644 index 00000000..776f16e9 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateRender.js @@ -0,0 +1,292 @@ +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import TemplateEngineManager from "./Engines/TemplateEngineManager.js"; + +// import debugUtil from "debug"; +// const debug = debugUtil("Eleventy:TemplateRender"); + +class TemplateRenderUnknownEngineError extends EleventyBaseError {} + +// works with full path names or short engine name +class TemplateRender { + #extensionMap; + #config; + + constructor(tmplPath, config) { + if (!tmplPath) { + throw new Error(`TemplateRender requires a tmplPath argument, instead of ${tmplPath}`); + } + this.#setConfig(config); + + this.engineNameOrPath = tmplPath; + this.parseMarkdownWith = this.config.markdownTemplateEngine; + this.parseHtmlWith = this.config.htmlTemplateEngine; + } + + #setConfig(config) { + if (config?.constructor?.name !== "TemplateConfig") { + throw new Error("TemplateRender must receive a TemplateConfig instance."); + } + + this.eleventyConfig = config; + this.config = config.getConfig(); + } + + get dirs() { + return this.eleventyConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + get includesDir() { + return this.dirs.includes; + } + + /* Backwards compat */ + getIncludesDir() { + return this.includesDir; + } + + get config() { + return this.#config; + } + + set config(config) { + this.#config = config; + } + + set extensionMap(extensionMap) { + this.#extensionMap = extensionMap; + } + + get extensionMap() { + if (!this.#extensionMap) { + throw new Error("Internal error: missing `extensionMap` in TemplateRender."); + } + return this.#extensionMap; + } + + async getEngineByName(name) { + // WARNING: eleventyConfig assignment removed here + return this.extensionMap.engineManager.getEngine(name, this.extensionMap); + } + + // Runs once per template + async init(engineNameOrPath) { + let name = engineNameOrPath || this.engineNameOrPath; + this.extensionMap.setTemplateConfig(this.eleventyConfig); + + let extensionEntry = this.extensionMap.getExtensionEntry(name); + let engineName = extensionEntry?.aliasKey || extensionEntry?.key; + if (TemplateEngineManager.isSimpleAlias(extensionEntry)) { + engineName = extensionEntry?.key; + } + this._engineName = engineName; + + if (!extensionEntry || !this._engineName) { + throw new TemplateRenderUnknownEngineError( + `Unknown engine for ${name} (supported extensions: ${this.extensionMap.getReadableFileExtensions()})`, + ); + } + + this._engine = await this.getEngineByName(this._engineName); + + if (this.useMarkdown === undefined) { + this.setUseMarkdown(this._engineName === "md"); + } + } + + get engineName() { + if (!this._engineName) { + throw new Error("TemplateRender needs a call to the init() method."); + } + return this._engineName; + } + + get engine() { + if (!this._engine) { + throw new Error("TemplateRender needs a call to the init() method."); + } + return this._engine; + } + + static parseEngineOverrides(engineName) { + if (typeof (engineName || "") !== "string") { + throw new Error("Expected String passed to parseEngineOverrides. Received: " + engineName); + } + + let overlappingEngineWarningCount = 0; + let engines = []; + let uniqueLookup = {}; + let usingMarkdown = false; + (engineName || "") + .split(",") + .map((name) => { + return name.toLowerCase().trim(); + }) + .forEach((name) => { + // html is assumed (treated as plaintext by the system) + if (!name || name === "html") { + return; + } + + if (name === "md") { + usingMarkdown = true; + return; + } + + if (!uniqueLookup[name]) { + engines.push(name); + uniqueLookup[name] = true; + + // we already short circuit md and html types above + overlappingEngineWarningCount++; + } + }); + + if (overlappingEngineWarningCount > 1) { + throw new Error( + `Don’t mix multiple templating engines in your front matter overrides (exceptions for HTML and Markdown). You used: ${engineName}`, + ); + } + + // markdown should always be first + if (usingMarkdown) { + engines.unshift("md"); + } + + return engines; + } + + // used for error logging and console output. + getReadableEnginesList() { + return this.getReadableEnginesListDifferingFromFileExtension() || this.engineName; + } + + getReadableEnginesListDifferingFromFileExtension() { + let keyFromFilename = this.extensionMap.getKey(this.engineNameOrPath); + if (this.engine?.constructor?.name === "CustomEngine") { + if ( + this.engine.entry && + this.engine.entry.name && + keyFromFilename !== this.engine.entry.name + ) { + return this.engine.entry.name; + } else { + // We don’t have a name for it so we return nothing so we don’t misreport (per #2386) + return; + } + } + + if (this.engineName === "md" && this.useMarkdown && this.parseMarkdownWith) { + return this.parseMarkdownWith; + } + if (this.engineName === "html" && this.parseHtmlWith) { + return this.parseHtmlWith; + } + + // templateEngineOverride in play and template language differs from file extension + if (keyFromFilename !== this.engineName) { + return this.engineName; + } + } + + // TODO templateEngineOverride + getPreprocessorEngineName() { + if (this.engineName === "md" && this.parseMarkdownWith) { + return this.parseMarkdownWith; + } + if (this.engineName === "html" && this.parseHtmlWith) { + return this.parseHtmlWith; + } + // TODO do we need this? + return this.extensionMap.getKey(this.engineNameOrPath); + } + + // We pass in templateEngineOverride here because it isn’t yet applied to templateRender + getEnginesList(engineOverride) { + if (engineOverride) { + let engines = TemplateRender.parseEngineOverrides(engineOverride).reverse(); + return engines.join(","); + } + + if (this.engineName === "md" && this.useMarkdown && this.parseMarkdownWith) { + return `${this.parseMarkdownWith},md`; + } + if (this.engineName === "html" && this.parseHtmlWith) { + return this.parseHtmlWith; + } + + // templateEngineOverride in play + return this.extensionMap.getKey(this.engineNameOrPath); + } + + async setEngineOverride(engineName, bypassMarkdown) { + let engines = TemplateRender.parseEngineOverrides(engineName); + + // when overriding, Template Engines with HTML will instead use the Template Engine as primary and output HTML + // So any HTML engine usage here will never use a preprocessor templating engine. + this.setHtmlEngine(false); + + if (!engines.length) { + await this.init("html"); + return; + } + + await this.init(engines[0]); + + let usingMarkdown = engines[0] === "md" && !bypassMarkdown; + + this.setUseMarkdown(usingMarkdown); + + if (usingMarkdown) { + // false means only parse markdown and not with a preprocessor template engine + this.setMarkdownEngine(engines.length > 1 ? engines[1] : false); + } + } + + getEngineName() { + return this.engineName; + } + + isEngine(engine) { + return this.engineName === engine; + } + + setUseMarkdown(useMarkdown) { + this.useMarkdown = !!useMarkdown; + } + + // this is only called for templateEngineOverride + setMarkdownEngine(markdownEngine) { + this.parseMarkdownWith = markdownEngine; + } + + // this is only called for templateEngineOverride + setHtmlEngine(htmlEngineName) { + this.parseHtmlWith = htmlEngineName; + } + + async _testRender(str, data) { + return this.engine._testRender(str, data); + } + + async getCompiledTemplate(str) { + // TODO refactor better, move into TemplateEngine logic + if (this.engineName === "md") { + return this.engine.compile( + str, + this.engineNameOrPath, + this.parseMarkdownWith, + !this.useMarkdown, + ); + } else if (this.engineName === "html") { + return this.engine.compile(str, this.engineNameOrPath, this.parseHtmlWith); + } else { + return this.engine.compile(str, this.engineNameOrPath); + } + } +} + +export default TemplateRender; diff --git a/node_modules/@11ty/eleventy/src/TemplateWriter.js b/node_modules/@11ty/eleventy/src/TemplateWriter.js new file mode 100644 index 00000000..79b0fee5 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/TemplateWriter.js @@ -0,0 +1,508 @@ +import { TemplatePath } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +import Template from "./Template.js"; +import TemplateMap from "./TemplateMap.js"; +import EleventyFiles from "./EleventyFiles.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import { EleventyErrorHandler } from "./Errors/EleventyErrorHandler.js"; +import EleventyErrorUtil from "./Errors/EleventyErrorUtil.js"; +import FileSystemSearch from "./FileSystemSearch.js"; +import ConsoleLogger from "./Util/ConsoleLogger.js"; + +const debug = debugUtil("Eleventy:TemplateWriter"); + +class TemplateWriterMissingConfigArgError extends EleventyBaseError {} +class EleventyPassthroughCopyError extends EleventyBaseError {} +class EleventyTemplateError extends EleventyBaseError {} + +class TemplateWriter { + #eleventyFiles; + #passthroughManager; + #errorHandler; + #extensionMap; + + constructor( + templateFormats, // TODO remove this, see `get eleventyFiles` first + templateData, + templateConfig, + ) { + if (!templateConfig) { + throw new TemplateWriterMissingConfigArgError("Missing config argument."); + } + this.templateConfig = templateConfig; + this.config = templateConfig.getConfig(); + this.userConfig = templateConfig.userConfig; + + this.templateFormats = templateFormats; + + this.templateData = templateData; + this.isVerbose = true; + this.isDryRun = false; + this.writeCount = 0; + this.renderCount = 0; + this.skippedCount = 0; + this.isRunInitialBuild = true; + + this._templatePathCache = new Map(); + } + + get dirs() { + return this.templateConfig.directories; + } + + get inputDir() { + return this.dirs.input; + } + + get outputDir() { + return this.dirs.output; + } + + get templateFormats() { + return this._templateFormats; + } + + set templateFormats(value) { + this._templateFormats = value; + } + + /* Getter for error handler */ + get errorHandler() { + if (!this.#errorHandler) { + this.#errorHandler = new EleventyErrorHandler(); + this.#errorHandler.isVerbose = this.verboseMode; + this.#errorHandler.logger = this.logger; + } + + return this.#errorHandler; + } + + /* Getter for Logger */ + get logger() { + if (!this._logger) { + this._logger = new ConsoleLogger(); + this._logger.isVerbose = this.verboseMode; + } + + return this._logger; + } + + /* Setter for Logger */ + set logger(logger) { + this._logger = logger; + } + + /* For testing */ + overrideConfig(config) { + this.config = config; + } + + restart() { + this.writeCount = 0; + this.renderCount = 0; + this.skippedCount = 0; + } + + set extensionMap(extensionMap) { + this.#extensionMap = extensionMap; + } + + get extensionMap() { + if (!this.#extensionMap) { + throw new Error("Internal error: missing `extensionMap` in TemplateWriter."); + } + return this.#extensionMap; + } + + setPassthroughManager(mgr) { + this.#passthroughManager = mgr; + } + + setEleventyFiles(eleventyFiles) { + this.#eleventyFiles = eleventyFiles; + } + + get eleventyFiles() { + // usually Eleventy.js will setEleventyFiles with the EleventyFiles manager + if (!this.#eleventyFiles) { + // if not, we can create one (used only by tests) + this.#eleventyFiles = new EleventyFiles(this.templateFormats, this.templateConfig); + + this.#eleventyFiles.setFileSystemSearch(new FileSystemSearch()); + this.#eleventyFiles.init(); + } + + return this.#eleventyFiles; + } + + async _getAllPaths() { + // this is now cached upstream by FileSystemSearch + return this.eleventyFiles.getFiles(); + } + + _createTemplate(path, to = "fs") { + let tmpl = this._templatePathCache.get(path); + let wasCached = false; + + if (tmpl) { + wasCached = true; + // Update config for https://github.com/11ty/eleventy/issues/3468 + // TODO reset other constructor things here like inputDir/outputDir + tmpl.resetCachedTemplate({ + templateData: this.templateData, + extensionMap: this.extensionMap, + eleventyConfig: this.templateConfig, + }); + } else { + tmpl = new Template(path, this.templateData, this.extensionMap, this.templateConfig); + tmpl.setOutputFormat(to); + tmpl.logger = this.logger; + this._templatePathCache.set(path, tmpl); + } + + tmpl.setTransforms(this.config.transforms); + tmpl.setLinters(this.config.linters); + tmpl.setDryRun(this.isDryRun); + tmpl.setIsVerbose(this.isVerbose); + tmpl.reset(); + + return { + template: tmpl, + wasCached, + }; + } + + // incrementalFileShape is `template` or `copy` (for passthrough file copy) + async _addToTemplateMapIncrementalBuild(incrementalFileShape, paths, to = "fs") { + // Render overrides are only used when `--ignore-initial` is in play and an initial build is not run + let ignoreInitialBuild = !this.isRunInitialBuild; + let secondOrderRelevantLookup = {}; + let templates = []; + + let promises = []; + for (let path of paths) { + let { template: tmpl } = this._createTemplate(path, to); + + // Note: removed a fix here to fetch missing templateRender instances + // that was tested as no longer needed (Issue #3170) + // Related: #3870, improved configuration reset + + templates.push(tmpl); + + // This must happen before data is generated for the incremental file only + if (incrementalFileShape === "template" && tmpl.inputPath === this.incrementalFile) { + tmpl.resetCaches(); + } else if ( + // Issue #3824 #3870 + tmpl.isFileRelevantToThisTemplate(this.incrementalFile, { + isFullTemplate: incrementalFileShape === "template", + }) + ) { + tmpl.resetCaches(); + } + + // IMPORTANT: This is where the data is first generated for the template + promises.push(this.templateMap.add(tmpl)); + } + + // Important to set up template dependency relationships first + await Promise.all(promises); + + // Delete incremental file from the dependency graph so we get fresh entries! + // This _must_ happen before any additions, the other ones are in Custom.js and GlobalDependencyMap.js (from the eleventy.layouts Event) + this.config.uses.resetNode(this.incrementalFile); + + // write new template relationships to the global dependency graph for next time + this.templateMap.addAllToGlobalDependencyGraph(); + + // Always disable render for --ignore-initial + if (ignoreInitialBuild) { + for (let tmpl of templates) { + tmpl.setRenderableOverride(false); // disable render + } + return; + } + + for (let tmpl of templates) { + if (incrementalFileShape === "template" && tmpl.inputPath === this.incrementalFile) { + tmpl.setRenderableOverride(undefined); // unset, probably render + } else if ( + tmpl.isFileRelevantToThisTemplate(this.incrementalFile, { + isFullTemplate: incrementalFileShape === "template", + }) + ) { + // changed file is used by template + // template uses the changed file + tmpl.setRenderableOverride(undefined); // unset, probably render + secondOrderRelevantLookup[tmpl.inputPath] = true; + } else if (this.config.uses.isFileUsedBy(this.incrementalFile, tmpl.inputPath)) { + // changed file uses this template + tmpl.setRenderableOverride("optional"); + } else { + // For incremental, always disable render on irrelevant templates + tmpl.setRenderableOverride(false); // disable render + } + } + + let secondOrderRelevantArray = this.config.uses + .getTemplatesRelevantToTemplateList(Object.keys(secondOrderRelevantLookup)) + .map((entry) => TemplatePath.addLeadingDotSlash(entry)); + let secondOrderTemplates = Object.fromEntries( + Object.entries(secondOrderRelevantArray).map(([index, value]) => [value, true]), + ); + + for (let tmpl of templates) { + // second order templates must also be rendered if not yet already rendered at least once and available in cache. + if (secondOrderTemplates[tmpl.inputPath]) { + if (tmpl.isRenderableDisabled()) { + tmpl.setRenderableOverride("optional"); + } + } + } + + // Order of templates does not matter here, they’re reordered later based on dependencies in TemplateMap.js + for (let tmpl of templates) { + if (incrementalFileShape === "template" && tmpl.inputPath === this.incrementalFile) { + // Cache is reset above (to invalidate data cache at the right time) + tmpl.setDryRunViaIncremental(false); + } else if (!tmpl.isRenderableDisabled() && !tmpl.isRenderableOptional()) { + // Related to the template but not the template (reset the render cache, not the read cache) + tmpl.resetCaches({ + data: true, + render: true, + }); + + tmpl.setDryRunViaIncremental(false); + } else { + // During incremental we only reset the data cache for non-matching templates, see https://github.com/11ty/eleventy/issues/2710 + // Keep caches for read/render + tmpl.resetCaches({ + data: true, + }); + + tmpl.setDryRunViaIncremental(true); + + this.skippedCount++; + } + } + } + + async _addToTemplateMapFullBuild(paths, to = "fs") { + if (this.incrementalFile) { + return []; + } + + let ignoreInitialBuild = !this.isRunInitialBuild; + let promises = []; + for (let path of paths) { + let { template: tmpl, wasCached } = this._createTemplate(path, to); + // Render overrides are only used when `--ignore-initial` is in play and an initial build is not run + if (ignoreInitialBuild) { + tmpl.setRenderableOverride(false); // disable render + } else { + tmpl.setRenderableOverride(undefined); // unset, render + } + + if (wasCached) { + tmpl.resetCaches(); + } + + // IMPORTANT: This is where the data is first generated for the template + promises.push(this.templateMap.add(tmpl)); + } + + return Promise.all(promises); + } + + async _addToTemplateMap(paths, to = "fs") { + let incrementalFileShape = this.eleventyFiles.getFileShape(paths, this.incrementalFile); + + // Filter out passthrough copy files + paths = paths.filter((path) => { + if (!this.extensionMap.hasEngine(path)) { + return false; + } + if (incrementalFileShape === "copy") { + this.skippedCount++; + // Filters out templates if the incremental file is a passthrough copy file + return false; + } + return true; + }); + + if (this.incrementalFile) { + // Top level async to get at the promises returned. + return await this._addToTemplateMapIncrementalBuild(incrementalFileShape, paths, to); + } + + // Full Build + let ret = await this._addToTemplateMapFullBuild(paths, to); + + // write new template relationships to the global dependency graph for next time + this.templateMap.addAllToGlobalDependencyGraph(); + + return ret; + } + + async _createTemplateMap(paths, to) { + this.templateMap = new TemplateMap(this.templateConfig); + + await this._addToTemplateMap(paths, to); + await this.templateMap.cache(); + + // Return is used by tests + return this.templateMap; + } + + async _generateTemplate(mapEntry, to) { + let tmpl = mapEntry.template; + + return tmpl.generateMapEntry(mapEntry, to).then((pages) => { + this.renderCount += tmpl.getRenderCount(); + this.writeCount += tmpl.getWriteCount(); + return pages; + }); + } + + async writePassthroughCopy(templateExtensionPaths) { + if (!this.#passthroughManager) { + throw new Error("Internal error: Missing `passthroughManager` instance."); + } + + return this.#passthroughManager.copyAll(templateExtensionPaths).catch((e) => { + this.errorHandler.warn(e, "Error with passthrough copy"); + return Promise.reject(new EleventyPassthroughCopyError("Having trouble copying", e)); + }); + } + + async generateTemplates(paths, to = "fs") { + let promises = []; + // TODO optimize await here + await this._createTemplateMap(paths, to); + debug("Template map created."); + + let usedTemplateContentTooEarlyMap = []; + for (let mapEntry of this.templateMap.getMap()) { + promises.push( + this._generateTemplate(mapEntry, to).catch(function (e) { + // Premature templateContent in layout render, this also happens in + // TemplateMap.populateContentDataInMap for non-layout content + if (EleventyErrorUtil.isPrematureTemplateContentError(e)) { + usedTemplateContentTooEarlyMap.push(mapEntry); + } else { + let outputPaths = `"${mapEntry._pages.map((page) => page.outputPath).join(`", "`)}"`; + return Promise.reject( + new EleventyTemplateError( + `Having trouble writing to ${outputPaths} from "${mapEntry.inputPath}"`, + e, + ), + ); + } + }), + ); + } + + for (let mapEntry of usedTemplateContentTooEarlyMap) { + promises.push( + this._generateTemplate(mapEntry, to).catch(function (e) { + return Promise.reject( + new EleventyTemplateError( + `Having trouble writing to (second pass) "${mapEntry.outputPath}" from "${mapEntry.inputPath}"`, + e, + ), + ); + }), + ); + } + + return promises; + } + + async write() { + let paths = await this._getAllPaths(); + + // This must happen before writePassthroughCopy + this.templateConfig.userConfig.emit("eleventy#beforerender"); + + let aggregatePassthroughCopyPromise = this.writePassthroughCopy(paths); + + let templatesPromise = Promise.all(await this.generateTemplates(paths)).then((results) => { + this.templateConfig.userConfig.emit("eleventy#render"); + + return results; + }); + + return Promise.all([aggregatePassthroughCopyPromise, templatesPromise]).then( + async ([passthroughCopyResults, templateResults]) => { + return { + passthroughCopy: passthroughCopyResults, + // New in 3.0: flatten and filter out falsy templates + templates: templateResults.flat().filter(Boolean), + }; + }, + (e) => { + return Promise.reject(e); + }, + ); + } + + // Passthrough copy not supported in JSON output. + // --incremental not supported in JSON output. + async getJSON(to = "json") { + let paths = await this._getAllPaths(); + let promises = await this.generateTemplates(paths, to); + + return Promise.all(promises).then( + (templateResults) => { + return { + // New in 3.0: flatten and filter out falsy templates + templates: templateResults.flat().filter(Boolean), + }; + }, + (e) => { + return Promise.reject(e); + }, + ); + } + + setVerboseOutput(isVerbose) { + this.isVerbose = isVerbose; + this.errorHandler.isVerbose = isVerbose; + } + + setDryRun(isDryRun) { + this.isDryRun = Boolean(isDryRun); + } + + setRunInitialBuild(runInitialBuild) { + this.isRunInitialBuild = runInitialBuild; + } + setIncrementalBuild(isIncremental) { + this.isIncremental = isIncremental; + } + setIncrementalFile(incrementalFile) { + this.incrementalFile = incrementalFile; + this.#passthroughManager.setIncrementalFile(incrementalFile); + } + resetIncrementalFile() { + this.incrementalFile = null; + this.#passthroughManager.resetIncrementalFile(); + } + + getMetadata() { + return { + // copyCount, copySize + ...(this.#passthroughManager?.getMetadata() || {}), + skipCount: this.skippedCount, + writeCount: this.writeCount, + renderCount: this.renderCount, + }; + } + + get caches() { + return ["_templatePathCache"]; + } +} + +export default TemplateWriter; diff --git a/node_modules/@11ty/eleventy/src/UserConfig.js b/node_modules/@11ty/eleventy/src/UserConfig.js new file mode 100644 index 00000000..215327fe --- /dev/null +++ b/node_modules/@11ty/eleventy/src/UserConfig.js @@ -0,0 +1,1339 @@ +import chalk from "kleur"; +import { DateTime } from "luxon"; +import yaml from "js-yaml"; +import matter from "gray-matter"; +import debugUtil from "debug"; + +import { DeepCopy, TemplatePath, isPlainObject } from "@11ty/eleventy-utils"; + +import HtmlBasePlugin from "./Plugins/HtmlBasePlugin.js"; +import RenderPlugin from "./Plugins/RenderPlugin.js"; +import InputPathToUrlPlugin from "./Plugins/InputPathToUrl.js"; + +import isAsyncFunction from "./Util/IsAsyncFunction.js"; +import objectFilter from "./Util/Objects/ObjectFilter.js"; +import EventEmitter from "./Util/AsyncEventEmitter.js"; +import EleventyCompatibility from "./Util/Compatibility.js"; +import EleventyBaseError from "./Errors/EleventyBaseError.js"; +import BenchmarkManager from "./Benchmark/BenchmarkManager.js"; +import JavaScriptFrontMatter from "./Engines/FrontMatter/JavaScript.js"; +import { augmentFunction } from "./Engines/Util/ContextAugmenter.js"; + +const debug = debugUtil("Eleventy:UserConfig"); + +class UserConfigError extends EleventyBaseError {} + +/** + * Eleventy’s user-land Configuration API + * @module 11ty/eleventy/UserConfig + */ +class UserConfig { + /** @type {boolean} */ + #pluginExecution = false; + /** @type {boolean} */ + #quietModeLocked = false; + /** @type {boolean} */ + #dataDeepMergeModified = false; + /** @type {number|undefined} */ + #uniqueId; + /** @type {number} */ + #concurrency = 1; + // Before using os.availableParallelism(); see https://github.com/11ty/eleventy/issues/3596 + + constructor() { + // These are completely unnecessary lines to satisfy TypeScript + this.plugins = []; + this.templateFormatsAdded = []; + this.additionalWatchTargets = []; + this.watchTargetsConfigReset = new Set(); + this.extensionMap = new Set(); + this.dataExtensions = new Map(); + this.urlTransforms = []; + this.customDateParsingCallbacks = new Set(); + this.ignores = new Set(); + this.events = new EventEmitter(); + + /** @type {object} */ + this.directories = {}; + /** @type {undefined} */ + this.logger; + /** @type {string} */ + this.dir; + /** @type {string} */ + this.pathPrefix; + /** @type {object} */ + this.errorReporting = {}; + /** @type {object} */ + this.templateHandling = {}; + + this.reset(); + this.#uniqueId = Math.random(); + } + + // Internally used in TemplateContent for cache keys + _getUniqueId() { + return this.#uniqueId; + } + + reset() { + debug("Resetting EleventyConfig to initial values."); + + /** @type {EventEmitter} */ + this.events = new EventEmitter(); + this.events.setMaxListeners(25); // defaults to 10 + + /** @type {BenchmarkManager} */ + this.benchmarkManager = new BenchmarkManager(); + + /** @type {object} */ + this.benchmarks = { + /** @type {import('./Benchmark/BenchmarkGroup.js')} */ + config: this.benchmarkManager.get("Configuration"), + /** @type {import('./Benchmark/BenchmarkGroup.js')} */ + aggregate: this.benchmarkManager.get("Aggregate"), + }; + + /** @type {object} */ + this.directoryAssignments = {}; + /** @type {object} */ + this.collections = {}; + /** @type {object} */ + this.precompiledCollections = {}; + this.templateFormats = undefined; + this.templateFormatsAdded = []; + + /** @type {object} */ + this.universal = { + filters: {}, + shortcodes: {}, + pairedShortcodes: {}, + }; + + /** @type {object} */ + this.liquid = { + options: {}, + tags: {}, + filters: {}, + shortcodes: {}, + pairedShortcodes: {}, + parameterParsing: "legacy", // or builtin + }; + + /** @type {object} */ + this.nunjucks = { + // `dev: true` gives us better error messaging + environmentOptions: { dev: true }, + precompiledTemplates: {}, + filters: {}, + asyncFilters: {}, + tags: {}, + globals: {}, + shortcodes: {}, + pairedShortcodes: {}, + asyncShortcodes: {}, + asyncPairedShortcodes: {}, + }; + + /** @type {object} */ + this.javascript = { + functions: {}, + filters: {}, + shortcodes: {}, + pairedShortcodes: {}, + }; + + this.markdownHighlighter = null; + + /** @type {object} */ + this.libraryOverrides = {}; + + /** @type {object} */ + this.passthroughCopies = {}; + this.passthroughCopiesHtmlRelative = new Set(); + + /** @type {object} */ + this.layoutAliases = {}; + this.layoutResolution = true; // extension-less layout files + + /** @type {object} */ + this.linters = {}; + /** @type {object} */ + this.transforms = {}; + /** @type {object} */ + this.preprocessors = {}; + + this.activeNamespace = ""; + this.DateTime = DateTime; + this.dynamicPermalinks = true; + + this.useGitIgnore = true; + + let defaultIgnores = new Set(); + defaultIgnores.add("**/node_modules/**"); + defaultIgnores.add(".git/**"); // TODO `**/.git/**` + this.ignores = new Set(defaultIgnores); + this.watchIgnores = new Set(defaultIgnores); + + this.dataDeepMerge = true; + this.extensionMap = new Set(); + /** @type {object} */ + this.extensionConflictMap = {}; + this.watchJavaScriptDependencies = true; + this.additionalWatchTargets = []; + this.watchTargetsConfigReset = new Set(); + /** @type {object} */ + this.serverOptions = {}; + /** @type {object} */ + this.globalData = {}; + /** @type {object} */ + this.chokidarConfig = {}; + this.watchThrottleWaitTime = 0; //ms + + // using Map to preserve insertion order + this.dataExtensions = new Map(); + + this.quietMode = false; + + this.plugins = []; + + this.useTemplateCache = true; + this.dataFilterSelectors = new Set(); + + /** @type {object} */ + this.libraryAmendments = {}; + this.serverPassthroughCopyBehavior = "copy"; // or "passthrough" + this.urlTransforms = []; + + // Defaults in `defaultConfig.js` + this.dataFileSuffixesOverride = false; + this.dataFileDirBaseNameOverride = false; + + /** @type {object} */ + this.frontMatterParsingOptions = { + // Set a project-wide default. + // language: "yaml", + + // Supplementary engines + engines: { + yaml: yaml.load.bind(yaml), + + // Backwards compatible with `js` object front matter + // https://github.com/11ty/eleventy/issues/2819 + javascript: JavaScriptFrontMatter, + + // Needed for fallback behavior in the new `javascript` engine + // @ts-ignore + jsLegacy: matter.engines.javascript, + + node: function () { + throw new Error( + "The `node` front matter type was a 3.0.0-alpha.x only feature, removed for stable release. Rename to `js` or `javascript` instead!", + ); + }, + }, + }; + + /** @type {object} */ + this.virtualTemplates = {}; + this.freezeReservedData = true; + this.customDateParsingCallbacks = new Set(); + + /** @type {object} */ + this.errorReporting = {}; + /** @type {object} */ + this.templateHandling = {}; + + // Before using os.availableParallelism(); see https://github.com/11ty/eleventy/issues/3596 + this.#concurrency = 1; + } + + // compatibleRange is optional in 2.0.0-beta.2 + versionCheck(compatibleRange) { + let compat = new EleventyCompatibility(compatibleRange); + + if (!compat.isCompatible()) { + throw new UserConfigError(compat.getErrorMessage()); + } + } + + /* + * Events + */ + + // Duplicate event bindings are avoided with the `reset` method above. + // A new EventEmitter instance is created when the config is reset. + on(eventName, callback) { + return this.events.on(eventName, callback); + } + + once(eventName, callback) { + return this.events.once(eventName, callback); + } + + emit(eventName, ...args) { + return this.events.emit(eventName, ...args); + } + + setEventEmitterMode(mode) { + this.events.setHandlerMode(mode); + } + + /* + * Universal getters + */ + getFilter(name) { + // JavaScript functions are included here for backwards compatibility https://github.com/11ty/eleventy/issues/3365 + return this.universal.filters[name] || this.javascript.functions[name]; + } + + getFilters(options = {}) { + if (options.type) { + return objectFilter( + this.universal.filters, + (entry) => entry.__eleventyInternal?.type === options.type, + ); + } + + return this.universal.filters; + } + + getShortcode(name) { + return this.universal.shortcodes[name]; + } + + getShortcodes(options = {}) { + if (options.type) { + return objectFilter( + this.universal.shortcodes, + (entry) => entry.__eleventyInternal?.type === options.type, + ); + } + + return this.universal.shortcodes; + } + + getPairedShortcode(name) { + return this.universal.pairedShortcodes[name]; + } + + getPairedShortcodes(options = {}) { + if (options.type) { + return objectFilter( + this.universal.pairedShortcodes, + (entry) => entry.__eleventyInternal?.type === options.type, + ); + } + return this.universal.pairedShortcodes; + } + + /* + * Private utilities + */ + #add(target, originalName, callback, options) { + let { description, functionName } = options; + + if (typeof callback !== "function") { + throw new Error(`Invalid definition for "${originalName}" ${description}.`); + } + + let name = this.getNamespacedName(originalName); + + if (target[name]) { + debug( + chalk.yellow(`Warning, overwriting previous ${description} "%o" via \`%o(%o)\``), + name, + functionName, + originalName, + ); + } else { + debug(`Adding new ${description} "%o" via \`%o(%o)\``, name, functionName, originalName); + } + + target[name] = this.#decorateCallback(`"${name}" ${description}`, callback); + } + + #decorateCallback(type, callback) { + return this.benchmarks.config.add(type, callback); + } + + /* + * Markdown + */ + + // This is a method for plugins, probably shouldn’t use this in projects. + // Projects should use `setLibrary` as documented here: + // https://github.com/11ty/eleventy/blob/master/docs/engines/markdown.md#use-your-own-options + addMarkdownHighlighter(highlightFn) { + this.markdownHighlighter = highlightFn; + } + + /* + * Filters + */ + + addLiquidFilter(name, callback) { + this.#add(this.liquid.filters, name, callback, { + description: "Liquid Filter", + functionName: "addLiquidFilter", + }); + } + + addNunjucksAsyncFilter(name, callback) { + this.#add(this.nunjucks.asyncFilters, name, callback, { + description: "Nunjucks Filter", + functionName: "addNunjucksAsyncFilter", + }); + } + + // Support the nunjucks style syntax for asynchronous filter add + addNunjucksFilter(name, callback, isAsync = false) { + if (isAsync) { + // namespacing happens downstream + this.addNunjucksAsyncFilter(name, callback); + } else { + this.#add(this.nunjucks.filters, name, callback, { + description: "Nunjucks Filter", + functionName: "addNunjucksFilter", + }); + } + } + + addJavaScriptFilter(name, callback) { + this.#add(this.javascript.filters, name, callback, { + description: "JavaScript Filter", + functionName: "addJavaScriptFilter", + }); + + // Backwards compat for a time before `addJavaScriptFilter` existed. + this.addJavaScriptFunction(name, callback); + } + + addFilter(name, callback) { + // This method *requires* `async function` and will not work with `function` that returns a promise + if (isAsyncFunction(callback)) { + this.addAsyncFilter(name, callback); + return; + } + + // namespacing happens downstream + this.#add(this.universal.filters, name, callback, { + description: "Universal Filter", + functionName: "addFilter", + }); + + this.addLiquidFilter(name, callback); + this.addJavaScriptFilter(name, callback); + this.addNunjucksFilter( + name, + /** @this {any} */ + function (...args) { + // Note that `callback` is already a function as the `#add` method throws an error if not. + let ret = callback.call(this, ...args); + if (ret instanceof Promise) { + throw new Error( + `Nunjucks *is* async-friendly with \`addFilter("${name}", async function() {})\` but you need to supply an \`async function\`. You returned a promise from \`addFilter("${name}", function() {})\`. Alternatively, use the \`addAsyncFilter("${name}")\` configuration API method.`, + ); + } + return ret; + }, + ); + } + + // Liquid, Nunjucks, and JS only + addAsyncFilter(name, callback) { + // namespacing happens downstream + this.#add(this.universal.filters, name, callback, { + description: "Universal Filter", + functionName: "addAsyncFilter", + }); + + this.addLiquidFilter(name, callback); + this.addJavaScriptFilter(name, callback); + this.addNunjucksAsyncFilter( + name, + /** @this {any} */ + async function (...args) { + let cb = args.pop(); + // Note that `callback` is already a function as the `#add` method throws an error if not. + let ret = await callback.call(this, ...args); + cb(null, ret); + }, + ); + } + + /* + * Shortcodes + */ + + addShortcode(name, callback) { + // This method *requires* `async function` and will not work with `function` that returns a promise + if (isAsyncFunction(callback)) { + this.addAsyncShortcode(name, callback); + return; + } + + this.#add(this.universal.shortcodes, name, callback, { + description: "Universal Shortcode", + functionName: "addShortcode", + }); + + this.addLiquidShortcode(name, callback); + this.addJavaScriptShortcode(name, callback); + this.addNunjucksShortcode(name, callback); + } + + addAsyncShortcode(name, callback) { + this.#add(this.universal.shortcodes, name, callback, { + description: "Universal Shortcode", + functionName: "addAsyncShortcode", + }); + + // Related: #498 + this.addNunjucksAsyncShortcode(name, callback); + this.addLiquidShortcode(name, callback); + this.addJavaScriptShortcode(name, callback); + } + + addNunjucksAsyncShortcode(name, callback) { + this.#add(this.nunjucks.asyncShortcodes, name, callback, { + description: "Nunjucks Async Shortcode", + functionName: "addNunjucksAsyncShortcode", + }); + } + + addNunjucksShortcode(name, callback, isAsync = false) { + if (isAsync) { + this.addNunjucksAsyncShortcode(name, callback); + } else { + this.#add(this.nunjucks.shortcodes, name, callback, { + description: "Nunjucks Shortcode", + functionName: "addNunjucksShortcode", + }); + } + } + + addLiquidShortcode(name, callback) { + this.#add(this.liquid.shortcodes, name, callback, { + description: "Liquid Shortcode", + functionName: "addLiquidShortcode", + }); + } + + addPairedShortcode(name, callback) { + // This method *requires* `async function` and will not work with `function` that returns a promise + if (isAsyncFunction(callback)) { + this.addPairedAsyncShortcode(name, callback); + return; + } + + this.#add(this.universal.pairedShortcodes, name, callback, { + description: "Universal Paired Shortcode", + functionName: "addPairedShortcode", + }); + + this.addPairedNunjucksShortcode(name, callback); + this.addPairedLiquidShortcode(name, callback); + this.addPairedJavaScriptShortcode(name, callback); + } + + // Related: #498 + addPairedAsyncShortcode(name, callback) { + this.#add(this.universal.pairedShortcodes, name, callback, { + description: "Universal Paired Async Shortcode", + functionName: "addPairedAsyncShortcode", + }); + + this.addPairedNunjucksAsyncShortcode(name, callback); + this.addPairedLiquidShortcode(name, callback); + this.addPairedJavaScriptShortcode(name, callback); + } + + addPairedNunjucksAsyncShortcode(name, callback) { + this.#add(this.nunjucks.asyncPairedShortcodes, name, callback, { + description: "Nunjucks Async Paired Shortcode", + functionName: "addPairedNunjucksAsyncShortcode", + }); + } + + addPairedNunjucksShortcode(name, callback, isAsync = false) { + if (isAsync) { + this.addPairedNunjucksAsyncShortcode(name, callback); + } else { + this.#add(this.nunjucks.pairedShortcodes, name, callback, { + description: "Nunjucks Paired Shortcode", + functionName: "addPairedNunjucksShortcode", + }); + } + } + + addPairedLiquidShortcode(name, callback) { + this.#add(this.liquid.pairedShortcodes, name, callback, { + description: "Liquid Paired Shortcode", + functionName: "addPairedLiquidShortcode", + }); + } + + addJavaScriptShortcode(name, callback) { + this.#add(this.javascript.shortcodes, name, callback, { + description: "JavaScript Shortcode", + functionName: "addJavaScriptShortcode", + }); + + // Backwards compat for a time before `addJavaScriptShortcode` existed. + this.addJavaScriptFunction(name, callback); + } + + addPairedJavaScriptShortcode(name, callback) { + this.#add(this.javascript.pairedShortcodes, name, callback, { + description: "JavaScript Paired Shortcode", + functionName: "addPairedJavaScriptShortcode", + }); + + // Backwards compat for a time before `addJavaScriptShortcode` existed. + this.addJavaScriptFunction(name, callback); + } + + // Both Filters and shortcodes feed into this + addJavaScriptFunction(name, callback) { + this.#add(this.javascript.functions, name, callback, { + description: "JavaScript Function", + functionName: "addJavaScriptFunction", + }); + } + + /* + * Custom Tags + */ + + // tagCallback: function(liquidEngine) { return { parse: …, render: … }} }; + addLiquidTag(name, tagFn) { + if (typeof tagFn !== "function") { + throw new UserConfigError( + `EleventyConfig.addLiquidTag expects a callback function to be passed in for ${name}: addLiquidTag(name, function(liquidEngine) { return { parse: …, render: … } })`, + ); + } + + this.#add(this.liquid.tags, name, tagFn, { + description: "Liquid Custom Tag", + functionName: "addLiquidTag", + }); + } + + addNunjucksTag(name, tagFn) { + if (typeof tagFn !== "function") { + throw new UserConfigError( + `EleventyConfig.addNunjucksTag expects a callback function to be passed in for ${name}: addNunjucksTag(name, function(nunjucksEngine) {})`, + ); + } + + this.#add(this.nunjucks.tags, name, tagFn, { + description: "Nunjucks Custom Tag", + functionName: "addNunjucksTag", + }); + } + + /* + * Plugins + */ + + // Internal method + _enablePluginExecution() { + this.#pluginExecution = true; + } + + // Internal method + _disablePluginExecution() { + this.#pluginExecution = false; + } + + /* Config is executed in two stages and plugins are the second stage—are we in the plugins stage? */ + isPluginExecution() { + return this.#pluginExecution; + } + + /** + * @typedef {function|Promise|object} PluginDefinition + * @property {Function} [configFunction] + * @property {string} [eleventyPackage] + * @property {object} [eleventyPluginOptions={}] + * @property {boolean} [eleventyPluginOptions.unique] + */ + + /** + * addPlugin: async friendly in 3.0 + * + * @param {PluginDefinition} plugin + */ + addPlugin(plugin, options = {}) { + // First addPlugin of a unique plugin wins + if (plugin?.eleventyPluginOptions?.unique && this.hasPlugin(plugin)) { + debug("Skipping duplicate unique addPlugin for %o", this._getPluginName(plugin)); + return; + } + + if (this.isPluginExecution() || options?.immediate) { + // this might return a promise + return this._executePlugin(plugin, options); + } else { + this.plugins.push({ + plugin, + options, + pluginNamespace: this.activeNamespace, + }); + } + } + + /** @param {string} name */ + resolvePlugin(name) { + let filenameLookup = { + "@11ty/eleventy/html-base-plugin": HtmlBasePlugin, + "@11ty/eleventy/render-plugin": RenderPlugin, + "@11ty/eleventy/inputpath-to-url-plugin": InputPathToUrlPlugin, + + // Async plugins: + // requires e.g. `await resolvePlugin("@11ty/eleventy/i18n-plugin")` to avoid preloading i18n dependencies. + // see https://github.com/11ty/eleventy-plugin-rss/issues/52 + "@11ty/eleventy/i18n-plugin": "./Plugins/I18nPlugin.js", + }; + + if (!filenameLookup[name]) { + throw new Error( + `Invalid name "${name}" passed to resolvePlugin. Valid options: ${Object.keys(filenameLookup).join(", ")}`, + ); + } + + // Future improvement: add support for any npm package name? + if (typeof filenameLookup[name] === "string") { + // returns promise + return import(filenameLookup[name]).then((plugin) => plugin.default); + } + + // return reference + return filenameLookup[name]; + } + + /** @param {string|PluginDefinition} plugin */ + hasPlugin(plugin) { + let pluginName; + if (typeof plugin === "string") { + pluginName = plugin; + } else { + pluginName = this._getPluginName(plugin); + } + + return this.plugins.some((entry) => this._getPluginName(entry.plugin) === pluginName); + } + + // Using Function.name https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#examples + /** @param {PluginDefinition} plugin */ + _getPluginName(plugin) { + if (plugin?.eleventyPackage) { + return plugin.eleventyPackage; + } + if (typeof plugin === "function") { + return plugin.name; + } + if (plugin?.configFunction && typeof plugin.configFunction === "function") { + return plugin.configFunction.name; + } + } + + // Starting in 3.0 the plugin callback might be asynchronous! + _executePlugin(plugin, options) { + let name = this._getPluginName(plugin); + let ret; + debug(`Adding %o plugin`, name || "anonymous"); + let pluginBenchmark = this.benchmarks.aggregate.get("Configuration addPlugin"); + + if (typeof plugin === "function") { + pluginBenchmark.before(); + this.benchmarks.config; + let configFunction = plugin; + ret = configFunction(this, options); + pluginBenchmark.after(); + } else if (plugin?.configFunction) { + pluginBenchmark.before(); + + if (options && typeof options.init === "function") { + // init is not yet async-friendly but it’s also barely used + options.init.call(this, plugin.initArguments || {}); + } + + ret = plugin.configFunction(this, options); + pluginBenchmark.after(); + } else { + throw new UserConfigError( + "Invalid EleventyConfig.addPlugin signature. Should be a function or a valid Eleventy plugin object.", + ); + } + return ret; + } + + /** @param {string} name */ + getNamespacedName(name) { + return this.activeNamespace + name; + } + + async namespace(pluginNamespace, callback) { + let validNamespace = pluginNamespace && typeof pluginNamespace === "string"; + if (validNamespace) { + this.activeNamespace = pluginNamespace || ""; + } + + await callback(this); + + if (validNamespace) { + this.activeNamespace = ""; + } + } + + /** + * Adds a path to a file or directory to the list of pass-through copies + * which are copied as-is to the output. + * + * @param {string|object} fileOrDir The path to the file or directory that should + * be copied. OR an object where the key is the input glob and the property is the output directory + * @param {object} copyOptions options for recursive-copy. + * see https://www.npmjs.com/package/recursive-copy#arguments + * default options are defined in TemplatePassthrough copyOptionsDefault + * @returns {any} a reference to the `EleventyConfig` object. + */ + addPassthroughCopy(fileOrDir, copyOptions = {}) { + if (copyOptions.mode) { + if (copyOptions.mode !== "html-relative") { + throw new Error( + "Invalid `mode` option for `addPassthroughCopy`. Received: '" + copyOptions.mode + "'", + ); + } + if (isPlainObject(fileOrDir)) { + throw new Error( + "mode: 'html-relative' does not yet support passthrough copy objects (input -> output mapping). Use a string glob or an Array of string globs.", + ); + } + + this.passthroughCopiesHtmlRelative?.add({ + match: fileOrDir, + ...copyOptions, + }); + } else if (typeof fileOrDir === "string") { + this.passthroughCopies[fileOrDir] = { outputPath: true, copyOptions }; + } else { + for (let [inputPath, outputPath] of Object.entries(fileOrDir)) { + this.passthroughCopies[inputPath] = { outputPath, copyOptions }; + } + } + + return this; + } + + /* + * Template Formats + */ + _normalizeTemplateFormats() { + throw new Error("The internal _normalizeTemplateFormats() method was removed in Eleventy 3.0"); + } + + setTemplateFormats(templateFormats) { + this.templateFormats = templateFormats; + } + + // additive, usually for plugins + addTemplateFormats(templateFormats) { + this.templateFormatsAdded.push(templateFormats); + } + + /* + * Library Overrides and Options + */ + setLibrary(engineName, libraryInstance) { + if (engineName === "liquid" && Object.keys(this.liquid.options).length) { + debug( + "WARNING: using `eleventyConfig.setLibrary` will override any configuration set using `.setLiquidOptions` via the config API. You’ll need to pass these options to the library yourself.", + ); + } else if (engineName === "njk" && Object.keys(this.nunjucks.environmentOptions).length) { + debug( + "WARNING: using `eleventyConfig.setLibrary` will override any configuration set using `.setNunjucksEnvironmentOptions` via the config API. You’ll need to pass these options to the library yourself.", + ); + } + + this.libraryOverrides[engineName.toLowerCase()] = libraryInstance; + } + + /* These callbacks run on both libraryOverrides and default library instances */ + amendLibrary(engineName, callback) { + let name = engineName.toLowerCase(); + if (!this.libraryAmendments[name]) { + this.libraryAmendments[name] = []; + } + + this.libraryAmendments[name].push(callback); + } + + setLiquidOptions(options) { + this.liquid.options = options; + } + + setLiquidParameterParsing(behavior) { + if (behavior !== "legacy" && behavior !== "builtin") { + throw new Error( + `Invalid argument passed to \`setLiquidParameterParsing\`. Expected one of "legacy" or "builtin".`, + ); + } + this.liquid.parameterParsing = behavior; + } + + setNunjucksEnvironmentOptions(options) { + this.nunjucks.environmentOptions = options; + } + + setNunjucksPrecompiledTemplates(templates) { + this.nunjucks.precompiledTemplates = templates; + } + + setDynamicPermalinks(enabled) { + this.dynamicPermalinks = !!enabled; + } + + setUseGitIgnore(enabled) { + this.useGitIgnore = !!enabled; + } + + setDataDeepMerge(deepMerge) { + this.#dataDeepMergeModified = true; + this.dataDeepMerge = !!deepMerge; + } + + // Used by the Upgrade Helper Plugin + isDataDeepMergeModified() { + return this.#dataDeepMergeModified; + } + + addWatchTarget(additionalWatchTargets, options = {}) { + // Reset the config when the target path changes + if (options.resetConfig) { + this.watchTargetsConfigReset.add(additionalWatchTargets); + } + + this.additionalWatchTargets.push(additionalWatchTargets); + } + + setWatchJavaScriptDependencies(watchEnabled) { + this.watchJavaScriptDependencies = !!watchEnabled; + } + + setServerOptions(options = {}, override = false) { + if (override) { + this.serverOptions = options; + } else { + this.serverOptions = DeepCopy(this.serverOptions, options); + } + } + + setBrowserSyncConfig() { + this._attemptedBrowserSyncUse = true; + debug( + "The `setBrowserSyncConfig` method was removed in Eleventy 2.0.0. Use `setServerOptions` with the new Eleventy development server or the `@11ty/eleventy-browser-sync` plugin moving forward.", + ); + } + + setChokidarConfig(options = {}) { + this.chokidarConfig = options; + } + + setWatchThrottleWaitTime(time = 0) { + this.watchThrottleWaitTime = time; + } + + // 3.0 change: this does a top level merge instead of reset. + setFrontMatterParsingOptions(options = {}) { + DeepCopy(this.frontMatterParsingOptions, options); + } + + /* Internal method for CLI --quiet */ + _setQuietModeOverride(quietMode) { + this.setQuietMode(quietMode); + this.#quietModeLocked = true; + } + + setQuietMode(quietMode) { + if (this.#quietModeLocked) { + debug( + "Attempt to `setQuietMode(%o)` ignored, --quiet command line argument override in place.", + !!quietMode, + ); + // override via CLI takes precedence + return; + } + + this.quietMode = !!quietMode; + } + + addExtension(fileExtension, options = {}) { + let extensions; + + // Array support added in 2.0.0-canary.19 + if (Array.isArray(fileExtension)) { + extensions = fileExtension; + } else { + // single string + extensions = [fileExtension]; + } + + for (let extension of extensions) { + if (this.extensionConflictMap[extension]) { + throw new Error( + `An attempt was made to override the "${extension}" template syntax twice (via the \`addExtension\` configuration API). A maximum of one override is currently supported.`, + ); + } + this.extensionConflictMap[extension] = true; + + /** @type {object} */ + let extensionOptions = Object.assign( + { + // Might be overridden for aliasing in options.key + key: extension, + extension: extension, + }, + options, + ); + + if (extensionOptions.key !== extensionOptions.extension) { + extensionOptions.aliasKey = extensionOptions.extension; + } + + this.extensionMap.add(extensionOptions); + } + } + + addDataExtension(extensionList, parser) { + let options = {}; + // second argument is an object with a `parser` callback + if (typeof parser !== "function") { + if (!("parser" in parser)) { + throw new Error( + "Expected `parser` property in second argument object to `eleventyConfig.addDataExtension`", + ); + } + + options = parser; + parser = options.parser; + } + + let extensions = extensionList.split(",").map((s) => s.trim()); + for (let extension of extensions) { + this.dataExtensions.set(extension, { + extension, + parser, + options, + }); + } + } + + setUseTemplateCache(bypass) { + this.useTemplateCache = !!bypass; + } + + setPrecompiledCollections(collections) { + this.precompiledCollections = collections; + } + + // "passthrough" is the default, no other value is explicitly required in code + // but opt-out via "copy" is suggested + setServerPassthroughCopyBehavior(behavior) { + this.serverPassthroughCopyBehavior = behavior; + } + + // Url transforms change page.url and work good with server side content-negotiation (e.g. i18n plugin) + addUrlTransform(callback) { + this.urlTransforms.push(callback); + } + + setDataFileSuffixes(suffixArray) { + this.dataFileSuffixesOverride = suffixArray; + } + + setDataFileBaseName(baseName) { + this.dataFileDirBaseNameOverride = baseName; + } + + addTemplate(virtualInputPath, content, data) { + // Lookups keys must be normalized + virtualInputPath = TemplatePath.stripLeadingDotSlash( + TemplatePath.standardizeFilePath(virtualInputPath), + ); + if (this.virtualTemplates[virtualInputPath]) { + throw new Error( + "Virtual template conflict: you can’t add multiple virtual templates that have the same inputPath: " + + virtualInputPath, + ); + } + + this.virtualTemplates[virtualInputPath] = { + inputPath: virtualInputPath, + data, + content, + }; + } + + isVirtualTemplate(virtualInputPath) { + return Boolean(this.virtualTemplates[virtualInputPath]); + } + + #setDirectory(key, dir) { + if (this.isPluginExecution()) { + throw new Error( + "The `set*Directory` configuration API methods are not yet allowed in plugins.", + ); + } + this.directoryAssignments[key] = dir; + } + + setInputDirectory(dir) { + this.#setDirectory("input", dir); + } + + setOutputDirectory(dir) { + this.#setDirectory("output", dir); + } + + setDataDirectory(dir) { + this.#setDirectory("data", dir); + } + + setIncludesDirectory(dir) { + this.#setDirectory("includes", dir); + } + + setLayoutsDirectory(dir) { + this.#setDirectory("layouts", dir); + } + + // Some data keywords in Eleventy are reserved, throw an error if an application tries to set these. + setFreezeReservedData(bool) { + this.freezeReservedData = !!bool; + } + + addDateParsing(callback) { + if (typeof callback === "function") { + this.customDateParsingCallbacks.add(callback); + } else { + throw new Error("addDateParsing expects a function argument."); + } + } + + // 3.0.0-alpha.18 started merging conflicts here (when possible), issue #3389 + addGlobalData(name, data) { + name = this.getNamespacedName(name); + if (this.globalData[name]) { + if (isPlainObject(this.globalData[name]) && isPlainObject(data)) { + DeepCopy(this.globalData[name], data); + } else { + debug("Warning: overwriting a previous value set with addGlobalData(%o)", name); + this.globalData[name] = data; + } + } else { + this.globalData[name] = data; + } + return this; + } + + addNunjucksGlobal(name, globalType) { + name = this.getNamespacedName(name); + + if (this.nunjucks.globals[name]) { + debug( + chalk.yellow("Warning, overwriting a Nunjucks global with `addNunjucksGlobal(%o)`"), + name, + ); + } + + if (typeof globalType === "function") { + this.nunjucks.globals[name] = this.#decorateCallback(`"${name}" Nunjucks Global`, globalType); + } else { + this.nunjucks.globals[name] = globalType; + } + } + + addTransform(name, callback) { + name = this.getNamespacedName(name); + + this.transforms[name] = this.#decorateCallback(`"${name}" Transform`, callback); + } + + addPreprocessor(name, fileExtensions, callback) { + name = this.getNamespacedName(name); + + this.preprocessors[name] = { + filter: fileExtensions, + callback: this.#decorateCallback(`"${name}" Preprocessor`, callback), + }; + } + + addLinter(name, callback) { + name = this.getNamespacedName(name); + + this.linters[name] = this.#decorateCallback(`"${name}" Linter`, callback); + } + + addLayoutAlias(from, to) { + this.layoutAliases[from] = to; + } + + setLayoutResolution(resolution) { + this.layoutResolution = !!resolution; + } + + // compat + enableLayoutResolution() { + this.layoutResolution = true; + } + + configureErrorReporting(options = {}) { + // allowMissingExtensions: true + Object.assign(this.errorReporting, options); + } + + configureTemplateHandling(options = {}) { + // writeMode: "sync" // "async" + Object.assign(this.templateHandling, options); + } + + /* + * Collections + */ + + // get config defined collections + getCollections() { + return this.collections; + } + + addCollection(name, callback) { + name = this.getNamespacedName(name); + + if (this.collections[name]) { + throw new UserConfigError( + `config.addCollection(${name}) already exists. Try a different name for your collection.`, + ); + } + + this.collections[name] = callback; + } + + augmentFunctionContext(fn, options) { + let t = typeof fn; + if (t !== "function") { + throw new UserConfigError( + "Invalid type passed to `augmentFunctionContext`—function was expected and received: " + t, + ); + } + + return augmentFunction(fn, options); + } + + setConcurrency(number) { + if (typeof number !== "number") { + throw new UserConfigError("Argument passed to `setConcurrency` must be a number."); + } + + this.#concurrency = number; + } + + getConcurrency() { + return this.#concurrency; + } + + getMergingConfigObject() { + let obj = { + // filters removed in 1.0 (use addTransform instead) + transforms: this.transforms, + linters: this.linters, + preprocessors: this.preprocessors, + globalData: this.globalData, + layoutAliases: this.layoutAliases, + layoutResolution: this.layoutResolution, + passthroughCopiesHtmlRelative: this.passthroughCopiesHtmlRelative, + passthroughCopies: this.passthroughCopies, + + // Liquid + liquidOptions: this.liquid.options, + liquidTags: this.liquid.tags, + liquidFilters: this.liquid.filters, + liquidShortcodes: this.liquid.shortcodes, + liquidPairedShortcodes: this.liquid.pairedShortcodes, + liquidParameterParsing: this.liquid.parameterParsing, + + // Nunjucks + nunjucksEnvironmentOptions: this.nunjucks.environmentOptions, + nunjucksPrecompiledTemplates: this.nunjucks.precompiledTemplates, + nunjucksFilters: this.nunjucks.filters, + nunjucksAsyncFilters: this.nunjucks.asyncFilters, + nunjucksTags: this.nunjucks.tags, + nunjucksGlobals: this.nunjucks.globals, + nunjucksAsyncShortcodes: this.nunjucks.asyncShortcodes, + nunjucksShortcodes: this.nunjucks.shortcodes, + nunjucksAsyncPairedShortcodes: this.nunjucks.asyncPairedShortcodes, + nunjucksPairedShortcodes: this.nunjucks.pairedShortcodes, + + // 11ty.js + javascriptFunctions: this.javascript.functions, // filters and shortcodes, combined + javascriptShortcodes: this.javascript.shortcodes, + javascriptPairedShortcodes: this.javascript.pairedShortcodes, + javascriptFilters: this.javascript.filters, + + // Markdown + markdownHighlighter: this.markdownHighlighter, + + libraryOverrides: this.libraryOverrides, + dynamicPermalinks: this.dynamicPermalinks, + useGitIgnore: this.useGitIgnore, + ignores: this.ignores, + watchIgnores: this.watchIgnores, + dataDeepMerge: this.dataDeepMerge, + watchJavaScriptDependencies: this.watchJavaScriptDependencies, + additionalWatchTargets: this.additionalWatchTargets, + watchTargetsConfigReset: this.watchTargetsConfigReset, + serverOptions: this.serverOptions, + chokidarConfig: this.chokidarConfig, + watchThrottleWaitTime: this.watchThrottleWaitTime, + frontMatterParsingOptions: this.frontMatterParsingOptions, + dataExtensions: this.dataExtensions, + extensionMap: this.extensionMap, + quietMode: this.quietMode, + events: this.events, + benchmarkManager: this.benchmarkManager, + plugins: this.plugins, + useTemplateCache: this.useTemplateCache, + precompiledCollections: this.precompiledCollections, + dataFilterSelectors: this.dataFilterSelectors, + libraryAmendments: this.libraryAmendments, + serverPassthroughCopyBehavior: this.serverPassthroughCopyBehavior, + urlTransforms: this.urlTransforms, + virtualTemplates: this.virtualTemplates, + // `directories` and `directoryAssignments` are merged manually prior to plugin processing + freezeReservedData: this.freezeReservedData, + customDateParsing: this.customDateParsingCallbacks, + errorReporting: this.errorReporting, + templateHandling: this.templateHandling, + }; + + if (Array.isArray(this.dataFileSuffixesOverride)) { + // no upstream merging of this array, so we add the override: prefix + obj["override:dataFileSuffixes"] = this.dataFileSuffixesOverride; + } + + if (this.dataFileDirBaseNameOverride) { + obj.dataFileDirBaseNameOverride = this.dataFileDirBaseNameOverride; + } + + return obj; + } + + // No-op functions for backwards compat + addHandlebarsHelper() {} + setPugOptions() {} + setEjsOptions() {} + addHandlebarsShortcode() {} + addPairedHandlebarsShortcode() {} +} + +export default UserConfig; diff --git a/node_modules/@11ty/eleventy/src/Util/ArrayUtil.js b/node_modules/@11ty/eleventy/src/Util/ArrayUtil.js new file mode 100644 index 00000000..bcb61dee --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ArrayUtil.js @@ -0,0 +1,24 @@ +export function arrayDelete(arr, match) { + if (!Array.isArray(arr)) { + return []; + } + + if (!match) { + return arr; + } + + // only mutates if found + if (typeof match === "function") { + if (arr.find(match)) { + return arr.filter((entry) => { + return !match(entry); + }); + } + } else if (arr.includes(match)) { + return arr.filter((entry) => { + return entry !== match; + }); + } + + return arr; +} diff --git a/node_modules/@11ty/eleventy/src/Util/AsyncEventEmitter.js b/node_modules/@11ty/eleventy/src/Util/AsyncEventEmitter.js new file mode 100644 index 00000000..0bc471f9 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/AsyncEventEmitter.js @@ -0,0 +1,88 @@ +import { EventEmitter } from "node:events"; + +/** + * This class emits events asynchronously. + * + * Note that Eleventy has two separate event emitter instances it uses: + * 1. a userland one (UserConfig.js) + * 2. a global one for internals (EventBus.js) + */ +class AsyncEventEmitter extends EventEmitter { + #handlerMode = "parallel"; + + // TypeScript slop + constructor(...args) { + super(...args); + } + + reset() { + // `eleventy#` event type listeners are removed at the start of each build (singletons) + for (let type of this.eventNames()) { + if (typeof type === "string" && type.startsWith("eleventy#")) { + this.removeAllListeners(type); + } + } + + } + + /** + * @param {string} type - The event name to emit. + * @param {...*} args - Additional arguments that get passed to listeners. + * @returns {Promise} - Promise resolves once all listeners were invoked + */ + /** @ts-expect-error */ + async emit(type, ...args) { + let listeners = this.listeners(type); + if (listeners.length === 0) { + return []; + } + + if (this.#handlerMode == "sequential") { + const result = []; + for (const listener of listeners) { + const returnValue = await listener.apply(this, args); + result.push(returnValue); + } + return result; + } else { + return Promise.all( + listeners.map((listener) => { + return listener.apply(this, args); + }), + ); + } + } + + /** + * @param {string} type - The event name to emit. + * @param {...*} args - Additional lazy-executed function arguments that get passed to listeners. + * @returns {Promise} - Promise resolves once all listeners were invoked + */ + async emitLazy(type, ...args) { + let listeners = this.listeners(type); + if (listeners.length === 0) { + return []; + } + + let argsMap = []; + for (let arg of args) { + if (typeof arg === "function") { + let r = arg(); + if (r instanceof Promise) { + r = await r; + } + argsMap.push(r); + } else { + argsMap.push(arg); + } + } + + return this.emit.call(this, type, ...argsMap); + } + + setHandlerMode(mode) { + this.#handlerMode = mode; + } +} + +export default AsyncEventEmitter; diff --git a/node_modules/@11ty/eleventy/src/Util/Compatibility.js b/node_modules/@11ty/eleventy/src/Util/Compatibility.js new file mode 100644 index 00000000..c90a9b33 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Compatibility.js @@ -0,0 +1,59 @@ +import semver from "semver"; + +import { getEleventyPackageJson, getWorkingProjectPackageJson } from "./ImportJsonSync.js"; + +const pkg = getEleventyPackageJson(); + +// Used in user config versionCheck method. +class Compatibility { + static NORMALIZE_PRERELEASE_REGEX = /-canary\b/g; + + static #projectPackageJson; + + constructor(compatibleRange) { + this.compatibleRange = Compatibility.getCompatibilityValue(compatibleRange); + } + + static get projectPackageJson() { + if (!this.#projectPackageJson) { + this.#projectPackageJson = getWorkingProjectPackageJson(); + } + + return this.#projectPackageJson; + } + + static normalizeIdentifier(identifier) { + return identifier.replace(Compatibility.NORMALIZE_PRERELEASE_REGEX, "-alpha"); + } + + static getCompatibilityValue(compatibleRange) { + if (compatibleRange) { + return compatibleRange; + } + + // fetch from project’s package.json + if (this.projectPackageJson?.["11ty"]?.compatibility) { + return this.projectPackageJson["11ty"].compatibility; + } + } + + isCompatible() { + return Compatibility.satisfies(pkg.version, this.compatibleRange); + } + + static satisfies(version, compatibleRange) { + return semver.satisfies( + Compatibility.normalizeIdentifier(version), + Compatibility.normalizeIdentifier(compatibleRange), + { + includePrerelease: true, + }, + ); + } + + getErrorMessage() { + return `We found Eleventy version '${pkg.version}' which does not meet the required version range: '${this.compatibleRange}'. Use \`npm install @11ty/eleventy\` to upgrade your local project to the latest Eleventy version (or \`npm install @11ty/eleventy -g\` to upgrade the globally installed version).`; + } +} + +export default Compatibility; diff --git a/node_modules/@11ty/eleventy/src/Util/ConsoleLogger.js b/node_modules/@11ty/eleventy/src/Util/ConsoleLogger.js new file mode 100644 index 00000000..ba411963 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ConsoleLogger.js @@ -0,0 +1,140 @@ +import { Readable } from "node:stream"; +import chalk from "kleur"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Logger"); + +/** + * Logger implementation that logs to STDOUT. + * @typedef {'error'|'log'|'warn'|'info'} LogType + */ +class ConsoleLogger { + /** @type {boolean} */ + #isVerbose = true; + /** @type {boolean} */ + #isChalkEnabled = true; + /** @type {object|boolean|undefined} */ + #logger; + /** @type {Readable|undefined} */ + #outputStream; + + constructor() {} + + isLoggingEnabled() { + if (!this.isVerbose || process.env.DEBUG) { + return true; + } + return this.#logger !== false; + } + + get isVerbose() { + return this.#isVerbose; + } + + set isVerbose(verbose) { + this.#isVerbose = !!verbose; + } + + get isChalkEnabled() { + return this.#isChalkEnabled; + } + + set isChalkEnabled(enabled) { + this.#isChalkEnabled = !!enabled; + } + + overrideLogger(logger) { + this.#logger = logger; + } + + get logger() { + return this.#logger || console; + } + + /** @param {string} msg */ + log(msg) { + this.message(msg); + } + + /** + * @typedef LogOptions + * @property {string} message + * @property {string=} prefix + * @property {LogType=} type + * @property {string=} color + * @property {boolean=} force + * @param {LogOptions} options + */ + logWithOptions({ message, type, prefix, color, force }) { + this.message(message, type, color, force, prefix); + } + + /** @param {string} msg */ + forceLog(msg) { + this.message(msg, undefined, undefined, true); + } + + /** @param {string} msg */ + info(msg) { + this.message(msg, "warn", "blue"); + } + + /** @param {string} msg */ + warn(msg) { + this.message(msg, "warn", "yellow"); + } + + /** @param {string} msg */ + error(msg) { + this.message(msg, "error", "red"); + } + + get outputStream() { + if (!this.#outputStream) { + this.#outputStream = new Readable({ + read() {}, + }); + } + return this.#outputStream; + } + + /** @param {string} msg */ + toStream(msg) { + this.outputStream.push(msg); + } + + closeStream() { + this.outputStream.push(null); + return this.outputStream; + } + + /** + * Formats the message to log. + * + * @param {string} message - The raw message to log. + * @param {LogType} [type='log'] - The error level to log. + * @param {string|undefined} [chalkColor=undefined] - Color name or falsy to disable + * @param {boolean} [forceToConsole=false] - Enforce a log on console instead of specified target. + */ + message( + message, + type = "log", + chalkColor = undefined, + forceToConsole = false, + prefix = "[11ty]", + ) { + if (!forceToConsole && (!this.isVerbose || process.env.DEBUG)) { + debug(message); + } else if (this.#logger !== false) { + message = `${chalk.gray(prefix)} ${message.split("\n").join(`\n${chalk.gray(prefix)} `)}`; + + if (chalkColor && this.isChalkEnabled) { + this.logger[type](chalk[chalkColor](message)); + } else { + this.logger[type](message); + } + } + } +} + +export default ConsoleLogger; diff --git a/node_modules/@11ty/eleventy/src/Util/DateGitFirstAdded.js b/node_modules/@11ty/eleventy/src/Util/DateGitFirstAdded.js new file mode 100644 index 00000000..0cc5959c --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/DateGitFirstAdded.js @@ -0,0 +1,23 @@ +import { spawnAsync } from "./SpawnAsync.js"; + +async function getGitFirstAddedTimeStamp(filePath) { + try { + let timestamp = await spawnAsync( + "git", + // Formats https://www.git-scm.com/docs/git-log#_pretty_formats + // %at author date, UNIX timestamp + ["log", "--diff-filter=A", "--follow", "-1", "--format=%at", filePath], + ); + return parseInt(timestamp, 10) * 1000; + } catch (e) { + // do nothing + } +} + +// return a Date +export default async function (inputPath) { + let timestamp = await getGitFirstAddedTimeStamp(inputPath); + if (timestamp) { + return new Date(timestamp); + } +} diff --git a/node_modules/@11ty/eleventy/src/Util/DateGitLastUpdated.js b/node_modules/@11ty/eleventy/src/Util/DateGitLastUpdated.js new file mode 100644 index 00000000..1f58c110 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/DateGitLastUpdated.js @@ -0,0 +1,23 @@ +import { spawnAsync } from "./SpawnAsync.js"; + +async function getGitLastUpdatedTimeStamp(filePath) { + try { + let timestamp = await spawnAsync( + "git", + // Formats https://www.git-scm.com/docs/git-log#_pretty_formats + // %at author date, UNIX timestamp + ["log", "-1", "--format=%at", filePath], + ); + return parseInt(timestamp, 10) * 1000; + } catch (e) { + // do nothing + } +} + +// return a Date +export default async function (inputPath) { + let timestamp = await getGitLastUpdatedTimeStamp(inputPath); + if (timestamp) { + return new Date(timestamp); + } +} diff --git a/node_modules/@11ty/eleventy/src/Util/DirContains.js b/node_modules/@11ty/eleventy/src/Util/DirContains.js new file mode 100644 index 00000000..c19990cb --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/DirContains.js @@ -0,0 +1,10 @@ +import path from "node:path"; + +// Returns true if subfolder is in parent (accepts absolute or relative paths for both) +export default function (parentFolder, subFolder) { + // path.resolve returns an absolute path + if (path.resolve(subFolder).startsWith(path.resolve(parentFolder))) { + return true; + } + return false; +} diff --git a/node_modules/@11ty/eleventy/src/Util/EsmResolver.js b/node_modules/@11ty/eleventy/src/Util/EsmResolver.js new file mode 100644 index 00000000..ae515f1b --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/EsmResolver.js @@ -0,0 +1,58 @@ +import debugUtil from "debug"; +import { fileURLToPath } from "node:url"; +import PathNormalizer from "./PathNormalizer.js"; + +const debug = debugUtil("Eleventy:EsmResolver"); + +let lastModifiedPaths = new Map(); + +export async function initialize({ port }) { + // From `eleventy.importCacheReset` event in Require.js + port.on("message", ({ path, newDate }) => { + addToModifiedPaths(path, newDate); + }); +} + +export function addToModifiedPaths(path, date) { + lastModifiedPaths.set(path, date); +} + +// Fixes issue https://github.com/11ty/eleventy/issues/3270 +// Docs: https://nodejs.org/docs/latest/api/module.html#resolvespecifier-context-nextresolve +export function resolve(specifier, context, nextResolve) { + try { + // Not a relative import and not a file import + // Or from node_modules (perhaps better to check if the specifier is in the project directory instead) + if ( + (!specifier.startsWith("../") && + !specifier.startsWith("./") && + !specifier.startsWith("file:")) || + context.parentURL.includes("/node_modules/") + ) { + return nextResolve(specifier, context); + } + + let fileUrl = new URL(specifier, context.parentURL); + if (fileUrl.searchParams.has("_cache_bust")) { + // already is cache busted outside resolver (wider compat, url was changed prior to import, probably in Require.js) + return nextResolve(specifier, context); + } + + let absolutePath = PathNormalizer.normalizeSeperator(fileURLToPath(fileUrl)); + // Bust the import cache if this is a recently modified file + if (lastModifiedPaths.has(absolutePath)) { + fileUrl.search = ""; // delete existing searchparams + fileUrl.searchParams.set("_cache_bust", lastModifiedPaths.get(absolutePath)); + debug("Cache busting %o to %o", specifier, fileUrl.toString()); + + return nextResolve(fileUrl.toString(), context); + } + } catch (e) { + debug("EsmResolver Error parsing specifier (%o): %o", specifier, e); + } + + return nextResolve(specifier, context); +} + +// export async function load(url, context, nextLoad) { +// } diff --git a/node_modules/@11ty/eleventy/src/Util/EsmResolverPortAdapter.js b/node_modules/@11ty/eleventy/src/Util/EsmResolverPortAdapter.js new file mode 100644 index 00000000..f0f52ae0 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/EsmResolverPortAdapter.js @@ -0,0 +1,41 @@ +import module from "node:module"; +import { resolve, addToModifiedPaths } from "./EsmResolver.js"; + +// module.register (old, deprecated) +import { MessageChannel } from "node:worker_threads"; +const { port1, port2 } = new MessageChannel(); + +// ESM Cache Buster +// - register requires Node 18.19+ https://nodejs.org/docs/latest/api/module.html#moduleregisterspecifier-parenturl-options +// - registerHooks requires Node 22.15+ +// Fixes https://github.com/11ty/eleventy/issues/3270 + +// ENV variable for https://github.com/11ty/eleventy/issues/3371 +if (!process?.env?.ELEVENTY_SKIP_ESM_RESOLVER) { + if ("registerHooks" in module) { + module.registerHooks({ + // sync-only + resolve, + }); + } else if ("register" in module) { + module.register("./EsmResolver.js", import.meta.url, { + parentURL: import.meta.url, + data: { + port: port2, + }, + transferList: [port2], + }); + } +} + +export function addModifiedPath(path, date) { + if (process?.env?.ELEVENTY_SKIP_ESM_RESOLVER) { + return; + } + + if ("registerHooks" in module) { + addToModifiedPaths(path, date); + } else if ("register" in module) { + port1.postMessage({ path: path, newDate: date }); + } +} diff --git a/node_modules/@11ty/eleventy/src/Util/EventBusUtil.js b/node_modules/@11ty/eleventy/src/Util/EventBusUtil.js new file mode 100644 index 00000000..c749fe90 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/EventBusUtil.js @@ -0,0 +1,14 @@ +import eventBus from "../EventBus.js"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:EventBus"); + +class EventBusUtil { + static debugCurrentListenerCounts() { + for (let name of eventBus.eventNames()) { + debug("Listeners for %o: %o", name, eventBus.listenerCount(name)); + } + } +} + +export default EventBusUtil; diff --git a/node_modules/@11ty/eleventy/src/Util/ExistsCache.js b/node_modules/@11ty/eleventy/src/Util/ExistsCache.js new file mode 100644 index 00000000..433d7434 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ExistsCache.js @@ -0,0 +1,62 @@ +import fs from "node:fs"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +// Checks both files and directories +class ExistsCache { + #exists = new Map(); + #dirs = new Map(); + + constructor() { + this.lookupCount = 0; + } + + get size() { + return this.#exists.size; + } + + has(path) { + return this.#exists.has(path); + } + + set(path, isExist) { + this.#exists.set(TemplatePath.addLeadingDotSlash(path), Boolean(isExist)); + } + + // Not yet needed + // setDirectory(path, isExist) {} + + // Relative paths (to root directory) expected (but not enforced due to perf costs) + exists(path) { + if (!this.#exists.has(path)) { + let exists = fs.existsSync(path); + this.lookupCount++; + + // mark for next time + this.#exists.set(path, Boolean(exists)); + + return exists; + } + + return this.#exists.get(path); + } + + isDirectory(path) { + if (!this.exists(path)) { + return false; + } + + if (!this.#dirs.has(path)) { + let isDir = fs.statSync(path).isDirectory(); + this.lookupCount++; + + // mark for next time + this.#dirs.set(path, isDir); + + return isDir; + } + + return this.#dirs.get(path); + } +} + +export default ExistsCache; diff --git a/node_modules/@11ty/eleventy/src/Util/FilePathUtil.js b/node_modules/@11ty/eleventy/src/Util/FilePathUtil.js new file mode 100644 index 00000000..1675e8ec --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/FilePathUtil.js @@ -0,0 +1,19 @@ +class FilePathUtil { + static isMatchingExtension(filepath, fileExtension) { + if (!fileExtension) { + return false; + } + + if (!(fileExtension || "").startsWith(".")) { + fileExtension = "." + fileExtension; + } + + return filepath.endsWith(fileExtension); + } + + static getFileExtension(filepath) { + return (filepath || "").split(".").pop(); + } +} + +export { FilePathUtil }; diff --git a/node_modules/@11ty/eleventy/src/Util/FileSystemManager.js b/node_modules/@11ty/eleventy/src/Util/FileSystemManager.js new file mode 100644 index 00000000..12881d79 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/FileSystemManager.js @@ -0,0 +1,48 @@ +import path from "node:path"; +import fs from "node:fs"; +import { mkdir, writeFile } from "node:fs/promises"; + +class FileSystemManager { + constructor(templateConfig) { + if (!templateConfig || templateConfig.constructor.name !== "TemplateConfig") { + throw new Error( + "Internal error: Missing `templateConfig` or was not an instance of `TemplateConfig`.", + ); + } + this.templateConfig = templateConfig; + } + + exists(pathname) { + return this.templateConfig.existsCache.exists(pathname); + } + + async createDirectoryForFile(filePath) { + let dir = path.parse(filePath).dir; + if (!dir || this.exists(dir)) { + return; + } + + return mkdir(dir, { recursive: true }); + } + + createDirectoryForFileSync(filePath) { + let dir = path.parse(filePath).dir; + if (!dir || this.exists(dir)) { + return; + } + + fs.mkdirSync(dir, { recursive: true }); + } + + async writeFile(filePath, content) { + return writeFile(filePath, content); + } + + writeFileSync(filePath, content) { + // Note: This deliberately uses the synchronous version to avoid + // unbounded concurrency: https://github.com/11ty/eleventy/issues/3271 + fs.writeFileSync(filePath, content); + } +} + +export { FileSystemManager }; diff --git a/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js b/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js new file mode 100644 index 00000000..7d72a64f --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js @@ -0,0 +1,30 @@ +import EleventyBaseError from "../Errors/EleventyBaseError.js"; + +class JavaScriptInvalidDataFormatError extends EleventyBaseError {} + +export default async function (inst, inputPath, key = "data", options = {}) { + let { mixins, isObjectRequired } = Object.assign( + { + mixins: {}, + isObjectRequired: true, + }, + options, + ); + + if (inst && key in inst) { + // get extra data from `data` method, + // either as a function or getter or object literal + let result = await (typeof inst[key] === "function" + ? Object.keys(mixins).length > 0 + ? inst[key].call(mixins) + : inst[key]() + : inst[key]); + + if (isObjectRequired && typeof result !== "object") { + throw new JavaScriptInvalidDataFormatError( + `Invalid data format returned from ${inputPath}: typeof ${typeof result}`, + ); + } + return result; + } +} diff --git a/node_modules/@11ty/eleventy/src/Util/GlobMatcher.js b/node_modules/@11ty/eleventy/src/Util/GlobMatcher.js new file mode 100644 index 00000000..a4a6c550 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/GlobMatcher.js @@ -0,0 +1,22 @@ +import picomatch from "picomatch"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +function isGlobMatch(filepath, globs = [], options = undefined) { + if (!filepath || !Array.isArray(globs) || globs.length === 0) { + return false; + } + + let inputPath = TemplatePath.stripLeadingDotSlash(filepath); + let opts = Object.assign( + { + dot: true, + nocase: true, // insensitive + }, + options, + ); + + // globs: string or array of strings + return picomatch.isMatch(inputPath, globs, opts); +} + +export { isGlobMatch }; diff --git a/node_modules/@11ty/eleventy/src/Util/GlobRemap.js b/node_modules/@11ty/eleventy/src/Util/GlobRemap.js new file mode 100644 index 00000000..5e2bea37 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/GlobRemap.js @@ -0,0 +1,85 @@ +import path from "node:path"; +import ProjectDirectories from "./ProjectDirectories.js"; +import PathNormalizer from "./PathNormalizer.js"; + +// even on Windows (in cmd.exe) these paths are normalized to forward slashes +// tinyglobby expects forward slashes on Windows +const SEP = "/"; + +class GlobRemap { + constructor(paths = []) { + this.paths = paths; + this.cwd = GlobRemap.getCwd(paths); + } + + getCwd() { + return this.cwd; + } + + getRemapped(paths) { + return paths.map((entry) => GlobRemap.remapInput(entry, this.cwd)); + } + + getInput() { + return this.getRemapped(this.paths); + } + + getOutput(paths = []) { + return paths.map((entry) => GlobRemap.remapOutput(entry, this.cwd)); + } + + static getParentDirPrefix(filePath = "") { + let count = []; + for (let p of filePath.split(SEP)) { + if (p === "..") { + count.push(".."); + } else { + break; + } + } + + if (count.length > 0) { + // trailing slash + return count.join(SEP) + SEP; + } + return ""; + } + + static getLongestParentDirPrefix(filePaths) { + let longest = ""; + filePaths + .map((entry) => { + return this.getParentDirPrefix(entry); + }) + .filter((entry) => Boolean(entry)) + .forEach((prefix) => { + if (!longest || prefix.length > longest.length) { + longest = prefix; + } + }); + return longest; + } + + // alias + static getCwd(filePaths) { + return this.getLongestParentDirPrefix(filePaths); + } + + static remapInput(entry, cwd) { + if (cwd) { + if (!entry.startsWith("**" + SEP) && !entry.startsWith(`.git${SEP}**`)) { + return PathNormalizer.normalizeSeperator(ProjectDirectories.getRelativeTo(entry, cwd)); + } + } + return entry; + } + + static remapOutput(entry, cwd) { + if (cwd) { + return PathNormalizer.normalizeSeperator(path.join(cwd, entry)); + } + return entry; + } +} + +export default GlobRemap; diff --git a/node_modules/@11ty/eleventy/src/Util/HtmlRelativeCopy.js b/node_modules/@11ty/eleventy/src/Util/HtmlRelativeCopy.js new file mode 100644 index 00000000..30590147 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/HtmlRelativeCopy.js @@ -0,0 +1,149 @@ +import path from "node:path"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import isValidUrl from "./ValidUrl.js"; +import { isGlobMatch } from "./GlobMatcher.js"; + +class HtmlRelativeCopy { + #userConfig; + #matchingGlobs = new Set(); + #matchingGlobsArray; + #dirty = false; + #paths = new Set(); + #failOnError = true; + #copyOptions = { + dot: false, // differs from standard passthrough copy + }; + + isEnabled() { + return this.#matchingGlobs.size > 0; + } + + setFailOnError(failOnError) { + this.#failOnError = Boolean(failOnError); + } + + setCopyOptions(opts) { + if (opts) { + Object.assign(this.#copyOptions, opts); + } + } + + setUserConfig(userConfig) { + if (!userConfig || userConfig.constructor.name !== "UserConfig") { + throw new Error( + "Internal error: Missing `userConfig` or was not an instance of `UserConfig`.", + ); + } + this.#userConfig = userConfig; + } + + addPaths(paths = []) { + for (let path of paths) { + this.#paths.add(TemplatePath.getDir(path)); + } + } + + get matchingGlobs() { + if (this.#dirty || !this.#matchingGlobsArray) { + this.#matchingGlobsArray = Array.from(this.#matchingGlobs); + this.#dirty = false; + } + + return this.#matchingGlobsArray; + } + + addMatchingGlob(glob) { + if (glob) { + if (Array.isArray(glob)) { + for (let g of glob) { + this.#matchingGlobs.add(g); + } + } else { + this.#matchingGlobs.add(glob); + } + this.#dirty = true; + } + } + + isSkippableHref(rawRef) { + if ( + this.#matchingGlobs.size === 0 || + !rawRef || + path.isAbsolute(rawRef) || + isValidUrl(rawRef) + ) { + return true; + } + return false; + } + + isCopyableTarget(target) { + if (!isGlobMatch(target, this.matchingGlobs)) { + return false; + } + + return true; + } + + exists(filePath) { + return this.#userConfig.exists(filePath); + } + + getAliasedPath(ref) { + for (let dir of this.#paths) { + let found = TemplatePath.join(dir, ref); + if (this.isCopyableTarget(found) && this.exists(found)) { + return found; + } + } + } + + getFilePathRelativeToProjectRoot(ref, contextFilePath) { + let dir = TemplatePath.getDirFromFilePath(contextFilePath); + return TemplatePath.join(dir, ref); + } + + copy(fileRef, tmplInputPath, tmplOutputPath) { + // original ref is a full URL or no globs exist + if (this.isSkippableHref(fileRef)) { + return; + } + + // Relative to source file’s input path + let source = this.getFilePathRelativeToProjectRoot(fileRef, tmplInputPath); + if (!this.isCopyableTarget(source)) { + return; + } + + if (!this.exists(source)) { + // Try to alias using `options.paths` + let alias = this.getAliasedPath(fileRef); + if (!alias) { + if (this.#failOnError) { + throw new Error( + "Missing input file for `html-relative` Passthrough Copy file: " + + TemplatePath.absolutePath(source), + ); + } + + // don’t fail on error + return; + } + + source = alias; + } + + let target = this.getFilePathRelativeToProjectRoot(fileRef, tmplOutputPath); + + // We use a Set here to allow passthrough copy manager to properly error on conflicts upstream + // Only errors when different inputs write to the same output + // Also errors if attempts to write outside the output folder. + this.#userConfig.emit("eleventy#copy", { + source, + target, + options: this.#copyOptions, + }); + } +} + +export { HtmlRelativeCopy }; diff --git a/node_modules/@11ty/eleventy/src/Util/HtmlTransformer.js b/node_modules/@11ty/eleventy/src/Util/HtmlTransformer.js new file mode 100644 index 00000000..f28910fc --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/HtmlTransformer.js @@ -0,0 +1,172 @@ +import posthtml from "posthtml"; +import urls from "@11ty/posthtml-urls"; +import { FilePathUtil } from "./FilePathUtil.js"; + +import { arrayDelete } from "./ArrayUtil.js"; + +class HtmlTransformer { + // feature test for Eleventy Bundle Plugin + static SUPPORTS_PLUGINS_ENABLED_CALLBACK = true; + + static TYPES = ["callbacks", "plugins"]; + + constructor() { + // execution order is important (not order of addition/object key order) + this.callbacks = {}; + this.posthtmlProcessOptions = {}; + this.plugins = {}; + } + + get aggregateBench() { + if (!this.userConfig) { + throw new Error("Internal error: Missing `userConfig` in HtmlTransformer."); + } + return this.userConfig.benchmarkManager.get("Aggregate"); + } + + setUserConfig(config) { + this.userConfig = config; + } + + static prioritySort(a, b) { + if (b.priority > a.priority) { + return 1; + } + if (a.priority > b.priority) { + return -1; + } + return 0; + } + + // context is important as it is used in html base plugin for page specific URL + static _getPosthtmlInstance(callbacks = [], plugins = [], context = {}) { + let inst = posthtml(); + + // already sorted by priority when added + for (let { fn: plugin, options } of plugins) { + inst.use(plugin(Object.assign({}, context, options))); + } + + // Run the built-ins last + if (callbacks.length > 0) { + inst.use( + urls({ + eachURL: (url, attrName, tagName) => { + for (let { fn: callback } of callbacks) { + // already sorted by priority when added + url = callback.call(context, url, { attribute: attrName, tag: tagName }); + } + + return url; + }, + }), + ); + } + + return inst; + } + + _add(extensions, addType, value, options = {}) { + options = Object.assign( + { + priority: 0, + }, + options, + ); + + let extensionsArray = (extensions || "").split(","); + for (let ext of extensionsArray) { + let target = this[addType]; + if (!target[ext]) { + target[ext] = []; + } + + target[ext].push({ + // *could* fallback to function name, `value.name` + name: options.name, // for `remove` and debugging + fn: value, // callback or plugin + priority: options.priority, // sorted in descending order + enabled: options.enabled || (() => true), + options: options.pluginOptions, + }); + + target[ext].sort(HtmlTransformer.prioritySort); + } + } + + addPosthtmlPlugin(extensions, plugin, options = {}) { + this._add(extensions, "plugins", plugin, options); + } + + // match can be a plugin function or a filter callback(plugin => true); + remove(extensions, match) { + for (let removeType of HtmlTransformer.TYPES) { + for (let ext of (extensions || "").split(",")) { + this[removeType][ext] = arrayDelete(this[removeType][ext], match); + } + } + } + + addUrlTransform(extensions, callback, options = {}) { + this._add(extensions, "callbacks", callback, options); + } + + setPosthtmlProcessOptions(options) { + Object.assign(this.posthtmlProcessOptions, options); + } + + isTransformable(extension, context) { + return ( + this.getCallbacks(extension, context).length > 0 || this.getPlugins(extension).length > 0 + ); + } + + getCallbacks(extension, context) { + let callbacks = this.callbacks[extension] || []; + return callbacks.filter(({ enabled }) => { + if (!enabled || typeof enabled !== "function") { + return true; + } + return enabled(context); + }); + } + + getPlugins(extension) { + let plugins = this.plugins[extension] || []; + return plugins.filter(({ enabled }) => { + if (!enabled || typeof enabled !== "function") { + return true; + } + return enabled(); + }); + } + + static async transformStandalone(content, callback, posthtmlProcessOptions = {}) { + let posthtmlInstance = this._getPosthtmlInstance([ + { + fn: callback, + enabled: () => true, + }, + ]); + let result = await posthtmlInstance.process(content, posthtmlProcessOptions); + return result.html; + } + + async transformContent(outputPath, content, context) { + let extension = FilePathUtil.getFileExtension(outputPath); + if (!this.isTransformable(extension, context)) { + return content; + } + + let bench = this.aggregateBench.get(`Transforming \`${extension}\` with posthtml`); + bench.before(); + let callbacks = this.getCallbacks(extension, context); + let plugins = this.getPlugins(extension); + let posthtmlInstance = HtmlTransformer._getPosthtmlInstance(callbacks, plugins, context); + let result = await posthtmlInstance.process(content, this.posthtmlProcessOptions); + bench.after(); + return result.html; + } +} + +export { HtmlTransformer }; diff --git a/node_modules/@11ty/eleventy/src/Util/ImportJsonSync.js b/node_modules/@11ty/eleventy/src/Util/ImportJsonSync.js new file mode 100644 index 00000000..fa593659 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ImportJsonSync.js @@ -0,0 +1,77 @@ +import fs from "node:fs"; +import { createRequire } from "node:module"; +import debugUtil from "debug"; + +import { TemplatePath } from "@11ty/eleventy-utils"; + +import { normalizeFilePathInEleventyPackage } from "./Require.js"; + +const debug = debugUtil("Eleventy:ImportJsonSync"); +const require = createRequire(import.meta.url); + +function findFilePathInParentDirs(dir, filename) { + // `package.json` searches look in parent dirs: + // https://docs.npmjs.com/cli/v7/configuring-npm/folders#more-information + // Fixes issue #3178, limited to working dir paths only + let workingDir = TemplatePath.getWorkingDir(); + // TODO use DirContains + let allDirs = TemplatePath.getAllDirs(dir).filter((entry) => entry.startsWith(workingDir)); + + for (let dir of allDirs) { + let newPath = TemplatePath.join(dir, filename); + if (fs.existsSync(newPath)) { + debug("Found %o searching parent directories at: %o", filename, dir); + return newPath; + } + } +} + +function importJsonSync(filePath) { + if (!filePath || !filePath.endsWith(".json")) { + throw new Error(`importJsonSync expects a .json file extension (received: ${filePath})`); + } + + return require(filePath); +} + +function getEleventyPackageJson() { + let filePath = normalizeFilePathInEleventyPackage("package.json"); + return importJsonSync(filePath); +} + +function getModulePackageJson(dir) { + let filePath = findFilePathInParentDirs(TemplatePath.absolutePath(dir), "package.json"); + + // optional! + if (!filePath) { + return {}; + } + + return importJsonSync(filePath); +} + +// This will *not* find a package.json in a parent directory above root +function getWorkingProjectPackageJsonPath() { + let dir = TemplatePath.absolutePath(TemplatePath.getWorkingDir()); + return findFilePathInParentDirs(dir, "package.json"); +} + +function getWorkingProjectPackageJson() { + let filePath = getWorkingProjectPackageJsonPath(); + + // optional! + if (!filePath) { + return {}; + } + + return importJsonSync(filePath); +} + +export { + importJsonSync, + findFilePathInParentDirs, + getEleventyPackageJson, + getModulePackageJson, + getWorkingProjectPackageJson, + getWorkingProjectPackageJsonPath, +}; diff --git a/node_modules/@11ty/eleventy/src/Util/IsAsyncFunction.js b/node_modules/@11ty/eleventy/src/Util/IsAsyncFunction.js new file mode 100644 index 00000000..3c4dc654 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/IsAsyncFunction.js @@ -0,0 +1,5 @@ +const ComparisonAsyncFunction = (async () => {}).constructor; + +export default function isAsyncFunction(fn) { + return fn instanceof ComparisonAsyncFunction; +} diff --git a/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js b/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js new file mode 100644 index 00000000..7f6e8093 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/JavaScriptDependencies.js @@ -0,0 +1,55 @@ +import dependencyTree from "@11ty/dependency-tree"; +import { find } from "@11ty/dependency-tree-esm"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +import EleventyBaseError from "../Errors/EleventyBaseError.js"; + +class JavaScriptDependencies { + static getErrorMessage(file, type) { + return `A problem was encountered looking for JavaScript dependencies in ${type} file: ${file}. This only affects --watch and --serve behavior and does not affect your build.`; + } + + static async getDependencies(inputFiles, isProjectUsingEsm) { + let depSet = new Set(); + + // TODO does this need to work with aliasing? what other JS extensions will have deps? + let commonJsFiles = inputFiles.filter( + (file) => (!isProjectUsingEsm && file.endsWith(".js")) || file.endsWith(".cjs"), + ); + + for (let file of commonJsFiles) { + try { + let modules = dependencyTree(file, { + nodeModuleNames: "exclude", + allowNotFound: true, + }).map((dependency) => { + return TemplatePath.addLeadingDotSlash(TemplatePath.relativePath(dependency)); + }); + + for (let dep of modules) { + depSet.add(dep); + } + } catch (e) { + throw new EleventyBaseError(this.getErrorMessage(file, "CommonJS"), e); + } + } + + let esmFiles = inputFiles.filter( + (file) => (isProjectUsingEsm && file.endsWith(".js")) || file.endsWith(".mjs"), + ); + for (let file of esmFiles) { + try { + let modules = await find(file); + for (let dep of modules) { + depSet.add(dep); + } + } catch (e) { + throw new EleventyBaseError(this.getErrorMessage(file, "ESM"), e); + } + } + + return Array.from(depSet).sort(); + } +} + +export default JavaScriptDependencies; diff --git a/node_modules/@11ty/eleventy/src/Util/MemoizeFunction.js b/node_modules/@11ty/eleventy/src/Util/MemoizeFunction.js new file mode 100644 index 00000000..f66a155a --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/MemoizeFunction.js @@ -0,0 +1,26 @@ +export default function (callback, options = {}) { + let { bench, name } = options; + let cache = new Map(); + + return (...args) => { + // Only supports single-arg functions for now. + if (args.filter(Boolean).length > 1) { + bench?.get(`(count) ${name} Not valid for memoize`).incrementCount(); + return callback(...args); + } + + let [cacheKey] = args; + + if (!cache.has(cacheKey)) { + cache.set(cacheKey, callback(...args)); + + bench?.get(`(count) ${name} memoize miss`).incrementCount(); + + return cache.get(cacheKey); + } + + bench?.get(`(count) ${name} memoize hit`).incrementCount(); + + return cache.get(cacheKey); + }; +} diff --git a/node_modules/@11ty/eleventy/src/Util/Objects/DeepFreeze.js b/node_modules/@11ty/eleventy/src/Util/Objects/DeepFreeze.js new file mode 100644 index 00000000..88e2847a --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Objects/DeepFreeze.js @@ -0,0 +1,20 @@ +import { isPlainObject } from "@11ty/eleventy-utils"; + +// via https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze + +function DeepFreeze(obj, topLevelExceptions) { + for (let name of Reflect.ownKeys(obj)) { + if ((topLevelExceptions || []).find((key) => key === name)) { + continue; + } + + const value = obj[name]; + if (isPlainObject(value)) { + DeepFreeze(value); + } + } + + return Object.freeze(obj); +} + +export { DeepFreeze }; diff --git a/node_modules/@11ty/eleventy/src/Util/Objects/ObjectFilter.js b/node_modules/@11ty/eleventy/src/Util/Objects/ObjectFilter.js new file mode 100644 index 00000000..9ce8737d --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Objects/ObjectFilter.js @@ -0,0 +1,9 @@ +export default function objectFilter(obj, callback) { + let newObject = {}; + for (let [key, value] of Object.entries(obj || {})) { + if (callback(value, key)) { + newObject[key] = value; + } + } + return newObject; +} diff --git a/node_modules/@11ty/eleventy/src/Util/Objects/ProxyWrap.js b/node_modules/@11ty/eleventy/src/Util/Objects/ProxyWrap.js new file mode 100644 index 00000000..38730fd1 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Objects/ProxyWrap.js @@ -0,0 +1,118 @@ +import types from "node:util/types"; +import debugUtil from "debug"; +import { isPlainObject } from "@11ty/eleventy-utils"; + +const debug = debugUtil("Dev:Eleventy:Proxy"); + +function wrapObject(target, fallback) { + if (Object.isFrozen(target)) { + return target; + } + + return new Proxy(target, { + getOwnPropertyDescriptor(target, prop) { + let ret; + + if (Reflect.has(target, prop)) { + ret = Reflect.getOwnPropertyDescriptor(target, prop); + } else if (Reflect.has(fallback, prop)) { + ret = Reflect.getOwnPropertyDescriptor(fallback, prop); + } + + return ret; + }, + has(target, prop) { + if (Reflect.has(target, prop)) { + return true; + } + + return Reflect.has(fallback, prop); + }, + ownKeys(target) { + let s = new Set(); + // The fallback keys need to come first to preserve proper key order + // https://github.com/11ty/eleventy/issues/3849 + if (isPlainObject(fallback)) { + for (let k of Reflect.ownKeys(fallback)) { + s.add(k); + } + } + for (let k of Reflect.ownKeys(target)) { + if (!s.has(k)) { + s.add(k); + } + } + return Array.from(s); + }, + get(target, prop) { + debug("handler:get", prop); + + let value = Reflect.get(target, prop); + + if (Reflect.has(target, prop)) { + // Already proxied + if (types.isProxy(value)) { + return value; + } + + if (isPlainObject(value) && Reflect.has(fallback, prop)) { + if (Object.isFrozen(value)) { + return value; + } + + let ret = wrapObject(value, Reflect.get(fallback, prop)); + debug("handler:get (primary, object)", prop); + return ret; + } + + debug("handler:get (primary)", prop); + return value; + } + + // Does not exist in primary + if ( + (typeof fallback === "object" || typeof fallback === "function") && + Reflect.has(fallback, prop) + ) { + // fallback has prop + let fallbackValue = Reflect.get(fallback, prop); + + if (isPlainObject(fallbackValue)) { + if (Object.isFrozen(fallbackValue)) { + return fallbackValue; + } + + debug("handler:get (fallback, object)", prop); + // set empty object on primary + let emptyObject = {}; + Reflect.set(target, prop, emptyObject); + + return wrapObject(emptyObject, fallbackValue); + } + + debug("handler:get (fallback)", prop); + return fallbackValue; + } + + // primary *and* fallback do _not_ have prop + debug("handler:get (not on primary or fallback)", prop); + + return value; + }, + set(target, prop, value) { + debug("handler:set", prop); + + return Reflect.set(target, prop, value); + }, + }); +} + +function ProxyWrap(target, fallback) { + if (!isPlainObject(target) || !isPlainObject(fallback)) { + throw new Error("ProxyWrap expects objects for both the target and fallback"); + } + + return wrapObject(target, fallback); +} + +export { ProxyWrap }; diff --git a/node_modules/@11ty/eleventy/src/Util/Objects/SampleModule.mjs b/node_modules/@11ty/eleventy/src/Util/Objects/SampleModule.mjs new file mode 100644 index 00000000..ff8b4c56 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Objects/SampleModule.mjs @@ -0,0 +1 @@ +export default {}; diff --git a/node_modules/@11ty/eleventy/src/Util/Objects/Sortable.js b/node_modules/@11ty/eleventy/src/Util/Objects/Sortable.js new file mode 100644 index 00000000..a23d4c9a --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Objects/Sortable.js @@ -0,0 +1,136 @@ +class Sortable { + constructor() { + this.isSortAscending = true; + this.isSortNumeric = false; + this.items = []; + this._dirty = true; + + this.sortFunctionStringMap = { + "A-Z": "sortFunctionAscending", + "Z-A": "sortFunctionDescending", + "0-9": "sortFunctionNumericAscending", + "9-0": "sortFunctionNumericDescending", + }; + } + + get length() { + return this.items.length; + } + + add(item) { + this._dirty = true; + this.items.push(item); + } + + sort(sortFunction) { + if (!sortFunction) { + sortFunction = this.getSortFunction(); + } else if (typeof sortFunction === "string") { + let key = sortFunction; + let name; + if (key in this.sortFunctionStringMap) { + name = this.sortFunctionStringMap[key]; + } + if (Sortable[name]) { + sortFunction = Sortable[name]; + } else { + throw new Error( + `Invalid String argument for sort(). Received \`${key}\`. Valid values: ${Object.keys( + this.sortFunctionStringMap, + )}`, + ); + } + } + + return this.items.slice().sort(sortFunction); + } + + sortAscending() { + return this.sort(this.getSortFunctionAscending()); + } + + sortDescending() { + return this.sort(this.getSortFunctionDescending()); + } + + setSortDescending(isDescending = true) { + this.isSortAscending = !isDescending; + } + + setSortAscending(isAscending = true) { + this.isSortAscending = isAscending; + } + + setSortNumeric(isNumeric) { + this.isSortNumeric = isNumeric; + } + + /* Sort functions */ + static sortFunctionNumericAscending(a, b) { + return a - b; + } + + static sortFunctionNumericDescending(a, b) { + return b - a; + } + + static sortFunctionAscending(a, b) { + if (a > b) { + return 1; + } else if (a < b) { + return -1; + } + return 0; + } + + static sortFunctionDescending(a, b) { + return Sortable.sortFunctionAscending(b, a); + } + + static sortFunctionAlphabeticAscending(a, b) { + return Sortable.sortFunctionAscending(a, b); + } + + static sortFunctionAlphabeticDescending(a, b) { + return Sortable.sortFunctionAscending(b, a); + } + + static sortFunctionDate(mapA, mapB) { + return Sortable.sortFunctionNumericAscending(mapA.date.getTime(), mapB.date.getTime()); + } + + static sortFunctionDateInputPath(mapA, mapB) { + let sortDate = Sortable.sortFunctionNumericAscending(mapA.date.getTime(), mapB.date.getTime()); + if (sortDate === 0) { + return Sortable.sortFunctionAlphabeticAscending(mapA.inputPath, mapB.inputPath); + } + return sortDate; + } + /* End sort functions */ + + getSortFunction() { + if (this.isSortAscending) { + return this.getSortFunctionAscending(); + } else { + return this.getSortFunctionDescending(); + } + } + + getSortFunctionAscending() { + if (this.isSortNumeric) { + return Sortable.sortFunctionNumericAscending; + } else { + return Sortable.sortFunctionAlphabeticAscending; + } + } + + getSortFunctionDescending() { + if (this.isSortNumeric) { + return Sortable.sortFunctionNumericDescending; + } else { + return Sortable.sortFunctionAlphabeticDescending; + } + } +} + +export default Sortable; diff --git a/node_modules/@11ty/eleventy/src/Util/Objects/Unique.js b/node_modules/@11ty/eleventy/src/Util/Objects/Unique.js new file mode 100644 index 00000000..8570c0c4 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Objects/Unique.js @@ -0,0 +1,3 @@ +export default function Unique(arr) { + return Array.from(new Set(arr)); +} diff --git a/node_modules/@11ty/eleventy/src/Util/PassthroughCopyBehaviorCheck.js b/node_modules/@11ty/eleventy/src/Util/PassthroughCopyBehaviorCheck.js new file mode 100644 index 00000000..3dc1abb9 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/PassthroughCopyBehaviorCheck.js @@ -0,0 +1,16 @@ +function isUsingEleventyDevServer(config) { + return ( + !config.serverOptions.module || config.serverOptions.module === "@11ty/eleventy-dev-server" + ); +} + +// Config opt-out via serverPassthroughCopyBehavior +// False when other server is used +// False when runMode is "build" or "watch" +export default function (config, runMode) { + return ( + config.serverPassthroughCopyBehavior === "passthrough" && + isUsingEleventyDevServer(config) && + runMode === "serve" + ); +} diff --git a/node_modules/@11ty/eleventy/src/Util/PathNormalizer.js b/node_modules/@11ty/eleventy/src/Util/PathNormalizer.js new file mode 100644 index 00000000..cdc32532 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/PathNormalizer.js @@ -0,0 +1,58 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { TemplatePath } from "@11ty/eleventy-utils"; + +export default class PathNormalizer { + static getParts(inputPath) { + if (!inputPath) { + return []; + } + + let separator = "/"; + if (inputPath.includes(path.sep)) { + separator = path.sep; + } + + return inputPath.split(separator).filter((entry) => entry !== "."); + } + + // order is important here: the top-most directory returns first + // array of file and all parent directories + static getAllPaths(inputPath) { + let parts = this.getParts(inputPath); + let allPaths = []; + + let fullpath = ""; + for (let part of parts) { + fullpath += (fullpath.length > 0 ? "/" : "") + part; + allPaths.push(fullpath); + } + + return allPaths; + } + + static normalizeSeperator(inputPath) { + if (!inputPath) { + return inputPath; + } + return inputPath.split(path.sep).join("/"); + } + + static fullNormalization(inputPath) { + if (typeof inputPath !== "string") { + return inputPath; + } + + // Fix file:///Users/ or file:///C:/ paths passed in + if (inputPath.startsWith("file://")) { + inputPath = fileURLToPath(inputPath); + } + + // Paths should not be absolute (we convert absolute paths to relative) + // Paths should not have a leading dot slash + // Paths should always be `/` independent of OS path separator + return TemplatePath.stripLeadingDotSlash( + this.normalizeSeperator(TemplatePath.relativePath(inputPath)), + ); + } +} diff --git a/node_modules/@11ty/eleventy/src/Util/PathPrefixer.js b/node_modules/@11ty/eleventy/src/Util/PathPrefixer.js new file mode 100644 index 00000000..abd55825 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/PathPrefixer.js @@ -0,0 +1,21 @@ +import path from "node:path"; + +import PathNormalizer from "./PathNormalizer.js"; + +class PathPrefixer { + static normalizePathPrefix(pathPrefix) { + if (pathPrefix) { + // add leading / (for browsersync), see #1454 + // path.join uses \\ for Windows so we split and rejoin + return PathPrefixer.joinUrlParts("/", pathPrefix); + } + + return "/"; + } + + static joinUrlParts(...parts) { + return PathNormalizer.normalizeSeperator(path.join(...parts)); + } +} + +export default PathPrefixer; diff --git a/node_modules/@11ty/eleventy/src/Util/Pluralize.js b/node_modules/@11ty/eleventy/src/Util/Pluralize.js new file mode 100644 index 00000000..d35f1dd9 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Pluralize.js @@ -0,0 +1,3 @@ +export default function (count, singleWord, pluralWord) { + return count === 1 ? singleWord : pluralWord; +} diff --git a/node_modules/@11ty/eleventy/src/Util/ProjectDirectories.js b/node_modules/@11ty/eleventy/src/Util/ProjectDirectories.js new file mode 100644 index 00000000..e15e985a --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ProjectDirectories.js @@ -0,0 +1,369 @@ +import fs from "node:fs"; +import path from "node:path"; +import { TemplatePath } from "@11ty/eleventy-utils"; +import { isDynamicPattern } from "tinyglobby"; + +import DirContains from "./DirContains.js"; + +/* Directories internally should always use *nix forward slashes */ +class ProjectDirectories { + static defaults = { + input: "./", + data: "./_data/", // Relative to input directory + includes: "./_includes/", // Relative to input directory + layouts: "./_layouts/", // Relative to input directory + output: "./_site/", + }; + + // no updates allowed, input/output set via CLI + #frozen = false; + + #raw = {}; + + #dirs = {}; + + inputFile = undefined; + inputGlob = undefined; + + // Add leading dot slash + // Use forward slashes + static normalizePath(fileOrDir) { + return TemplatePath.standardizeFilePath(fileOrDir); + } + + // Must be a directory + // Always include a trailing slash + static normalizeDirectory(dir) { + return this.addTrailingSlash(this.normalizePath(dir)); + } + + normalizeDirectoryPathRelativeToInputDirectory(filePath) { + return ProjectDirectories.normalizeDirectory(path.join(this.input, filePath)); + } + + static addTrailingSlash(path) { + if (path.slice(-1) === "/") { + return path; + } + return path + "/"; + } + + // If input/output are set via CLI, they take precedence over all other configuration values. + freeze() { + this.#frozen = true; + } + + setViaConfigObject(configDirs = {}) { + // input must come last + let inputChanged = false; + if ( + configDirs.input && + ProjectDirectories.normalizeDirectory(configDirs.input) !== this.input + ) { + this.#setInputRaw(configDirs.input); + inputChanged = true; + } + + // If falsy or an empty string, the current directory is used. + if (configDirs.output !== undefined) { + if (ProjectDirectories.normalizeDirectory(configDirs.output) !== this.output) { + this.setOutput(configDirs.output); + } + } + + // Input relative directory, if falsy or an empty string, inputDir is used! + // Always set if input changed, e.g. input is `src` and data is `../_data` (resulting in `./_data`) we still want to set data to this new value + if (configDirs.data !== undefined) { + if ( + inputChanged || + this.normalizeDirectoryPathRelativeToInputDirectory(configDirs.data || "") !== this.data + ) { + this.setData(configDirs.data); + } + } + + // Input relative directory, if falsy or an empty string, inputDir is used! + if (configDirs.includes !== undefined) { + if ( + inputChanged || + this.normalizeDirectoryPathRelativeToInputDirectory(configDirs.includes || "") !== + this.includes + ) { + this.setIncludes(configDirs.includes); + } + } + + // Input relative directory, if falsy or an empty string, inputDir is used! + if (configDirs.layouts !== undefined) { + if ( + inputChanged || + this.normalizeDirectoryPathRelativeToInputDirectory(configDirs.layouts || "") !== + this.layouts + ) { + this.setLayouts(configDirs.layouts); + } + } + + if (inputChanged) { + this.updateInputDependencies(); + } + } + + updateInputDependencies() { + // raw first, fall back to Eleventy defaults if not yet set + this.setData(this.#raw.data ?? ProjectDirectories.defaults.data); + this.setIncludes(this.#raw.includes ?? ProjectDirectories.defaults.includes); + + // Should not include this if not explicitly opted-in + if (this.#raw.layouts !== undefined) { + this.setLayouts(this.#raw.layouts ?? ProjectDirectories.defaults.layouts); + } + } + + /* Relative to project root, must exist */ + #setInputRaw(dirOrFile, inputDir = undefined) { + // is frozen and was defined previously + if (this.#frozen && this.#raw.input !== undefined) { + return; + } + + this.#raw.input = dirOrFile; + + if (!dirOrFile) { + // input must exist if inputDir is not set. + return; + } + + // Normalize absolute paths to relative, #3805 + // if(path.isAbsolute(dirOrFile)) { + // dirOrFile = path.relative(".", dirOrFile); + // } + + // Input has to exist (assumed glob if it does not exist) + let inputExists = fs.existsSync(dirOrFile); + let inputExistsAndIsDirectory = inputExists && fs.statSync(dirOrFile).isDirectory(); + + if (inputExistsAndIsDirectory) { + // is not a file or glob + this.#dirs.input = ProjectDirectories.normalizeDirectory(dirOrFile); + } else { + if (inputExists) { + this.inputFile = ProjectDirectories.normalizePath(dirOrFile); + } else { + if (!isDynamicPattern(dirOrFile)) { + throw new Error( + `The "${dirOrFile}" \`input\` parameter (directory or file path) must exist on the file system (unless detected as a glob by the \`tinyglobby\` package)`, + ); + } + + this.inputGlob = dirOrFile; + } + + // Explicit Eleventy option for inputDir + if (inputDir) { + // Changed in 3.0: must exist + if (!fs.existsSync(inputDir)) { + throw new Error("Directory must exist (via inputDir option to Eleventy constructor)."); + } + + this.#dirs.input = ProjectDirectories.normalizeDirectory(inputDir); + } else { + // the input directory is implied to be the parent directory of the + // file, unless inputDir is explicitly specified (via Eleventy constructor `options`) + this.#dirs.input = ProjectDirectories.normalizeDirectory( + TemplatePath.getDirFromFilePath(dirOrFile), // works with globs + ); + } + } + } + + setInput(dirOrFile, inputDir = undefined) { + this.#setInputRaw(dirOrFile, inputDir); // does not update + this.updateInputDependencies(); + } + + /* Relative to input dir */ + setIncludes(dir) { + if (dir !== undefined) { + // falsy or an empty string is valid (falls back to input dir) + this.#raw.includes = dir; + this.#dirs.includes = ProjectDirectories.normalizeDirectory( + TemplatePath.join(this.input, dir || ""), + ); + } + } + + /* Relative to input dir */ + /* Optional */ + setLayouts(dir) { + if (dir !== undefined) { + // falsy or an empty string is valid (falls back to input dir) + this.#raw.layouts = dir; + this.#dirs.layouts = ProjectDirectories.normalizeDirectory( + TemplatePath.join(this.input, dir || ""), + ); + } + } + + /* Relative to input dir */ + setData(dir) { + if (dir !== undefined) { + // falsy or an empty string is valid (falls back to input dir) + // TODO must exist if specified + this.#raw.data = dir; + this.#dirs.data = ProjectDirectories.normalizeDirectory( + TemplatePath.join(this.input, dir || ""), + ); + } + } + + /* Relative to project root */ + setOutput(dir) { + // is frozen and was defined previously + if (this.#frozen && this.#raw.output !== undefined) { + return; + } + + if (dir !== undefined) { + this.#raw.output = dir; + this.#dirs.output = ProjectDirectories.normalizeDirectory(dir || ""); + } + } + + get input() { + return this.#dirs.input || ProjectDirectories.defaults.input; + } + + get data() { + return this.#dirs.data || ProjectDirectories.defaults.data; + } + + get includes() { + return this.#dirs.includes || ProjectDirectories.defaults.includes; + } + + get layouts() { + // explicit opt-in, no fallback. + return this.#dirs.layouts; + } + + get output() { + return this.#dirs.output || ProjectDirectories.defaults.output; + } + + isTemplateFile(filePath) { + let inputPath = this.getInputPath(filePath); + // TODO use DirContains + if (this.layouts && inputPath.startsWith(this.layouts)) { + return false; + } + + // if this.includes is "" (and thus is the same directory as this.input) + // we don’t actually know if this is a template file, so defer + if (this.includes && this.includes !== this.input) { + if (inputPath.startsWith(this.includes)) { + return false; + } + } + + // TODO use DirContains + return inputPath.startsWith(this.input); + } + + // for a hypothetical template file + getInputPath(filePathRelativeToInputDir) { + // TODO change ~/ to project root dir + return TemplatePath.addLeadingDotSlash( + TemplatePath.join(this.input, TemplatePath.standardizeFilePath(filePathRelativeToInputDir)), + ); + } + + // Inverse of getInputPath + // Removes input dir from path + getInputPathRelativeToInputDirectory(filePathRelativeToInputDir) { + let inputDir = TemplatePath.addLeadingDotSlash(TemplatePath.join(this.input)); + + // No leading dot slash + return TemplatePath.stripLeadingSubPath(filePathRelativeToInputDir, inputDir); + } + + // for a hypothetical Eleventy layout file + getLayoutPath(filePathRelativeToLayoutDir) { + return TemplatePath.addLeadingDotSlash( + TemplatePath.join( + this.layouts || this.includes, + TemplatePath.standardizeFilePath(filePathRelativeToLayoutDir), + ), + ); + } + + // Removes layout dir from path + getLayoutPathRelativeToInputDirectory(filePathRelativeToLayoutDir) { + let layoutPath = this.getLayoutPath(filePathRelativeToLayoutDir); + let inputDir = TemplatePath.addLeadingDotSlash(TemplatePath.join(this.input)); + + // No leading dot slash + return TemplatePath.stripLeadingSubPath(layoutPath, inputDir); + } + + getProjectPath(filePath) { + return TemplatePath.addLeadingDotSlash( + TemplatePath.join(".", TemplatePath.standardizeFilePath(filePath)), + ); + } + + isFileInProjectFolder(filePath) { + return DirContains(TemplatePath.getWorkingDir(), filePath); + } + + isFileInOutputFolder(filePath) { + return DirContains(this.output, filePath); + } + + static getRelativeTo(targetPath, cwd) { + return path.relative(cwd, path.join(path.resolve("."), targetPath)); + } + + // Access the data without being able to set the data. + getUserspaceInstance() { + let d = this; + + return { + get input() { + return d.input; + }, + get inputFile() { + return d.inputFile; + }, + get inputGlob() { + return d.inputGlob; + }, + get data() { + return d.data; + }, + get includes() { + return d.includes; + }, + get layouts() { + return d.layouts; + }, + get output() { + return d.output; + }, + }; + } + + toString() { + return { + input: this.input, + inputFile: this.inputFile, + inputGlob: this.inputGlob, + data: this.data, + includes: this.includes, + layouts: this.layouts, + output: this.output, + }; + } +} + +export default ProjectDirectories; diff --git a/node_modules/@11ty/eleventy/src/Util/ProjectTemplateFormats.js b/node_modules/@11ty/eleventy/src/Util/ProjectTemplateFormats.js new file mode 100644 index 00000000..f37040ef --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ProjectTemplateFormats.js @@ -0,0 +1,134 @@ +import debugUtil from "debug"; +const debug = debugUtil("Eleventy:Util:ProjectTemplateFormats"); + +class ProjectTemplateFormats { + #useAll = {}; + #raw = {}; + + #values = {}; // Set objects + + static union(...sets) { + let s = new Set(); + + for (let set of sets) { + if (!set || typeof set[Symbol.iterator] !== "function") { + continue; + } + for (let v of set) { + s.add(v); + } + } + + return s; + } + + #normalize(formats) { + if (Array.isArray(formats)) { + formats = "" + formats.join(","); + } + + if (typeof formats !== "string") { + throw new Error( + `Invalid formats (expect String, Array) passed to ProjectTemplateFormats->normalize: ${formats}`, + ); + } + + let final = new Set(); + for (let format of formats.split(",")) { + format = format.trim(); + if (format && format !== "*") { + final.add(format); + } + } + + return final; + } + + isWildcard() { + return this.#useAll.cli || this.#useAll.config || false; + } + + /** @returns {boolean} */ + #isUseAll(rawFormats) { + if (rawFormats === "") { + return false; + } + + if (typeof rawFormats === "string") { + rawFormats = rawFormats.split(","); + } + + if (Array.isArray(rawFormats)) { + return rawFormats.find((entry) => entry === "*") !== undefined; + } + + return false; + } + + // 3.x Breaking: "" now means no formats. In 2.x and prior it meant "*" + setViaCommandLine(formats) { + if (formats === undefined) { + return; + } + + this.#useAll.cli = this.#isUseAll(formats); + this.#raw.cli = formats; + this.#values.cli = this.#normalize(formats); + } + + // 3.x Breaking: "" now means no formats—in 2.x and prior it meant "*" + // 3.x Adds support for comma separated string—in 2.x this required an Array + setViaConfig(formats) { + if (formats === undefined) { + return; + } + + // "*" is supported + this.#useAll.config = this.#isUseAll(formats); + this.#raw.config = formats; + this.#values.config = this.#normalize(formats); + } + + addViaConfig(formats) { + if (!formats) { + return; + } + + if (this.#isUseAll(formats)) { + throw new Error( + `\`addTemplateFormats("*")\` is not supported for project template syntaxes.`, + ); + } + + // "*" not supported here + this.#raw.configAdd = formats; + this.#values.configAdd = this.#normalize(formats); + } + + getAllTemplateFormats() { + return Array.from(ProjectTemplateFormats.union(this.#values.config, this.#values.configAdd)); + } + + getTemplateFormats() { + if (this.#useAll.cli) { + let v = this.getAllTemplateFormats(); + debug("Using CLI --formats='*': %o", v); + return v; + } + + if (this.#raw.cli !== undefined) { + let v = Array.from(this.#values.cli); + debug("Using CLI --formats: %o", v); + return v; + } + + let v = this.getAllTemplateFormats(); + debug( + "Using configuration `templateFormats`, `setTemplateFormats()`, `addTemplateFormats()`: %o", + v, + ); + return v; + } +} + +export default ProjectTemplateFormats; diff --git a/node_modules/@11ty/eleventy/src/Util/PromiseUtil.js b/node_modules/@11ty/eleventy/src/Util/PromiseUtil.js new file mode 100644 index 00000000..fa88da0f --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/PromiseUtil.js @@ -0,0 +1,15 @@ +function withResolvers() { + if ("withResolvers" in Promise) { + return Promise.withResolvers(); + } + + let resolve; + let reject; + let promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} + +export { withResolvers }; diff --git a/node_modules/@11ty/eleventy/src/Util/Require.js b/node_modules/@11ty/eleventy/src/Util/Require.js new file mode 100644 index 00000000..1cfff5ef --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/Require.js @@ -0,0 +1,239 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import module from "node:module"; + +import { addModifiedPath } from "./EsmResolverPortAdapter.js"; + +import { TemplatePath } from "@11ty/eleventy-utils"; + +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import eventBus from "../EventBus.js"; + +class EleventyImportError extends EleventyBaseError {} + +// important to clear the require.cache in CJS projects +const require = module.createRequire(import.meta.url); + +const requestPromiseCache = new Map(); + +function getImportErrorMessage(filePath, type) { + return `There was a problem importing '${path.relative(".", filePath)}' via ${type}`; +} + +// Used for JSON imports, suffering from Node warning that import assertions experimental but also +// throwing an error if you try to import() a JSON file without an import assertion. +/** + * + * @returns {string|undefined} + */ +function loadContents(path, options = {}) { + let rawInput; + /** @type {string} */ + let encoding = "utf8"; // JSON is utf8 + if (options?.encoding || options?.encoding === null) { + encoding = options.encoding; + } + + try { + // @ts-expect-error This is an error in the upstream types + rawInput = fs.readFileSync(path, encoding); + } catch (error) { + // @ts-expect-error Temporary + if (error?.code === "ENOENT") { + // if file does not exist, return nothing + return; + } + + throw error; + } + + // Can return a buffer, string, etc + if (typeof rawInput === "string") { + rawInput = rawInput.trim(); + } + + return rawInput; +} + +let lastModifiedPaths = new Map(); +eventBus.on("eleventy.importCacheReset", (fileQueue) => { + for (let filePath of fileQueue) { + let absolutePath = TemplatePath.absolutePath(filePath); + let newDate = Date.now(); + lastModifiedPaths.set(absolutePath, newDate); + addModifiedPath(absolutePath, newDate); + + // ESM Eleventy when using `import()` on a CJS project file still adds to require.cache + if (absolutePath in (require?.cache || {})) { + delete require.cache[absolutePath]; + } + } +}); + +// raw means we don’t normalize away the `default` export +async function dynamicImportAbsolutePath(absolutePath, options = {}) { + let { type, returnRaw, cacheBust } = Object.assign( + { + type: undefined, + returnRaw: false, + cacheBust: false, // force cache bust + }, + options, + ); + + // Short circuit for JSON files (that are optional and can be empty) + if (absolutePath.endsWith(".json") || type === "json") { + try { + // https://v8.dev/features/import-assertions#dynamic-import() is still experimental in Node 20 + let rawInput = loadContents(absolutePath); + if (!rawInput) { + // should not error when file exists but is _empty_ + return; + } + return JSON.parse(rawInput); + } catch (e) { + return Promise.reject( + new EleventyImportError(getImportErrorMessage(absolutePath, "fs.readFile(json)"), e), + ); + } + } + + // Removed a `require` short circuit from this piece originally added + // in https://github.com/11ty/eleventy/pull/3493 Was a bit faster but + // error messaging was worse for require(esm) + + let urlPath; + try { + let u = new URL(`file:${absolutePath}`); + + // Bust the import cache if this is the last modified file (or cache busting is forced) + if (cacheBust) { + lastModifiedPaths.set(absolutePath, Date.now()); + } + + if (cacheBust || lastModifiedPaths.has(absolutePath)) { + u.searchParams.set("_cache_bust", lastModifiedPaths.get(absolutePath)); + } + + urlPath = u.toString(); + } catch (e) { + urlPath = absolutePath; + } + + let promise; + if (requestPromiseCache.has(urlPath)) { + promise = requestPromiseCache.get(urlPath); + } else { + promise = import(urlPath); + requestPromiseCache.set(urlPath, promise); + } + + return promise.then( + (target) => { + if (returnRaw) { + return target; + } + + // If the only export is `default`, elevate to top (for ESM and CJS) + if (Object.keys(target).length === 1 && "default" in target) { + return target.default; + } + + // When using import() on a CommonJS file that exports an object sometimes it + // returns duplicated values in `default` key, e.g. `{ default: {key: value}, key: value }` + + // A few examples: + // module.exports = { key: false }; + // returns `{ default: {key: false}, key: false }` as not expected. + // module.exports = { key: true }; + // module.exports = { key: null }; + // module.exports = { key: undefined }; + // module.exports = { key: class {} }; + + // A few examples where it does not duplicate: + // module.exports = { key: 1 }; + // returns `{ default: {key: 1} }` as expected. + // module.exports = { key: "value" }; + // module.exports = { key: {} }; + // module.exports = { key: [] }; + + if (type === "cjs" && "default" in target) { + let match = true; + for (let key in target) { + if (key === "default") { + continue; + } + if (key === "module.exports") { + continue; + } + if (target[key] !== target.default[key]) { + match = false; + } + } + + if (match) { + return target.default; + } + } + + // Otherwise return { default: value, named: value } + // Object.assign here so we can add things to it in JavaScript.js + return Object.assign({}, target); + }, + (error) => { + return Promise.reject( + new EleventyImportError(getImportErrorMessage(absolutePath, `import(${type})`), error), + ); + }, + ); +} + +function normalizeFilePathInEleventyPackage(file) { + // Back up relative paths from ./src/Util/Require.js + return path.resolve(fileURLToPath(import.meta.url), "../../../", file); +} + +async function dynamicImportFromEleventyPackage(file) { + // points to files relative to the top level Eleventy directory + let filePath = normalizeFilePathInEleventyPackage(file); + + // Returns promise + return dynamicImportAbsolutePath(filePath, { type: "esm" }); +} + +async function dynamicImport(localPath, type, options = {}) { + let absolutePath = TemplatePath.absolutePath(localPath); + options.type = type; + + // Returns promise + return dynamicImportAbsolutePath(absolutePath, options); +} + +/* Used to import default Eleventy configuration file, raw means we don’t normalize away the `default` export */ +async function dynamicImportRawFromEleventyPackage(file) { + // points to files relative to the top level Eleventy directory + let filePath = normalizeFilePathInEleventyPackage(file); + + // Returns promise + return dynamicImportAbsolutePath(filePath, { type: "esm", returnRaw: true }); +} + +/* Used to import app configuration files, raw means we don’t normalize away the `default` export */ +async function dynamicImportRaw(localPath, type) { + let absolutePath = TemplatePath.absolutePath(localPath); + + // Returns promise + return dynamicImportAbsolutePath(absolutePath, { type, returnRaw: true }); +} + +export { + loadContents as EleventyLoadContent, + dynamicImport as EleventyImport, + dynamicImportRaw as EleventyImportRaw, + normalizeFilePathInEleventyPackage, + + // no longer used in core + dynamicImportFromEleventyPackage as EleventyImportFromEleventy, + dynamicImportRawFromEleventyPackage as EleventyImportRawFromEleventy, +}; diff --git a/node_modules/@11ty/eleventy/src/Util/ReservedData.js b/node_modules/@11ty/eleventy/src/Util/ReservedData.js new file mode 100644 index 00000000..d726c738 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ReservedData.js @@ -0,0 +1,69 @@ +class EleventyReservedDataError extends TypeError {} + +class ReservedData { + static properties = [ + // "pkg", // Object.freeze’d upstream + // "eleventy", // Object.freeze’d upstream + // "page" is only frozen for specific subproperties below + "content", + "collections", + ]; + + static pageProperties = [ + "date", + "inputPath", + "fileSlug", + "filePathStem", + "outputFileExtension", + "templateSyntax", + "url", + "outputPath", + // not yet `excerpt` or `lang` set via front matter and computed data + ]; + + // Check in the data cascade for reserved data properties. + static getReservedKeys(data) { + if (!data) { + return []; + } + + let keys = this.properties.filter((key) => { + return key in data; + }); + + if ("page" in data) { + if (typeof data.page === "object") { + for (let key of this.pageProperties) { + if (key in data.page) { + keys.push(`page.${key}`); + } + } + } else { + // fail `page` when set to non-object values. + keys.push("page"); + } + } + return keys; + } + + static check(data) { + let reserved = ReservedData.getReservedKeys(data); + if (reserved.length === 0) { + return; + } + + let error = new EleventyReservedDataError( + `Cannot override reserved Eleventy properties: ${reserved.join(", ")}`, + ); + + error.reservedNames = reserved; + + throw error; + } + + static isReservedDataError(e) { + return e instanceof EleventyReservedDataError; + } +} + +export default ReservedData; diff --git a/node_modules/@11ty/eleventy/src/Util/SetUnion.js b/node_modules/@11ty/eleventy/src/Util/SetUnion.js new file mode 100644 index 00000000..50e6b9c6 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/SetUnion.js @@ -0,0 +1,11 @@ +function setUnion(...sets) { + let root = new Set(); + for (let set of sets) { + for (let entry of set) { + root.add(entry); + } + } + return root; +} + +export { setUnion }; diff --git a/node_modules/@11ty/eleventy/src/Util/SpawnAsync.js b/node_modules/@11ty/eleventy/src/Util/SpawnAsync.js new file mode 100644 index 00000000..5e6a20f9 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/SpawnAsync.js @@ -0,0 +1,29 @@ +import { spawn } from "node:child_process"; +import { withResolvers } from "./PromiseUtil.js"; + +export function spawnAsync(command, args, options) { + let { promise, resolve, reject } = withResolvers(); + + const cmd = spawn(command, args, options); + let res = []; + cmd.stdout.on("data", (data) => { + res.push(data.toString("utf8")); + }); + + let err = []; + cmd.stderr.on("data", (data) => { + err.push(data.toString("utf8")); + }); + + cmd.on("close", (code) => { + if (err.length > 0) { + reject(err.join("\n")); + } else if (code === 1) { + reject("Internal error: process closed with error exit code."); + } else { + resolve(res.join("\n")); + } + }); + + return promise; +} diff --git a/node_modules/@11ty/eleventy/src/Util/TemplateDepGraph.js b/node_modules/@11ty/eleventy/src/Util/TemplateDepGraph.js new file mode 100644 index 00000000..795453db --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/TemplateDepGraph.js @@ -0,0 +1,160 @@ +import { DepGraph as DependencyGraph } from "dependency-graph"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:TemplateDepGraph"); + +const COLLECTION_PREFIX = "__collection:"; + +export class TemplateDepGraph extends DependencyGraph { + static STAGES = ["[basic]", "[userconfig]", "[keys]", "all"]; + + #configCollectionNames = new Set(); + + constructor() { + // BREAKING TODO move this back to non-circular with errors + super({ circular: true }); + + let previous; + // establish stage relationships, all uses keys, keys uses userconfig, userconfig uses tags + for (let stageName of TemplateDepGraph.STAGES.filter(Boolean).reverse()) { + let stageKey = `${COLLECTION_PREFIX}${stageName}`; + if (previous) { + this.uses(previous, stageKey); + } + previous = stageKey; + } + } + + uses(from, to) { + this.addDependency(from, to); + } + + addTag(tagName, type) { + if ( + tagName === "all" || + (tagName.startsWith("[") && tagName.endsWith("]")) || + this.#configCollectionNames.has(tagName) + ) { + return; + } + if (!type) { + throw new Error( + `Missing tag type for addTag. Expecting one of ${TemplateDepGraph.STAGES.map((entry) => entry.slice(1, -1)).join(" or ")}. Received: ${type}`, + ); + } + + debug("collection type %o uses tag %o", tagName, type); + + this.uses(`${COLLECTION_PREFIX}[${type}]`, `${COLLECTION_PREFIX}${tagName}`); + } + + addConfigCollectionName(collectionName) { + if (collectionName === "all") { + return; + } + + this.#configCollectionNames.add(collectionName); + // Collection relationships to `[userconfig]` are added last, in unfilteredOrder() + } + + cleanupCollectionNames(collectionNames = []) { + let s = new Set(collectionNames); + if (s.has("[userconfig]")) { + return collectionNames; + } + + let hasAnyConfigCollections = collectionNames.find((name) => { + if (this.#configCollectionNames.has(name)) { + return true; + } + return false; + }); + + if (hasAnyConfigCollections) { + s.add("[userconfig]"); + } + + return Array.from(s); + } + + addTemplate(filePath, consumes = [], publishesTo = []) { + // Move to the beginning if it doesn’t consume anything + if (consumes.length === 0) { + this.uses(`${COLLECTION_PREFIX}[basic]`, filePath); + } + + consumes = this.cleanupCollectionNames(consumes); + publishesTo = this.cleanupCollectionNames(publishesTo); + // Can’t consume AND publish to `all` simultaneously + let consumesAll = consumes.includes("all"); + if (consumesAll) { + publishesTo = publishesTo.filter((entry) => entry !== "all"); + } + + debug("%o consumes %o and publishes to %o", filePath, consumes, publishesTo); + + for (let collectionName of publishesTo) { + if (!consumesAll) { + let tagType = "basic"; + + let consumesUserConfigCollection = consumes.includes("[userconfig]"); + if (consumesUserConfigCollection) { + // must finish before [keys] + tagType = "keys"; + } + + this.addTag(collectionName, tagType); + } + + this.uses(`${COLLECTION_PREFIX}${collectionName}`, filePath); + } + + for (let collectionName of consumes) { + this.uses(filePath, `${COLLECTION_PREFIX}${collectionName}`); + + let stageIndex = TemplateDepGraph.STAGES.indexOf(collectionName); + let nextStage = stageIndex > 0 ? TemplateDepGraph.STAGES[stageIndex + 1] : undefined; + if (nextStage) { + this.uses(`${COLLECTION_PREFIX}${nextStage}`, filePath); + } + } + } + + addDependency(from, to) { + if (!this.hasNode(from)) { + this.addNode(from); + } + if (!this.hasNode(to)) { + this.addNode(to); + } + super.addDependency(from, to); + } + + unfilteredOrder() { + // these need to be added last, after the template map has been added (see addConfigCollectionName) + for (let collectionName of this.#configCollectionNames) { + this.uses(`${COLLECTION_PREFIX}[keys]`, `${COLLECTION_PREFIX}${collectionName}`); + } + + return super.overallOrder(); + } + + overallOrder() { + let unfiltered = this.unfilteredOrder(); + + let filtered = unfiltered.filter((entry) => { + if (entry === `${COLLECTION_PREFIX}[keys]`) { + return true; + } + return !entry.startsWith(`${COLLECTION_PREFIX}[`) && !entry.endsWith("]"); + }); + + let allKey = `${COLLECTION_PREFIX}all`; + // Add another collections.all entry to the end (if not already the last one) + if (filtered[filtered.length - 1] !== allKey) { + filtered.push(allKey); + } + + return filtered; + } +} diff --git a/node_modules/@11ty/eleventy/src/Util/TransformsUtil.js b/node_modules/@11ty/eleventy/src/Util/TransformsUtil.js new file mode 100644 index 00000000..3ba8ab05 --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/TransformsUtil.js @@ -0,0 +1,70 @@ +import EleventyBaseError from "../Errors/EleventyBaseError.js"; +import { isPlainObject } from "@11ty/eleventy-utils"; +import debugUtil from "debug"; + +const debug = debugUtil("Eleventy:Transforms"); + +class EleventyTransformError extends EleventyBaseError {} + +class TransformsUtil { + static changeTransformsToArray(transformsObj) { + let transforms = []; + for (let name in transformsObj) { + transforms.push({ + name: name, + callback: transformsObj[name], + }); + } + return transforms; + } + + static async runAll(content, pageData, transforms = {}, options = {}) { + let { baseHrefOverride, logger } = options; + let { inputPath, outputPath, url } = pageData; + + if (!isPlainObject(transforms)) { + throw new Error("Object of transforms expected."); + } + + let transformsArray = this.changeTransformsToArray(transforms); + + for (let { callback, name } of transformsArray) { + debug("Running %o transform on %o: %o", name, inputPath, outputPath); + + try { + let hadContentBefore = !!content; + + content = await callback.call( + { + inputPath, + outputPath, + url, + page: pageData, + baseHref: baseHrefOverride, + }, + content, + outputPath, + ); + + if (hadContentBefore && !content) { + if (!logger || !logger.warn) { + throw new Error("Internal error: missing `logger` instance."); + } + + logger.warn( + `Warning: Transform \`${name}\` returned empty when writing ${outputPath} from ${inputPath}.`, + ); + } + } catch (e) { + throw new EleventyTransformError( + `Transform \`${name}\` encountered an error when transforming ${inputPath}.`, + e, + ); + } + } + + return content; + } +} + +export default TransformsUtil; diff --git a/node_modules/@11ty/eleventy/src/Util/ValidUrl.js b/node_modules/@11ty/eleventy/src/Util/ValidUrl.js new file mode 100644 index 00000000..9d0f59ba --- /dev/null +++ b/node_modules/@11ty/eleventy/src/Util/ValidUrl.js @@ -0,0 +1,9 @@ +export default function isValidUrl(url) { + try { + new URL(url); + return true; + } catch (e) { + // invalid url OR local path + return false; + } +} diff --git a/node_modules/@11ty/eleventy/src/defaultConfig.js b/node_modules/@11ty/eleventy/src/defaultConfig.js new file mode 100644 index 00000000..fb1ab5dd --- /dev/null +++ b/node_modules/@11ty/eleventy/src/defaultConfig.js @@ -0,0 +1,178 @@ +import bundlePlugin from "@11ty/eleventy-plugin-bundle"; + +import urlFilter from "./Filters/Url.js"; +import slugFilter from "./Filters/Slug.js"; +import slugifyFilter from "./Filters/Slugify.js"; +import getLocaleCollectionItem from "./Filters/GetLocaleCollectionItem.js"; +import getCollectionItemIndex from "./Filters/GetCollectionItemIndex.js"; +import { FilterPlugin as InputPathToUrlFilterPlugin } from "./Plugins/InputPathToUrl.js"; +import { HtmlTransformer } from "./Util/HtmlTransformer.js"; +import TransformsUtil from "./Util/TransformsUtil.js"; +import MemoizeUtil from "./Util/MemoizeFunction.js"; +import { HtmlRelativeCopyPlugin } from "./Plugins/HtmlRelativeCopyPlugin.js"; + +/** + * @module 11ty/eleventy/defaultConfig + */ + +/** + * @callback addFilter - Register a global filter. + * @param {string} name - Register a template filter by this name. + * @param {function} callback - The filter logic. + */ + +/** + * @typedef {object} config + * @property {addFilter} addFilter - Register a new global filter. + */ + +/** + * @typedef {object} defaultConfig + * @property {Array} templateFormats - An array of accepted template formats. + * @property {string} [pathPrefix='/'] - The directory under which all output files should be written to. + * @property {string} [markdownTemplateEngine='liquid'] - Template engine to process markdown files with. + * @property {string} [htmlTemplateEngine='liquid'] - Template engine to process html files with. + * @property {boolean} [dataTemplateEngine=false] - Changed in v1.0 + * @property {string} [jsDataFileSuffix='.11tydata'] - File suffix for jsData files. + * @property {object} keys + * @property {string} [keys.package='pkg'] - Global data property for package.json data + * @property {string} [keys.layout='layout'] + * @property {string} [keys.permalink='permalink'] + * @property {string} [keys.permalinkRoot='permalinkBypassOutputDir'] + * @property {string} [keys.engineOverride='templateEngineOverride'] + * @property {string} [keys.computed='eleventyComputed'] + * @property {object} dir + * @property {string} [dir.input='.'] + * @property {string} [dir.includes='_includes'] + * @property {string} [dir.data='_data'] + * @property {string} [dir.output='_site'] + * @deprecated handlebarsHelpers + * @deprecated nunjucksFilters + */ + +/** + * Default configuration object factory. + * + * @param {config} config - Eleventy configuration object. + * @returns {defaultConfig} + */ +export default function (config) { + let templateConfig = this; + + // Used for the HTML , InputPathToUrl, Image transform plugins + let ut = new HtmlTransformer(); + ut.setUserConfig(config); + + // This needs to be assigned before bundlePlugin is added below. + config.htmlTransformer = ut; + + config.exists = (filePath) => { + return this.existsCache.exists(filePath); + }; + + // Remember: the transform added here runs before the `htmlTransformer` transform + config.addPlugin(bundlePlugin, { + bundles: false, // no default bundles included—must be opt-in. + immediate: true, + }); + + // Filter: Maps an input path to output URL + config.addPlugin(InputPathToUrlFilterPlugin, { + immediate: true, + }); + + let memoizeBench = config.benchmarkManager.get("Configuration"); + config.addFilter("slug", MemoizeUtil(slugFilter, { name: "slug", bench: memoizeBench })); + config.addFilter("slugify", MemoizeUtil(slugifyFilter, { name: "slugify", bench: memoizeBench })); + + // Deprecated, use HtmlBasePlugin instead. + // Adds a pathPrefix manually to a URL string + config.addFilter("url", function addPathPrefixFilter(url, pathPrefixOverride) { + let pathPrefix; + if (pathPrefixOverride && typeof pathPrefixOverride === "string") { + pathPrefix = pathPrefixOverride; + } else { + pathPrefix = templateConfig.getPathPrefix(); + } + + return urlFilter.call(this, url, pathPrefix); + }); + + config.addFilter("log", (input, ...messages) => { + console.log(input, ...messages); + return input; + }); + + config.addFilter("getCollectionItemIndex", function (collection, pageOverride) { + return getCollectionItemIndex.call(this, collection, pageOverride); + }); + config.addFilter("getCollectionItem", function (collection, pageOverride, langCode) { + return getLocaleCollectionItem.call(this, config, collection, pageOverride, langCode, 0); + }); + config.addFilter("getPreviousCollectionItem", function (collection, pageOverride, langCode) { + return getLocaleCollectionItem.call(this, config, collection, pageOverride, langCode, -1); + }); + config.addFilter("getNextCollectionItem", function (collection, pageOverride, langCode) { + return getLocaleCollectionItem.call(this, config, collection, pageOverride, langCode, 1); + }); + + // Process arbitrary content with transforms + config.addFilter( + "renderTransforms", + async function transformsFilter(content, pageEntryOverride, baseHrefOverride) { + return TransformsUtil.runAll(content, pageEntryOverride || this.page, config.transforms, { + baseHrefOverride, + logger: config.logger, + }); + }, + ); + + // Run the `htmlTransformer` transform + config.addTransform("@11ty/eleventy/html-transformer", async function (content) { + // Runs **AFTER** the bundle plugin transform (except: delayed bundles) + return ut.transformContent(this.outputPath, content, this); + }); + + // Requires user configuration, so must run as second-stage + config.addPlugin(HtmlRelativeCopyPlugin); + + return { + templateFormats: ["liquid", "md", "njk", "html", "11ty.js"], + // if your site deploys to a subdirectory, change this + pathPrefix: "/", + markdownTemplateEngine: "liquid", + htmlTemplateEngine: "liquid", + + // Renamed from `jsDataFileSuffix` in 2.0 (and swapped to an Array) + // If you remove "" we won’t look for dir/dir.json or file.json + dataFileSuffixes: [".11tydata", ""], + + // "index" will look for `directory/index.*` directory data files instead of `directory/directory.*` + dataFileDirBaseNameOverride: false, + + keys: { + // TODO breaking: use `false` by default + package: "pkg", // supports `false` + layout: "layout", + permalink: "permalink", + permalinkRoot: "permalinkBypassOutputDir", + engineOverride: "templateEngineOverride", + computed: "eleventyComputed", + dataSchema: "eleventyDataSchema", + }, + + // Deprecated, define using `export const directories = {}` instead. + // Reference values using `eleventyConfig.directories` instead. + dir: { + // These values here aren’t used internally either (except by a few tests), instead we’re using `ProjectDirectories.defaults`. + // These are kept in place for backwards compat with `eleventyConfig.dir` references in project config code and plugins. + input: ".", + includes: "_includes", + data: "_data", + output: "_site", + }, + + // deprecated, use config.addNunjucksFilter + nunjucksFilters: {}, + }; +} diff --git a/node_modules/@11ty/eleventy/tsconfig.json b/node_modules/@11ty/eleventy/tsconfig.json new file mode 100644 index 00000000..a01ba080 --- /dev/null +++ b/node_modules/@11ty/eleventy/tsconfig.json @@ -0,0 +1,117 @@ +{ + "include": [ + // "src/Eleventy.js", + "src/UserConfig.js", + "src/Util/ConsoleLogger.js", + ], + "exclude": [], + + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": ["ES2021"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "Node16", /* Specify what module code is generated. */ + // "rootDir": "./src/", /* Specify the root folder within your source files. */ + "moduleResolution": "Node16", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "types": ["node"], /* Specify type package names to be included without being referenced in a source file. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + // WARNING: this causes missing `node` types even with "types": ["node"] + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./types/", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./types/", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + // "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/node_modules/@11ty/lodash-custom/README.md b/node_modules/@11ty/lodash-custom/README.md new file mode 100644 index 00000000..e45d1a9b --- /dev/null +++ b/node_modules/@11ty/lodash-custom/README.md @@ -0,0 +1,14 @@ +# @11ty/lodash-custom + +Eleventy uses 3 small `lodash` functions: + +* [`get`](https://lodash.com/docs/4#get) +* [`set`](https://lodash.com/docs/4#set) +* [`chunk`](https://lodash.com/docs/4#chunk) + +## Why? + +1. The top level `lodash` package includes all of `lodash` and is a hefty 5 MB. +1. Using the individual, modularized `lodash.get`, `lodash.set`, `lodash.chunk` packages are a much smaller 106 KB but do contain duplicated code. More problematically, these are not being maintained/updated with the newest versions of `lodash`. + +This package creates one focused custom dependency using the tools that `lodash` provides to do custom builds ([`lodash-cli`](https://lodash.com/custom-builds)) for these three `lodash` functions with updated versions of `lodash`. \ No newline at end of file diff --git a/node_modules/@11ty/lodash-custom/lodash.custom.js b/node_modules/@11ty/lodash-custom/lodash.custom.js new file mode 100644 index 00000000..037cfef9 --- /dev/null +++ b/node_modules/@11ty/lodash-custom/lodash.custom.js @@ -0,0 +1,1704 @@ +/** + * @license + * Lodash (Custom Build) + * Build: `lodash exports="node" include="get,set,chunk"` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.21'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + nullTag = '[object Null]', + proxyTag = '[object Proxy]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]'; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Symbol = root.Symbol, + splice = arrayProto.splice, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /* Built-in method references that are verified to be native. */ + var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash() { + // No operation performed. + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /*------------------------------------------------------------------------*/ + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.chunk = chunk; + lodash.memoize = memoize; + lodash.set = set; + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.eq = eq; + lodash.get = get; + lodash.isArray = isArray; + lodash.isArrayLike = isArrayLike; + lodash.isFunction = isFunction; + lodash.isLength = isLength; + lodash.isObject = isObject; + lodash.isObjectLike = isObjectLike; + lodash.isSymbol = isSymbol; + lodash.toFinite = toFinite; + lodash.toInteger = toInteger; + lodash.toNumber = toNumber; + lodash.toString = toString; + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + /*--------------------------------------------------------------------------*/ + + if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } +}.call(this)); diff --git a/node_modules/@11ty/lodash-custom/package.json b/node_modules/@11ty/lodash-custom/package.json new file mode 100644 index 00000000..99d2eedc --- /dev/null +++ b/node_modules/@11ty/lodash-custom/package.json @@ -0,0 +1,38 @@ +{ + "name": "@11ty/lodash-custom", + "version": "4.17.21", + "description": "A custom, focused build of lodash exclusively for use internally in Eleventy.", + "main": "lodash.custom.js", + "scripts": { + "build": "npx lodash exports=node include=get,set,chunk && rm lodash.custom.min.js" + }, + "publishConfig": { + "access": "public" + }, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + }, + "author": { + "name": "Zach Leatherman", + "email": "zachleatherman@gmail.com", + "url": "https://zachleat.com/" + }, + "repository": { + "type": "git", + "url": "git://github.com/11ty/lodash-custom.git" + }, + "bugs": "https://github.com/11ty/lodash-custom/issues", + "homepage": "https://github.com/11ty/lodash-custom/", + "devDependencies": { + "ava": "^5.2.0", + "lodash-cli": "^4.17.5" + }, + "overrides": { + "lodash": "4.17.21" + } +} diff --git a/node_modules/@11ty/posthtml-urls/LICENSE b/node_modules/@11ty/posthtml-urls/LICENSE new file mode 100644 index 00000000..16736bdf --- /dev/null +++ b/node_modules/@11ty/posthtml-urls/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Steven Vachon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@11ty/posthtml-urls/README.md b/node_modules/@11ty/posthtml-urls/README.md new file mode 100644 index 00000000..3b915fbb --- /dev/null +++ b/node_modules/@11ty/posthtml-urls/README.md @@ -0,0 +1,48 @@ +# `@11ty/posthtml-urls` + +PostHTML plugin for transforming URLs. This is a fork of [`posthtml/posthtml-urls`](https://github.com/posthtml/posthtml-urls). + + +## Installation + +[Node.js](http://nodejs.org) `>= 6` is required. To install, type this at the command line: + +```shell +npm install @11ty/posthtml-urls +``` + + +## Usage + +```js +const posthtml = require('posthtml'); +const urls = require('@11ty/posthtml-urls'); + +const options = { + eachURL: (url, attr, tagName, rawNode) => `http://domain.com/${url}` +}; + +posthtml() + .use( urls(options) ) + .process('link') + .then(result => console.log(result.html)); +//-> link +``` + + +## Options + +### `eachURL` +Type: `Function` +Default value: `undefined` +A callback function ran for each URL value found. You can return either a synchronous value or a `Promise`. The `rawNode` argument was added in `v1.0.3`. + +### `filter` +Type: `Object` +Default value: [`{…}`](https://github.com/posthtml/posthtml-urls/blob/master/lib/defaultOptions.js) +The elements and attributes for which to search. An attribute value can optionally be a function, for deeper filtering. + + +## FAQ +1. **How can I filter `"],["\x3c!--","--\x3e"],["<",">"]])),s="",o=0;ot?e.slice(0,t-3)+"...":e));var t},k.prototype.readWord=function(){return this.readIdentifier()},k.prototype.readIdentifier=function(){this.skipBlank();for(var e=this.p;!this.end()&&Ae(this.peek());)++this.p;return new Mt(this.input,e,this.p,this.file)},k.prototype.readNonEmptyIdentifier=function(){var e=this.readIdentifier();return e.size()?e:void 0},k.prototype.readTagName=function(){return this.skipBlank(),"#"===this.input[this.p]?this.input.slice(this.p,++this.p):this.readIdentifier().getText()},k.prototype.readHashes=function(e){for(var t=[];;){var r=this.readHash(e);if(!r)return t;t.push(r)}},k.prototype.readHash=function(e){this.skipBlank(),","===this.peek()&&++this.p;var t,r=this.p,n=this.readNonEmptyIdentifier();if(n)return this.skipBlank(),e=te(e)?e:e?"=":":",this.peek()===e&&(++this.p,t=this.readValue()),new $t(this.input,r,this.p,n,t,this.file)},k.prototype.remaining=function(){return this.input.slice(this.p,this.N)},k.prototype.advance=function(e){this.p+=e=void 0===e?1:e},k.prototype.end=function(){return this.p>=this.N},k.prototype.read=function(){return this.input[this.p++]},k.prototype.readTo=function(e){for(;this.p=this.N?0:p[this.input.charCodeAt(this.p+e)]},k.prototype.peek=function(e){return this.p+(e=void 0===e?0:e)>=this.N?"":this.input[this.p+e]},k.prototype.skipBlank=function(){for(;this.peekType()&Ee;)++this.p};var w=k;function k(e,t,r,n,i){void 0===t&&(t=Ir.operators),void 0===i&&(i=!1),this.input=e,this.file=r,this.rawBeginAt=-1,this.p=n?n[0]:0,this.N=n?n[1]:e.length,this.opTrie=et(t),this.literalTrie=et($e),this.groupedExpressions=i}Yr.prototype.on=function(e,t){return this.handlers[e]=t,this},Yr.prototype.trigger=function(e,t){e=this.handlers[e];return!!e&&(e.call(this,t),!0)},Yr.prototype.start=function(){var e,t;for(this.trigger("start");!this.stopRequested&&(e=this.tokens.shift());)this.trigger("token",e)||_n(e)&&this.trigger("tag:".concat(e.name),e)||(t=this.parseToken(e,this.tokens),this.trigger("template",t));return this.stopRequested||this.trigger("end"),this},Yr.prototype.stop=function(){return this.stopRequested=!0,this};var Wr=Yr;function Yr(e,t){this.handlers={},this.stopRequested=!1,this.tokens=e,this.parseToken=t}function Zr(e){this.token=e}s(Qr,Jr=Zr);var Jr,L=Qr;function Qr(e,t,r){var n=Jr.call(this,e)||this;return n.name=e.name,n.liquid=r,n.tokenizer=e.tokenizer,n}$r.prototype.render=function(t){var r,n,i,s,o,a,u,l,c;return $(this,function(e){switch(e.label){case 0:r={},e.label=1;case 1:e.trys.push([1,8,9,10]),n=X(Object.keys(this.hash)),i=n.next(),e.label=2;case 2:return i.done?[3,7]:(s=i.value,o=r,a=s,void 0!==this.hash[s]?[3,3]:(u=!0,[3,5]));case 3:return[4,S(this.hash[s],t)];case 4:u=e.sent(),e.label=5;case 5:o[a]=u,e.label=6;case 6:return i=n.next(),[3,2];case 7:return[3,10];case 8:return l=e.sent(),l={error:l},[3,10];case 9:try{i&&!i.done&&(c=n.return)&&c.call(n)}finally{if(l)throw l.error}return[7];case 10:return[2,r]}})};var Gr=$r;function $r(e,t){this.hash={};var r,n,e=e instanceof w?e:new w(e,{});try{for(var i=X(e.readHashes(t)),s=i.next();!s.done;s=i.next()){var o=s.value;this.hash[o.name.content]=o.value}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}Xr.prototype.value=function(t,r){var n,i,s,o,a;return $(this,function(e){switch(e.label){case 0:return r=r||t.opts.lenientIf&&0=t&&(n+=r),n},normalize_whitespace:function(e){return e=y(e),this.context.memoryLimit.use(e.length),e.replace(/\s+/g," ")},number_of_words:function(e,t){var r=y(e);if(this.context.memoryLimit.use(r.length),!(e=r.trim()))return 0;switch(t){case"cjk":return(e.match(oi)||[]).length+(e.match(ai)||[]).length;case"auto":return oi.test(e)?e.match(oi).length+(e.match(ai)||[]).length:e.split(/\s+/).length;default:return e.split(/\s+/).length}},array_to_sentence_string:function(e,t){for(var r=(t=y(t=void 0===t?"and":t)).length+2*e.length,n=0;n"),r.write(''))),r.write('')),[4,s.renderTemplates(this.templates,t,r)]):[3,6];case 4:e.sent(),r.write(""),e.label=5;case 5:return u++,o.next(),[3,3];case 6:return n.length&&r.write(""),t.pop(),[2]}})},Qi.prototype.children=function(){return $(this,function(e){return[2,this.templates]})},Qi.prototype.arguments=function(){var t,r,n,i,s;return $(this,function(e){switch(e.label){case 0:return[4,this.collection];case 1:e.sent(),e.label=2;case 2:e.trys.push([2,7,8,9]),t=X(Object.values(this.args.hash)),r=t.next(),e.label=3;case 3:return r.done?[3,6]:_(n=r.value)?[4,n]:[3,5];case 4:e.sent(),e.label=5;case 5:return r=t.next(),[3,3];case 6:return[3,9];case 7:return n=e.sent(),i={error:n},[3,9];case 8:try{r&&!r.done&&(s=t.return)&&s.call(t)}finally{if(i)throw i.error}return[7];case 9:return[2]}})},Qi.prototype.blockScope=function(){return[this.variable,"tablerowloop"]};var Zi,Ji=Qi;function Qi(e,t,r,n){var i,s=Zi.call(this,e,t,r)||this,o=s.tokenizer.readIdentifier(),a=(s.tokenizer.skipBlank(),s.tokenizer.readIdentifier()),u=s.tokenizer.readValue();if("in"!==a.content||!u)throw new Error("illegal tag: ".concat(e.getText()));s.variable=o.content,s.collection=u,s.args=new Gr(s.tokenizer,r.options.keyValueSeparator),s.templates=[];var l=n.parseStream(t).on("start",function(){return i=s.templates}).on("tag:endtablerow",function(){return l.stop()}).on("template",function(e){return i.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))});return l.start(),s}s(Xi,Gi=L),Xi.prototype.render=function(t,r){var n,i,s,o,a,u,l,c;return $(this,function(e){switch(e.label){case 0:n=this.liquid.renderer,e.label=1;case 1:e.trys.push([1,7,8,9]),i=X(this.branches),s=i.next(),e.label=2;case 2:return s.done?[3,6]:(a=s.value,u=a.value,o=a.test,a=a.templates,[4,u.value(t,t.opts.lenientIf)]);case 3:return(u=e.sent(),o(u,t))?[4,n.renderTemplates(a,t,r)]:[3,5];case 4:return e.sent(),[2];case 5:return s=i.next(),[3,2];case 6:return[3,9];case 7:return l=e.sent(),l={error:l},[3,9];case 8:try{s&&!s.done&&(c=i.return)&&c.call(i)}finally{if(l)throw l.error}return[7];case 9:return[4,n.renderTemplates(this.elseTemplates,t,r)];case 10:return e.sent(),[2]}})},Xi.prototype.children=function(){var t;return $(this,function(e){return t=this.branches.flatMap(function(e){return e.templates}),this.elseTemplates&&t.push.apply(t,d([],ee(this.elseTemplates),!1)),[2,t]})},Xi.prototype.arguments=function(){return this.branches.map(function(e){return e.value})};var Gi,$i=Xi;function Xi(e,t,r,n){var i=Gi.call(this,e,t,r)||this,s=(i.branches=[],i.elseTemplates=[],[]),o=0;return n.parseStream(t).on("start",function(){return i.branches.push({value:new O(e.tokenizer.readFilteredValue(),i.liquid),test:Fr,templates:s=[]})}).on("tag:elsif",function(e){0 | any {\n return undefined\n }\n}\n","import { Drop } from '../drop/drop'\n\nexport const toString = Object.prototype.toString\nconst toLowerCase = String.prototype.toLowerCase\n\nexport const hasOwnProperty = Object.hasOwnProperty\n\nexport function isString (value: any): value is string {\n return typeof value === 'string'\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isFunction (value: any): value is Function {\n return typeof value === 'function'\n}\n\nexport function isPromise (val: any): val is Promise {\n return val && isFunction(val.then)\n}\n\nexport function isIterator (val: any): val is IterableIterator {\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return)\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n value = toValue(value)\n if (isString(value)) return value\n if (isNil(value)) return ''\n if (isArray(value)) return value.map(x => stringify(x)).join('')\n return String(value)\n}\n\nexport function readArrayElement (arr: any[], index: number, ownPropertyOnly: boolean) {\n if (index < 0) index = arr.length + index\n if (ownPropertyOnly && !hasOwnProperty.call(arr, index)) return undefined\n return arr[index]\n}\n\nexport function toEnumerable (val: any): T[] {\n val = toValue(val)\n if (isArray(val)) return val\n if (isString(val) && val.length > 0) return [val] as unknown as T[]\n if (isIterable(val)) return Array.from(val)\n if (isObject(val)) return Object.keys(val).map((key) => [key, val[key]]) as unknown as T[]\n return []\n}\n\nexport function toArray (val: any) {\n val = toValue(val)\n if (isNil(val)) return []\n if (isArray(val)) return val\n return [ val ]\n}\n\nexport function toValue (value: any): any {\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value\n}\n\nexport function toNumber (value: any): number {\n return +toValue(value) || 0\n}\n\nexport function isNumber (value: any): value is number {\n return typeof value === 'number'\n}\n\nexport function toLiquid (value: any): any {\n if (value && isFunction(value.toLiquid)) return toLiquid(value.toLiquid())\n return value\n}\n\nexport function isNil (value: any): boolean {\n return value == null\n}\n\nexport function isUndefined (value: any): boolean {\n return value === undefined\n}\n\nexport function isArray (value: any): value is any[] {\n // be compatible with IE 8\n return toString.call(value) === '[object Array]'\n}\n\nexport function isArrayLike (value: any): value is any[] {\n return value && isNumber(value.length)\n}\n\nexport function isIterable (value: any): value is Iterable {\n return isObject(value) && Symbol.iterator in value\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n obj: Record | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n obj = obj || {}\n for (const k in obj) {\n if (hasOwnProperty.call(obj, k)) {\n if (iteratee(obj[k], k, obj) === false) break\n }\n }\n return obj\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): value is object {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\nexport function range (start: number, stop: number, step = 1) {\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch = ' ') {\n return pad(str, length, ch, (str, ch) => ch + str)\n}\n\nexport function padEnd (str: any, length: number, ch = ' ') {\n return pad(str, length, ch, (str, ch) => str + ch)\n}\n\nexport function pad (str: any, length: number, ch: string, add: (str: string, ch: string) => string) {\n str = String(str)\n const n = length - str.length\n if (n <= 0) return str\n return add(str, ch.repeat(n))\n}\n\nexport function identify (val: T): T {\n return val\n}\n\nexport function changeCase (str: string): string {\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z')\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase()\n}\n\nexport function ellipsis (str: string, N: number): string {\n return str.length > N ? str.slice(0, N - 3) + '...' : str\n}\n\nexport function orderedCompare (a: any, b: any) {\n if (isNil(a) && isNil(b)) return 0\n if (isNil(a)) return 1\n if (isNil(b)) return -1\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n\n// compare string in case-insensitive way, undefined values to the tail\nexport function caseInsensitiveCompare (a: any, b: any) {\n if (isNil(a) && isNil(b)) return 0\n if (isNil(a)) return 1\n if (isNil(b)) return -1\n a = toLowerCase.call(a)\n b = toLowerCase.call(b)\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n\nexport function argumentsToValue any, T> (fn: F) {\n return function (this: T, ...args: Parameters) { return fn.call(this, ...args.map(toValue)) }\n}\n\nexport function argumentsToNumber any, T> (fn: F) {\n return function (this: T, ...args: Parameters) { return fn.call(this, ...args.map(toNumber)) }\n}\n\nexport function escapeRegExp (text: string) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\n/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */\nexport function * strictUniq (array: Array): Generator {\n const seen = new Set()\n\n for (const element of array) {\n const key = JSON.stringify(element)\n if (!seen.has(key)) {\n seen.add(key)\n yield element\n }\n }\n}\n","import * as _ from './underscore'\nimport { Token } from '../tokens/token'\nimport { Template } from '../template/template'\n\n/**\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\n */\nconst TRAIT = '__liquidClass__'\n\nexport abstract class LiquidError extends Error {\n public token!: Token\n public context = ''\n public originalError?: Error\n public constructor (err: Error | string, token: Token) {\n /**\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\n */\n super(typeof err === 'string' ? err : err.message)\n if (typeof err !== 'string') Object.defineProperty(this, 'originalError', { value: err, enumerable: false })\n Object.defineProperty(this, 'token', { value: token, enumerable: false })\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false })\n }\n protected update () {\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false })\n this.message = mkMessage(this.message, this.token)\n this.stack = this.message + '\\n' + this.context +\n '\\n' + this.stack\n if (this.originalError) this.stack += '\\nFrom ' + this.originalError.stack\n }\n static is (obj: unknown): obj is LiquidError {\n return (obj as Record | null | undefined)?.[TRAIT] === 'LiquidError'\n }\n}\n\nexport class TokenizationError extends LiquidError {\n public constructor (message: string, token: Token) {\n super(message, token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n public constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n public constructor (err: Error, tpl: Template) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n public static is (obj: any): obj is RenderError {\n return obj.name === 'RenderError'\n }\n}\n\nexport class LiquidErrors extends LiquidError {\n public constructor (public errors: RenderError[]) {\n super(errors[0], errors[0].token)\n this.name = 'LiquidErrors'\n const s = errors.length > 1 ? 's' : ''\n this.message = `${errors.length} error${s} found`\n super.update()\n }\n public static is (obj: any): obj is LiquidErrors {\n return obj.name === 'LiquidErrors'\n }\n}\n\nexport class UndefinedVariableError extends LiquidError {\n public constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'UndefinedVariableError'\n this.message = err.message\n super.update()\n }\n}\n\n// only used internally; raised where we don't have token information,\n// so it can't be an UndefinedVariableError.\nexport class InternalUndefinedVariableError extends Error {\n variableName: string\n\n public constructor (variableName: string) {\n super(`undefined variable: ${variableName}`)\n this.name = 'InternalUndefinedVariableError'\n this.variableName = variableName\n }\n}\n\nexport class AssertionError extends Error {\n public constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const [line, col] = token.getPosition()\n const lines = token.input.split('\\n')\n const begin = Math.max(line - 2, 1)\n const end = Math.min(line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const rowIndicator = (lineNumber === line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n let text = `${rowIndicator}${num}| `\n\n const colIndicator = lineNumber === line\n ? '\\n' + _.padStart('^', col + text.length)\n : ''\n\n text += lines[lineNumber - 1]\n text += colIndicator\n return text\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n const [line, col] = token.getPosition()\n msg += `, line:${line}, col:${col}`\n return msg\n}\n","// **DO NOT CHANGE THIS FILE**\n//\n// This file is generated by bin/character-gen.js\n// bitmask character types to boost performance\nexport const TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]\nexport const WORD = 1\nexport const OPERATOR = 2\nexport const BLANK = 4\nexport const QUOTE = 8\nexport const INLINE_BLANK = 16\nexport const NUMBER = 32\nexport const SIGN = 64\nexport const PUNCTUATION = 128\n\nexport function isWord (char: string): boolean {\n const code = char.charCodeAt(0)\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD)\n}\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK\nTYPES[8220] = TYPES[8221] = PUNCTUATION\n","import { AssertionError } from './error'\n\nexport function assert (predicate: T | null | undefined, message?: string | (() => string)) {\n if (!predicate) {\n const msg = typeof message === 'function'\n ? message()\n : (message || `expect ${predicate} to be true`)\n throw new AssertionError(msg)\n }\n}\n\nexport function assertEmpty (predicate: T | null | undefined, message = `unexpected ${JSON.stringify(predicate)}`) {\n assert(!predicate, message)\n}\n","import { Drop } from './drop'\nimport { Comparable } from './comparable'\nimport { isNil, toValue } from '../util'\n\nexport class NullDrop extends Drop implements Comparable {\n public equals (value: any) {\n return isNil(toValue(value))\n }\n public gt () {\n return false\n }\n public geq () {\n return false\n }\n public lt () {\n return false\n }\n public leq () {\n return false\n }\n public valueOf () {\n return null\n }\n}\n","import { Drop } from './drop'\nimport { Comparable } from './comparable'\nimport { isObject, isString, isArray, toValue } from '../util'\n\nexport class EmptyDrop extends Drop implements Comparable {\n public equals (value: any) {\n if (value instanceof EmptyDrop) return false\n value = toValue(value)\n if (isString(value) || isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n }\n public gt () {\n return false\n }\n public geq () {\n return false\n }\n public lt () {\n return false\n }\n public leq () {\n return false\n }\n public valueOf () {\n return ''\n }\n static is (value: unknown) {\n return value instanceof EmptyDrop\n }\n}\n","import { isNil, isString, toValue } from '../util'\nimport { EmptyDrop } from '../drop'\n\nexport class BlankDrop extends EmptyDrop {\n public equals (value: any) {\n if (value === false) return true\n if (isNil(toValue(value))) return true\n if (isString(value)) return /^\\s*$/.test(value)\n return super.equals(value)\n }\n static is (value: unknown) {\n return value instanceof BlankDrop\n }\n}\n","import { Drop } from './drop'\n\nexport class ForloopDrop extends Drop {\n protected i = 0\n public name: string\n public length: number\n public constructor (length: number, collection: string, variable: string) {\n super()\n this.length = length\n this.name = `${variable}-${collection}`\n }\n public next () {\n this.i++\n }\n public index0 () {\n return this.i\n }\n public index () {\n return this.i + 1\n }\n public first () {\n return this.i === 0\n }\n public last () {\n return this.i === this.length - 1\n }\n public rindex () {\n return this.length - this.i\n }\n public rindex0 () {\n return this.length - this.i - 1\n }\n public valueOf () {\n return JSON.stringify(this)\n }\n}\n","import { stringify } from '../util'\nimport { Emitter } from './emitter'\n\nexport class SimpleEmitter implements Emitter {\n public buffer = '';\n\n public write (html: any) {\n this.buffer += stringify(html)\n }\n}\n","import { Emitter } from '../emitters'\n\nexport class StreamedEmitter implements Emitter {\n public buffer = '';\n public stream: NodeJS.ReadableStream = null as any\n constructor () {\n throw new Error('streaming not supported in browser')\n }\n public write: (html: any) => void\n public error: (err: Error) => void\n public end: () => void\n}\n","import { stringify, toValue } from '../util'\nimport { Emitter } from './emitter'\n\nexport class KeepingTypeEmitter implements Emitter {\n public buffer: any = '';\n\n public write (html: any) {\n html = toValue(html)\n // This will only preserve the type if the value is isolated.\n // I.E:\n // {{ my-port }} -> 42\n // {{ my-host }}:{{ my-port }} -> 'host:42'\n if (typeof html !== 'string' && this.buffer === '') {\n this.buffer = html\n } else {\n this.buffer = stringify(this.buffer) + stringify(html)\n }\n }\n}\n","import { Emitter, SimpleEmitter } from '../emitters'\nimport { Drop } from './drop'\n\nexport class BlockDrop extends Drop {\n constructor (\n // the block render from layout template\n private superBlockRender: (emitter: Emitter) => IterableIterator | string = () => ''\n ) {\n super()\n }\n /**\n * Provide parent access in child block by\n * {{ block.super }}\n */\n public * super (): IterableIterator {\n const emitter = new SimpleEmitter()\n yield this.superBlockRender(emitter)\n return emitter.buffer\n }\n}\n","import { isFunction } from '../util'\n\nexport interface Comparable {\n equals: (rhs: any) => boolean;\n gt: (rhs: any) => boolean;\n geq: (rhs: any) => boolean;\n lt: (rhs: any) => boolean;\n leq: (rhs: any) => boolean;\n}\n\nexport function isComparable (arg: any): arg is Comparable {\n return (\n arg &&\n isFunction(arg.equals) &&\n isFunction(arg.gt) &&\n isFunction(arg.geq) &&\n isFunction(arg.lt) &&\n isFunction(arg.leq)\n )\n}\n","import { BlankDrop, EmptyDrop, NullDrop } from '../drop'\n\nconst nil = new NullDrop()\nexport const literalValues = {\n 'true': true,\n 'false': false,\n 'nil': nil,\n 'null': nil,\n 'empty': new EmptyDrop(),\n 'blank': new BlankDrop()\n}\n\nexport type LiteralKey = keyof typeof literalValues\nexport type LiteralValue = typeof literalValues[LiteralKey]\n","import { isWord } from '../util/character'\n\ninterface TrieInput {\n [key: string]: T\n}\n\nexport type Trie = {\n data?: T\n end?: true\n needBoundary?: true\n} & Record\n\n// Tries are built once per input object and reused: the Tokenizer rebuilds them\n// on every instantiation, but `input` (operators/literalValues) is a stable\n// reference. WeakMap-keying by `input` lets short-lived operator objects (and\n// their tries) be garbage collected. The returned trie is treated as read-only\n// by callers (matchTrie only reads it); do not mutate it.\nconst trieCache = new WeakMap, Trie>()\n\nexport function createTrie (input: TrieInput): Trie {\n const cached = trieCache.get(input)\n if (cached) return cached\n const trie: Trie = {}\n for (const [name, data] of Object.entries(input)) {\n let node = trie\n\n for (let i = 0; i < name.length; i++) {\n const c = name[i]\n node[c] = node[c] || {}\n\n if (i === name.length - 1 && isWord(name[i])) {\n node[c].needBoundary = true\n }\n\n node = node[c]\n }\n\n node.data = data\n node.end = true\n }\n trieCache.set(input, trie)\n return trie\n}\n","import { isPromise, isIterator } from './underscore'\n\nexport type LiquidAsync any> =\n (sync: boolean, ...args: Parameters) => ReturnType | Promise>\n\nexport function toLiquidAsync any> (\n asyncFn: (...args: Parameters) => Promise>,\n syncFn?: F\n): LiquidAsync {\n const syncImpl = syncFn || asyncFn as any\n return (sync: boolean, ...args: any[]) => {\n return sync ? syncImpl(...args as Parameters) : asyncFn(...args as Parameters)\n }\n}\n\n// convert an async iterator to a Promise\nexport async function toPromise (val: Generator | Promise | T): Promise {\n if (!isIterator(val)) return val\n let value: unknown\n let done = false\n let next: 'next' | 'throw' = 'next'\n do {\n const state = val[next](value)\n done = !!state.done\n value = state.value\n next = 'next'\n try {\n if (isIterator(value)) value = toPromise(value)\n if (isPromise(value)) value = await value\n } catch (err) {\n next = 'throw'\n value = err\n }\n } while (!done)\n return value as T\n}\n\n// convert an async iterator to a value in a synchronous manner\nexport function toValueSync (val: Generator | T): T {\n if (!isIterator(val)) return val\n let value: any\n let done = false\n let next: 'next' | 'throw' = 'next'\n do {\n const state = val[next](value)\n done = !!state.done\n value = state.value\n next = 'next'\n if (isIterator(value)) {\n try {\n value = toValueSync(value)\n } catch (err) {\n next = 'throw'\n value = err\n }\n }\n } while (!done)\n return value\n}\n","import { changeCase, padStart, padEnd } from './underscore'\nimport { LiquidDate } from './liquid-date'\nimport type { Limiter } from './limiter'\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/\ninterface FormatOptions {\n flags: Record;\n width?: string;\n modifier?: string;\n memoryLimit?: Pick;\n}\n\n// prototype extensions\nfunction daysInMonth (d: LiquidDate) {\n const feb = isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n}\nfunction getDayOfYear (d: LiquidDate) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += daysInMonth(d)[i]\n }\n return num + d.getDate()\n}\nfunction getWeekOfYear (d: LiquidDate, startDay: number) {\n // Skip to startDay of this week\n const now = getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return String(Math.floor((now - then) / 7) + 1)\n}\nfunction isLeapYear (d: LiquidDate) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n}\nfunction ordinal (d: LiquidDate) {\n const date = d.getDate()\n if ([11, 12, 13].includes(date)) return 'th'\n\n switch (date % 10) {\n case 1: return 'st'\n case 2: return 'nd'\n case 3: return 'rd'\n default: return 'th'\n }\n}\nfunction century (d: LiquidDate) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n}\n\n// default to 0\nconst padWidths: Record = {\n d: 2,\n e: 2,\n H: 2,\n I: 2,\n j: 3,\n k: 2,\n l: 2,\n L: 3,\n m: 2,\n M: 2,\n S: 2,\n U: 2,\n W: 2\n}\n\nconst padSpaceChars = new Set('aAbBceklpP')\n\nfunction getTimezoneOffset (d: LiquidDate, opts: FormatOptions) {\n const nOffset = Math.abs(d.getTimezoneOffset())\n const h = Math.floor(nOffset / 60)\n const m = nOffset % 60\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\n padStart(h, 2, '0') +\n (opts.flags[':'] ? ':' : '') +\n padStart(m, 2, '0')\n}\ntype FormatCodeHandler = (d: LiquidDate, opts: FormatOptions) => unknown\n\nconst formatCodes: Record = {\n a: (d: LiquidDate) => d.getShortWeekdayName(),\n A: (d: LiquidDate) => d.getLongWeekdayName(),\n b: (d: LiquidDate) => d.getShortMonthName(),\n B: (d: LiquidDate) => d.getLongMonthName(),\n c: (d: LiquidDate) => d.toLocaleString(),\n C: (d: LiquidDate) => century(d),\n d: (d: LiquidDate) => d.getDate(),\n e: (d: LiquidDate) => d.getDate(),\n H: (d: LiquidDate) => d.getHours(),\n I: (d: LiquidDate) => String(d.getHours() % 12 || 12),\n j: (d: LiquidDate) => getDayOfYear(d),\n k: (d: LiquidDate) => d.getHours(),\n l: (d: LiquidDate) => String(d.getHours() % 12 || 12),\n L: (d: LiquidDate) => d.getMilliseconds(),\n m: (d: LiquidDate) => d.getMonth() + 1,\n M: (d: LiquidDate) => d.getMinutes(),\n N: (d: LiquidDate, opts: FormatOptions) => {\n const width = Number(opts.width) || 9\n const str = padStart(String(d.getMilliseconds()), 3, '0').slice(0, width)\n opts.memoryLimit?.use(width - str.length)\n return padEnd(str, width, '0')\n },\n p: (d: LiquidDate) => (d.getHours() < 12 ? 'AM' : 'PM'),\n P: (d: LiquidDate) => (d.getHours() < 12 ? 'am' : 'pm'),\n q: (d: LiquidDate) => ordinal(d),\n s: (d: LiquidDate) => Math.floor(d.dateValue() / 1000),\n S: (d: LiquidDate) => d.getSeconds(),\n u: (d: LiquidDate) => d.getDay() || 7,\n U: (d: LiquidDate) => getWeekOfYear(d, 0),\n w: (d: LiquidDate) => d.getDay(),\n W: (d: LiquidDate) => getWeekOfYear(d, 1),\n x: (d: LiquidDate) => d.toLocaleDateString(),\n X: (d: LiquidDate) => d.toLocaleTimeString(),\n y: (d: LiquidDate) => d.getFullYear().toString().slice(2, 4),\n Y: (d: LiquidDate) => d.getFullYear(),\n z: getTimezoneOffset,\n Z: (d: LiquidDate, opts: FormatOptions) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\n 't': () => '\\t',\n 'n': () => '\\n',\n '%': () => '%'\n}\nformatCodes.h = formatCodes.b\n\nexport function strftime (d: LiquidDate, formatStr: string, memoryLimit?: Pick) {\n let output = ''\n let remaining = formatStr\n let match\n while ((match = rFormat.exec(remaining))) {\n output += remaining.slice(0, match.index)\n remaining = remaining.slice(match.index + match[0].length)\n output += format(d, match, memoryLimit)\n }\n return output + remaining\n}\n\nfunction format (d: LiquidDate, match: RegExpExecArray, memoryLimit?: Pick) {\n const [input, flagStr = '', width, modifier, conversion] = match\n const convert = formatCodes[conversion]\n if (!convert) return input\n const flags: Record = {}\n for (const flag of flagStr) flags[flag] = true\n let ret = String(convert(d, { flags, width, modifier, memoryLimit }))\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0'\n let padWidth = Number(width) || padWidths[conversion] || 0\n if (flags['^']) ret = ret.toUpperCase()\n else if (flags['#']) ret = changeCase(ret)\n if (flags['_']) padChar = ' '\n else if (flags['0']) padChar = '0'\n if (flags['-']) padWidth = 0\n memoryLimit?.use(Number(padWidth) - ret.length)\n return padStart(ret, padWidth, padChar)\n}\n","export function getDateTimeFormat () {\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined)\n}\n","import { getDateTimeFormat } from './intl'\nimport { isString } from './underscore'\n\n// one minute in milliseconds\nconst OneMinute = 60000\n/**\n * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS\n * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3\n */\nconst TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):?(\\d{2}))$/\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3))\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3))\n\n/**\n * A date implementation with timezone info, just like Ruby date\n *\n * Implementation:\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\n * - rewrite getTimezoneOffset() to trick strftime\n */\nexport class LiquidDate {\n private timezoneOffset: number\n private timezoneName: string\n private date: Date\n private displayDate: Date\n private DateTimeFormat = getDateTimeFormat()\n public timezoneFixed: boolean\n constructor (\n init: string | number | Date,\n private locale: string,\n timezone?: number | string\n ) {\n this.date = new Date(init)\n this.timezoneFixed = timezone !== undefined\n if (timezone === undefined) {\n timezone = this.date.getTimezoneOffset()\n }\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone\n this.timezoneName = isString(timezone) ? timezone : ''\n\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute\n const time = this.date.getTime() + diff\n this.displayDate = new Date(time)\n }\n\n getTime () {\n return this.displayDate.getTime()\n }\n /**\n * The underlying UTC timestamp in milliseconds, unaffected by the display\n * timezone. Use this (not `getTime()`) for timezone-invariant values like\n * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by\n * the display timezone offset so wall-clock getters can delegate to Date.\n */\n dateValue () {\n return this.date.getTime()\n }\n getMilliseconds () {\n return this.displayDate.getMilliseconds()\n }\n getSeconds () {\n return this.displayDate.getSeconds()\n }\n getMinutes () {\n return this.displayDate.getMinutes()\n }\n getHours () {\n return this.displayDate.getHours()\n }\n getDay () {\n return this.displayDate.getDay()\n }\n getDate () {\n return this.displayDate.getDate()\n }\n getMonth () {\n return this.displayDate.getMonth()\n }\n getFullYear () {\n return this.displayDate.getFullYear()\n }\n toLocaleString (locale?: string, init?: any) {\n if (init?.timeZone) {\n return this.date.toLocaleString(locale, init)\n }\n return this.displayDate.toLocaleString(locale, init)\n }\n toLocaleTimeString (locale?: string) {\n return this.displayDate.toLocaleTimeString(locale)\n }\n toLocaleDateString (locale?: string) {\n return this.displayDate.toLocaleDateString(locale)\n }\n getTimezoneOffset () {\n return this.timezoneOffset!\n }\n getTimeZoneName () {\n if (this.timezoneFixed) return this.timezoneName\n if (!this.DateTimeFormat) return\n return this.DateTimeFormat().resolvedOptions().timeZone\n }\n getLongMonthName () {\n return this.format({ month: 'long' }) ?? monthNames[this.getMonth()]\n }\n getShortMonthName () {\n return this.format({ month: 'short' }) ?? monthNamesShort[this.getMonth()]\n }\n getLongWeekdayName () {\n return this.format({ weekday: 'long' }) ?? dayNames[this.displayDate.getDay()]\n }\n getShortWeekdayName () {\n return this.format({ weekday: 'short' }) ?? dayNamesShort[this.displayDate.getDay()]\n }\n valid () {\n return !isNaN(this.getTime())\n }\n private format (options: Intl.DateTimeFormatOptions) {\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate)\n }\n\n /**\n * Create a Date object fixed to it's declared Timezone. Both\n * - 2021-08-06T02:29:00.000Z and\n * - 2021-08-06T02:29:00.000+08:00\n * will always be displayed as\n * - 2021-08-06 02:29:00\n * regardless timezoneOffset in JavaScript realm\n *\n * The implementation hack:\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\n * we create a different Date to trick strftime, it's both simpler and more performant.\n * Given that a template is expected to be parsed fewer times than rendered.\n */\n static createDateFixedToTimezone (dateString: string, locale: string): LiquidDate {\n const m = dateString.match(TIMEZONE_PATTERN)\n // representing a UTC timestamp\n if (m && m[1] === 'Z') {\n return new LiquidDate(+new Date(dateString), locale, 0)\n }\n // has a timezone specified\n if (m && m[2] && m[3] && m[4]) {\n const [, , sign, hours, minutes] = m\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10))\n return new LiquidDate(+new Date(dateString), locale, offset)\n }\n return new LiquidDate(dateString, locale)\n }\n private static getTimezoneOffset (timezoneName: string, date: Date) {\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName })\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' })\n\n const localDate = new Date(localDateString)\n const utcDate = new Date(utcDateString)\n return (+utcDate - +localDate) / (60 * 1000)\n }\n}\n","import { assert } from './assert'\n\nexport class Limiter {\n private message: string\n private base = 0\n private limit: number\n constructor (resource: string, limit: number) {\n this.message = `${resource} limit exceeded`\n this.limit = limit\n }\n use (count: number) {\n if (+count > 0) {\n assert(this.base + +count <= this.limit, this.message)\n this.base += +count\n }\n }\n check (count: number) {\n if (+count > 0) {\n assert(+count <= this.limit, this.message)\n }\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\nimport { TYPES, BLANK } from '../util'\n\nexport abstract class DelimitedToken extends Token {\n public trimLeft = false\n public trimRight = false\n public contentRange: [number, number]\n public constructor (\n kind: TokenKind,\n [contentBegin, contentEnd]: [number, number],\n input: string,\n begin: number,\n end: number,\n trimLeft: boolean,\n trimRight: boolean,\n file?: string\n ) {\n super(kind, input, begin, end, file)\n const tl = input[contentBegin] === '-'\n const tr = input[contentEnd - 1] === '-'\n\n let l = tl ? contentBegin + 1 : contentBegin\n let r = tr ? contentEnd - 1 : contentEnd\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK)) l++\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK)) r--\n\n this.contentRange = [l, r]\n this.trimLeft = tl || trimLeft\n this.trimRight = tr || trimRight\n }\n get content () {\n return this.input.slice(this.contentRange[0], this.contentRange[1])\n }\n}\n","import { DelimitedToken } from './delimited-token'\nimport { Tokenizer, TokenKind } from '../parser'\nimport type { NormalizedFullOptions } from '../liquid-options'\n\nexport class TagToken extends DelimitedToken {\n public name: string\n public tokenizer: Tokenizer\n public readonly args: string;\n public constructor (\n input: string,\n begin: number,\n end: number,\n options: NormalizedFullOptions,\n file?: string\n ) {\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length]\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file)\n\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions)\n this.name = this.tokenizer.readTagName()\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`)\n this.tokenizer.skipBlank()\n this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1])\n }\n}\n","import { DelimitedToken } from './delimited-token'\nimport { NormalizedFullOptions } from '../liquid-options'\nimport { TokenKind } from '../parser'\n\nexport class OutputToken extends DelimitedToken {\n public constructor (\n input: string,\n begin: number,\n end: number,\n options: NormalizedFullOptions,\n file?: string\n ) {\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options\n const valueRange: [number, number] = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length]\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file)\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport class HTMLToken extends Token {\n trimLeft = 0\n trimRight = 0\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.HTML, input, begin, end, file)\n }\n public getContent () {\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight)\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport class NumberToken extends Token {\n public content: number\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Number, input, begin, end, file)\n this.content = Number(this.getText())\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport class IdentifierToken extends Token {\n public content: string\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Word, input, begin, end, file)\n this.content = this.getText()\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\nimport { literalValues, LiteralValue, LiteralKey } from '../util'\n\nexport class LiteralToken extends Token {\n public content: LiteralValue\n public literal: LiteralKey\n public constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Literal, input, begin, end, file)\n this.literal = this.getText() as LiteralKey\n this.content = literalValues[this.literal]\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport const enum OperatorType {\n Binary,\n Unary\n}\n\nexport const operatorPrecedences = {\n '==': 2,\n '!=': 2,\n '>': 2,\n '<': 2,\n '>=': 2,\n '<=': 2,\n 'contains': 2,\n 'not': 1,\n 'and': 0,\n 'or': 0\n}\n\nexport const operatorTypes = {\n '==': OperatorType.Binary,\n '!=': OperatorType.Binary,\n '>': OperatorType.Binary,\n '<': OperatorType.Binary,\n '>=': OperatorType.Binary,\n '<=': OperatorType.Binary,\n 'contains': OperatorType.Binary,\n 'not': OperatorType.Unary,\n 'and': OperatorType.Binary,\n 'or': OperatorType.Binary\n}\n\nexport type OperatorKey = keyof typeof operatorPrecedences\n\nexport class OperatorToken extends Token {\n public operator: OperatorKey\n public constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Operator, input, begin, end, file)\n this.operator = this.getText() as OperatorKey\n }\n getPrecedence () {\n return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1\n }\n}\n","import { Token } from './token'\nimport { LiteralToken } from './literal-token'\nimport { ValueToken } from './value-token'\nimport { IdentifierToken } from './identifier-token'\nimport { NumberToken } from './number-token'\nimport { RangeToken } from './range-token'\nimport { QuotedToken } from './quoted-token'\nimport { FilteredValueToken } from './filtered-value-token'\nimport { TokenKind } from '../parser'\n\nexport class PropertyAccessToken extends Token {\n constructor (\n public variable: QuotedToken | RangeToken | LiteralToken | NumberToken | FilteredValueToken | undefined,\n public props: (ValueToken | IdentifierToken)[],\n input: string,\n begin: number,\n end: number,\n file?: string\n ) {\n super(TokenKind.PropertyAccess, input, begin, end, file)\n }\n}\n","import { Token } from './token'\nimport { FilterArg } from '../parser/filter-arg'\nimport { TokenKind } from '../parser'\n\nexport class FilterToken extends Token {\n public constructor (\n public name: string,\n public args: FilterArg[],\n input: string,\n begin: number,\n end: number,\n file?: string\n ) {\n super(TokenKind.Filter, input, begin, end, file)\n }\n}\n","import { Token } from './token'\nimport { ValueToken } from './value-token'\nimport { IdentifierToken } from './identifier-token'\nimport { TokenKind } from '../parser'\n\nexport class HashToken extends Token {\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public name: IdentifierToken,\n public value?: ValueToken,\n public file?: string\n ) {\n super(TokenKind.Hash, input, begin, end, file)\n }\n}\n","const rHex = /[\\da-fA-F]/\nconst rOct = /[0-7]/\nconst escapeChar: Record = {\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n v: '\\x0B'\n}\n\nfunction hexVal (c: string) {\n const code = c.charCodeAt(0)\n if (code >= 97) return code - 87\n if (code >= 65) return code - 55\n return code - 48\n}\n\nexport function parseStringLiteral (str: string): string {\n let ret = ''\n for (let i = 1; i < str.length - 1; i++) {\n if (str[i] !== '\\\\') {\n ret += str[i]\n continue\n }\n if (escapeChar[str[i + 1]] !== undefined) {\n ret += escapeChar[str[++i]]\n } else if (str[i + 1] === 'u') {\n let val = 0\n let j = i + 2\n while (j <= i + 5 && rHex.test(str[j])) {\n val = val * 16 + hexVal(str[j++])\n }\n i = j - 1\n ret += String.fromCharCode(val)\n } else if (!rOct.test(str[i + 1])) {\n ret += str[++i]\n } else {\n let j = i + 1\n let val = 0\n while (j <= i + 3 && rOct.test(str[j])) {\n val = val * 8 + hexVal(str[j++])\n }\n i = j - 1\n ret += String.fromCharCode(val)\n }\n }\n return ret\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\nimport { parseStringLiteral } from '../render/string'\n\nexport class QuotedToken extends Token {\n public readonly content: string\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Quoted, input, begin, end, file)\n this.content = parseStringLiteral(this.getText())\n }\n}\n","import { Token } from './token'\nimport { ValueToken } from './value-token'\nimport { TokenKind } from '../parser'\n\nexport class RangeToken extends Token {\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public lhs: ValueToken,\n public rhs: ValueToken,\n public file?: string\n ) {\n super(TokenKind.Range, input, begin, end, file)\n }\n}\n","import { DelimitedToken } from './delimited-token'\nimport { NormalizedFullOptions } from '../liquid-options'\nimport { Tokenizer, TokenKind } from '../parser'\n\n/**\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\n */\nexport class LiquidTagToken extends DelimitedToken {\n public name: string\n public tokenizer: Tokenizer\n public constructor (\n input: string,\n begin: number,\n end: number,\n options: NormalizedFullOptions,\n file?: string\n ) {\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file)\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions)\n this.name = this.tokenizer.readTagName()\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax')\n this.tokenizer.skipBlank()\n }\n\n get args (): string {\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1])\n }\n}\n","import { Token } from './token'\nimport { FilterToken } from './filter-token'\nimport { TokenKind } from '../parser'\nimport { Expression } from '../render'\n\n/**\n * value expression with optional filters\n * e.g.\n * {% assign foo=\"bar\" | append: \"coo\" %}\n */\nexport class FilteredValueToken extends Token {\n constructor (\n public initial: Expression,\n public filters: FilterToken[],\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.FilteredValue, input, begin, end, file)\n }\n}\n","interface LiquidPerformance {\n now: () => number\n}\n\nconst polyfill: LiquidPerformance = {\n now: () => Date.now()\n}\n\nexport function getPerformance (): LiquidPerformance {\n return (typeof global === 'object' && global.performance) ||\n (typeof window === 'object' && window.performance) ||\n polyfill\n}\n","import { getPerformance } from '../util/performance'\nimport { toPromise, RenderError, LiquidErrors, LiquidError } from '../util'\nimport { Context } from '../context'\nimport { Template } from '../template'\nimport { Emitter, KeepingTypeEmitter, StreamedEmitter, SimpleEmitter } from '../emitters'\n\nexport class Render {\n public renderTemplatesToNodeStream (templates: Template[], ctx: Context): NodeJS.ReadableStream {\n const emitter = new StreamedEmitter()\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\n .then(() => emitter.end(), err => emitter.error(err))\n return emitter.stream\n }\n public * renderTemplates (templates: Template[], ctx: Context, emitter?: Emitter): IterableIterator {\n if (!emitter) {\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter()\n }\n ctx.renderLimit.check(getPerformance().now())\n const errors = []\n for (const tpl of templates) {\n ctx.renderLimit.check(getPerformance().now())\n try {\n // if tpl.render supports emitter, it'll return empty `html`\n const html = yield tpl.render(ctx, emitter)\n // if not, it'll return an `html`, write to the emitter for it\n html && emitter.write(html)\n if (ctx.breakCalled || ctx.continueCalled) break\n } catch (e) {\n const err = LiquidError.is(e) ? e : new RenderError(e as Error, tpl)\n if (ctx.opts.catchAllErrors) errors.push(err)\n else throw err\n }\n }\n if (errors.length) {\n throw new LiquidErrors(errors)\n }\n return emitter.buffer\n }\n}\n","import { isArray } from '../util/underscore'\nimport { ValueToken } from '../tokens/value-token'\n\ntype KeyValuePair = [string?, ValueToken?]\n\nexport type FilterArg = ValueToken | KeyValuePair\n\nexport function isKeyValuePair (arr: FilterArg): arr is KeyValuePair {\n return isArray(arr)\n}\n","import { evalToken } from '../render'\nimport { Context } from '../context'\nimport { identify, isFunction } from '../util/underscore'\nimport { FilterHandler, FilterImplOptions } from './filter-impl-options'\nimport { FilterArg, isKeyValuePair } from '../parser/filter-arg'\nimport { Liquid } from '../liquid'\nimport { FilterToken } from '../tokens'\n\nexport class Filter {\n public name: string\n public args: FilterArg[]\n public readonly raw: boolean\n private handler: FilterHandler\n private liquid: Liquid\n private token: FilterToken\n\n public constructor (token: FilterToken, options: FilterImplOptions | undefined, liquid: Liquid) {\n this.token = token\n this.name = token.name\n this.handler = isFunction(options)\n ? options\n : (isFunction(options?.handler) ? options!.handler : identify)\n this.raw = !isFunction(options) && !!options?.raw\n this.args = token.args\n this.liquid = liquid\n }\n public * render (value: any, context: Context): IterableIterator {\n const argv: any[] = []\n for (const arg of this.args as FilterArg[]) {\n if (isKeyValuePair(arg)) argv.push([arg[0], yield evalToken(arg[1], context)])\n else argv.push(yield evalToken(arg, context))\n }\n return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv])\n }\n}\n","import { QuotedToken, RangeToken, OperatorToken, Token, PropertyAccessToken, OperatorType, operatorTypes, FilteredValueToken } from '../tokens'\nimport { isRangeToken, isPropertyAccessToken, isFilteredValueToken, UndefinedVariableError, range, isOperatorToken, assert } from '../util'\nimport type { Context } from '../context'\nimport type { UnaryOperatorHandler } from '../render'\nimport { Drop } from '../drop'\nimport { Filter } from '../template/filter'\n\nexport class Expression {\n readonly postfix: Token[]\n\n public constructor (tokens: Iterable) {\n this.postfix = [...toPostfix(tokens)]\n }\n public * evaluate (ctx: Context, lenient?: boolean): Generator {\n assert(ctx, 'unable to evaluate: context not defined')\n const operands: any[] = []\n for (const token of this.postfix) {\n if (isOperatorToken(token)) {\n const r = operands.pop()\n let result\n if (operatorTypes[token.operator] === OperatorType.Unary) {\n result = yield (ctx.opts.operators[token.operator] as UnaryOperatorHandler)(r, ctx)\n } else {\n const l = operands.pop()\n result = yield ctx.opts.operators[token.operator](l, r, ctx)\n }\n operands.push(result)\n } else {\n operands.push(yield evalToken(token, ctx, lenient))\n }\n }\n return operands[0]\n }\n public valid () {\n return !!this.postfix.length\n }\n}\n\nexport function * evalToken (token: Token | undefined, ctx: Context, lenient = false): IterableIterator {\n if (!token) return\n if ('content' in token) return token.content\n if (isPropertyAccessToken(token)) return yield evalPropertyAccessToken(token, ctx, lenient)\n if (isRangeToken(token)) return yield evalRangeToken(token, ctx)\n if (isFilteredValueToken(token)) return yield evalFilteredValueToken(token, ctx, lenient)\n}\n\nfunction * evalFilteredValueToken (token: FilteredValueToken, ctx: Context, lenient: boolean): IterableIterator {\n assert(ctx.liquid, 'FilteredValueToken evaluation requires liquid instance in context')\n lenient = lenient || (ctx.opts.lenientIf && token.filters.length > 0 && token.filters[0].name === 'default')\n let val = yield token.initial.evaluate(ctx, lenient)\n\n for (const filterToken of token.filters) {\n const filterImpl = ctx.liquid.filters[filterToken.name]\n assert(filterImpl || !ctx.liquid.options.strictFilters, () => `undefined filter: ${filterToken.name}`)\n const filter = new Filter(filterToken, filterImpl, ctx.liquid)\n val = yield filter.render(val, ctx)\n }\n\n return val\n}\n\nfunction * evalPropertyAccessToken (token: PropertyAccessToken, ctx: Context, lenient: boolean): IterableIterator {\n const props: (string | number | Drop)[] = []\n for (const prop of token.props) {\n props.push((yield evalToken(prop, ctx, false)) as unknown as string | number | Drop)\n }\n try {\n if (token.variable) {\n const variable = yield evalToken(token.variable, ctx, lenient)\n return yield ctx._getFromScope(variable, props)\n } else {\n return yield ctx._get(props)\n }\n } catch (e) {\n if (lenient && (e as Error).name === 'InternalUndefinedVariableError') return null\n throw (new UndefinedVariableError(e as Error, token))\n }\n}\n\nexport function evalQuotedToken (token: QuotedToken) {\n return token.content\n}\n\nfunction * evalRangeToken (token: RangeToken, ctx: Context) {\n const low: number = yield evalToken(token.lhs, ctx)\n const high: number = yield evalToken(token.rhs, ctx)\n ctx.memoryLimit.use(high - low + 1)\n return range(+low, +high + 1)\n}\n\nfunction * toPostfix (tokens: Iterable): IterableIterator {\n const ops: OperatorToken[] = []\n for (const token of tokens) {\n if (isOperatorToken(token)) {\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\n yield ops.pop()!\n }\n ops.push(token)\n } else yield token\n }\n while (ops.length) {\n yield ops.pop()!\n }\n}\n","import { Context } from '../context/context'\nimport { toValue } from '../util'\n\nexport function isTruthy (val: any, ctx: Context): boolean {\n return !isFalsy(val, ctx)\n}\n\nexport function isFalsy (val: any, ctx: Context): boolean {\n val = toValue(val)\n\n if (ctx.opts.jsTruthy) {\n return !val\n } else {\n return val === false || undefined === val || val === null\n }\n}\n","import { isComparable } from '../drop/comparable'\nimport { Context } from '../context'\nimport { toValue } from '../util'\nimport { isFalsy, isTruthy } from '../render/boolean'\nimport { isArray, isFunction } from '../util/underscore'\n\nexport type UnaryOperatorHandler = (operand: any, ctx: Context) => boolean;\nexport type BinaryOperatorHandler = (lhs: any, rhs: any, ctx: Context) => boolean;\nexport type OperatorHandler = UnaryOperatorHandler | BinaryOperatorHandler;\nexport type Operators = Record\n\nexport const defaultOperators: Operators = {\n '==': equals,\n '!=': (l: any, r: any) => !equals(l, r),\n '>': (l: any, r: any) => {\n if (isComparable(l)) return l.gt(r)\n if (isComparable(r)) return r.lt(l)\n return toValue(l) > toValue(r)\n },\n '<': (l: any, r: any) => {\n if (isComparable(l)) return l.lt(r)\n if (isComparable(r)) return r.gt(l)\n return toValue(l) < toValue(r)\n },\n '>=': (l: any, r: any) => {\n if (isComparable(l)) return l.geq(r)\n if (isComparable(r)) return r.leq(l)\n return toValue(l) >= toValue(r)\n },\n '<=': (l: any, r: any) => {\n if (isComparable(l)) return l.leq(r)\n if (isComparable(r)) return r.geq(l)\n return toValue(l) <= toValue(r)\n },\n 'contains': (l: any, r: any) => {\n l = toValue(l)\n if (isArray(l)) return l.some((i) => equals(i, r))\n if (isFunction(l?.indexOf)) return l.indexOf(toValue(r)) > -1\n return false\n },\n 'not': (v: any, ctx: Context) => isFalsy(toValue(v), ctx),\n 'and': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\n 'or': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\n}\n\nexport function equals (lhs: any, rhs: any): boolean {\n if (isComparable(lhs)) return lhs.equals(rhs)\n if (isComparable(rhs)) return rhs.equals(lhs)\n lhs = toValue(lhs)\n rhs = toValue(rhs)\n if (isArray(lhs)) {\n return isArray(rhs) && arrayEquals(lhs, rhs)\n }\n return lhs === rhs\n}\n\nfunction arrayEquals (lhs: any[], rhs: any[]): boolean {\n if (lhs.length !== rhs.length) return false\n return !lhs.some((value, i) => !equals(value, rhs[i]))\n}\n\nexport function arrayIncludes (arr: any[], item: any): boolean {\n return arr.some(value => equals(value, item))\n}\n","import { Cache } from './cache'\n\nclass Node {\n constructor (\n public key: string,\n public value: T,\n public next: Node,\n public prev: Node\n ) {}\n}\n\nexport class LRU implements Cache {\n private cache: Record> = {}\n private head: Node\n private tail: Node\n\n constructor (\n public limit: number,\n public size = 0\n ) {\n this.head = new Node('HEAD', null as any, null as any, null as any)\n this.tail = new Node('TAIL', null as any, null as any, null as any)\n this.head.next = this.tail\n this.tail.prev = this.head\n }\n\n write (key: string, value: T) {\n if (this.cache[key]) {\n this.cache[key].value = value\n } else {\n const node = new Node(key, value, this.head.next, this.head)\n this.head.next.prev = node\n this.head.next = node\n\n this.cache[key] = node\n this.size++\n this.ensureLimit()\n }\n }\n\n read (key: string): T | undefined {\n if (!this.cache[key]) return\n const { value } = this.cache[key]\n this.remove(key)\n this.write(key, value)\n return value\n }\n\n remove (key: string) {\n const node = this.cache[key]\n node.prev.next = node.next\n node.next.prev = node.prev\n delete this.cache[key]\n this.size--\n }\n\n clear () {\n this.head.next = this.tail\n this.tail.prev = this.head\n this.size = 0\n this.cache = {}\n }\n\n private ensureLimit () {\n if (this.size > this.limit) this.remove(this.tail.prev.key)\n }\n}\n","import { last } from '../util'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nexport function resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nexport async function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nexport function readFileSync (url: string): string {\n const xhr = new XMLHttpRequest()\n xhr.open('GET', url, false)\n xhr.send()\n if (xhr.status < 200 || xhr.status >= 300) {\n throw new Error(xhr.statusText)\n }\n return xhr.responseText as string\n}\n\nexport async function exists (filepath: string) {\n return true\n}\n\nexport function existsSync (filepath: string) {\n return true\n}\n\nexport function dirname (filepath: string) {\n return domResolve(filepath, '.')\n}\n\nexport const sep = '/'\n","import { isFalsy } from '../render/boolean'\nimport { identify, isArray, isString, toValue } from '../util/underscore'\nimport { FilterImpl } from '../template'\n\nfunction chargeJsonReplacerValue (memoryLimit: { use(count: number): void }, val: unknown) {\n if (typeof val === 'string') {\n memoryLimit.use(val.length)\n } else if (val === null || typeof val === 'number' || typeof val === 'boolean') {\n memoryLimit.use(JSON.stringify(val).length)\n } else if (Array.isArray(val)) {\n memoryLimit.use(val.length + 1)\n } else if (typeof val === 'object') {\n memoryLimit.use(2)\n }\n}\n\nfunction defaultFilter (this: FilterImpl, value: T1, defaultValue: T2, ...args: Array<[string, any]>): T1 | T2 {\n value = toValue(value)\n if (isArray(value) || isString(value)) return value.length ? value : defaultValue\n if (value === false && (new Map(args)).get('allow_false')) return false as T1\n return isFalsy(value, this.context) ? defaultValue : value\n}\n\nfunction json (this: FilterImpl, value: any, space = 0) {\n const memoryLimit = this.context.memoryLimit\n return JSON.stringify(value, (_key, val) => {\n chargeJsonReplacerValue(memoryLimit, val)\n return val\n }, space)\n}\n\nfunction inspect (this: FilterImpl, value: any, space = 0) {\n const memoryLimit = this.context.memoryLimit\n const ancestors: object[] = []\n return JSON.stringify(value, function (this: unknown, _key: unknown, value: any) {\n if (typeof value !== 'object' || value === null) {\n chargeJsonReplacerValue(memoryLimit, value)\n return value\n }\n // `this` is the object that value is contained in, i.e., its direct parent.\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) ancestors.pop()\n if (ancestors.includes(value)) {\n memoryLimit.use('[Circular]'.length)\n return '[Circular]'\n }\n ancestors.push(value)\n chargeJsonReplacerValue(memoryLimit, value)\n return value\n }, space)\n}\n\nfunction to_integer (value: any) {\n return Number(value)\n}\n\nconst raw = {\n raw: true,\n handler: identify\n}\n\nexport default {\n default: defaultFilter,\n raw,\n jsonify: json,\n to_integer,\n json,\n inspect\n}\n","import { FilterImpl } from '../template'\nimport { stringify } from '../util/underscore'\n\nconst escapeMap: Record = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap: Record = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nexport function escape (this: FilterImpl, str: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nexport function xml_escape (this: FilterImpl, str: string) {\n return escape.call(this, str)\n}\n\nfunction unescape (this: FilterImpl, str: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport function escape_once (this: FilterImpl, str: string) {\n return escape.call(this, unescape.call(this, str))\n}\n\nexport function newline_to_br (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.replace(/\\r?\\n/gm, '
\\n')\n}\n\n// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex\n// equivalent is O(n^2) in V8 on unclosed openers.\nexport function strip_html (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n const blocks = new Map([[''], [''], [''], ['<', '>']])\n let out = ''\n let i = 0\n while (i < str.length) {\n const lt = str.indexOf('<', i)\n if (lt < 0) return out + str.slice(i)\n out += str.slice(i, lt)\n for (const [opener, closer] of blocks) {\n if (!str.startsWith(opener, lt)) continue\n const e = str.indexOf(closer, lt + opener.length)\n if (e >= 0) { i = e + closer.length; break }\n blocks.delete(opener)\n }\n if (i <= lt) return out + str.slice(lt)\n }\n return out\n}\n","import { isNil } from '../util'\n\nexport class MapFS {\n constructor (private mapping: {[key: string]: string}) {}\n\n public sep = '/'\n\n async exists (filepath: string) {\n return this.existsSync(filepath)\n }\n\n existsSync (filepath: string) {\n return !isNil(this.mapping[filepath])\n }\n\n async readFile (filepath: string) {\n return this.readFileSync(filepath)\n }\n\n readFileSync (filepath: string) {\n const content = this.mapping[filepath]\n if (isNil(content)) throw new Error(`ENOENT: ${filepath}`)\n return content\n }\n\n dirname (filepath: string) {\n const segments = filepath.split(this.sep)\n segments.pop()\n return segments.join(this.sep)\n }\n\n resolve (dir: string, file: string, ext: string) {\n file += ext\n if (dir === '.') return file\n const segments = dir.split(/\\/+/)\n for (const segment of file.split(this.sep)) {\n if (segment === '.' || segment === '') continue\n else if (segment === '..') {\n if (segments.length > 1 || segments[0] !== '') segments.pop()\n } else segments.push(segment)\n }\n return segments.join(this.sep)\n }\n}\n","import { assert, isArray, isString, isFunction } from './util'\nimport { getDateTimeFormat } from './util/intl'\nimport { LRU, LiquidCache } from './cache'\nimport { FS, LookupType } from './fs'\nimport * as fs from './fs/fs-impl'\nimport { defaultOperators, Operators } from './render'\nimport misc from './filters/misc'\nimport { escape } from './filters/html'\nimport { MapFS } from './fs/map-fs'\n\ntype OutputEscape = (value: any) => string\ntype OutputEscapeOption = 'escape' | 'json' | OutputEscape\n\nexport interface LiquidOptions {\n /** A directory or an array of directories from where to resolve layout and include templates, and the filename passed to `.renderFile()`. If it's an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[];\n /** A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */\n partials?: string | string[];\n /** A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */\n layouts?: string | string[];\n /** Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to `true`. */\n relativeReference?: boolean;\n /** Use jekyll style include, pass parameters to `include` variable of current scope. Defaults to `false`. */\n jekyllInclude?: boolean;\n /** Use jekyll style where filter, enables array item match. Defaults to `false`. */\n jekyllWhere?: boolean;\n /** Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string;\n /** Whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean | number | LiquidCache;\n /** Use JavaScript Truthiness. Defaults to `false`. */\n jsTruthy?: boolean;\n /** If set, treat the `filepath` parameter in `{%include filepath %}` and `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean;\n /** Whether or not to assert filter existence. If set to `false`, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strictFilters?: boolean;\n /** Whether or not to assert variable existence. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strictVariables?: boolean;\n /** Catch all errors instead of exit upon one. Please note that render errors won't be reached when parse fails. */\n catchAllErrors?: boolean;\n /**\n * Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates.\n * This only applies to property/index access on scope objects. Filter transforms and iteration operate on the resolved value with standard JavaScript semantics, so prototype-inherited array indices may still be surfaced by them.\n */\n ownPropertyOnly?: boolean;\n /** Modifies the behavior of `strictVariables`. If set, a single undefined variable will *not* cause an exception in the context of the `if`/`elsif`/`unless` tag and the `default` filter. Instead, it will evaluate to `false` and `null`, respectively. Irrelevant if `strictVariables` is not set. Defaults to `false`. **/\n lenientIf?: boolean;\n /** JavaScript timezone name or timezoneOffset for `date` filter, default to local time. That means if you're in Australia (UTC+10), it'll default to `-600` or `Australia/Lindeman` */\n timezoneOffset?: number | string;\n /** Default date format to use if the date filter doesn't include a format. Defaults to `%A, %B %-e, %Y at %-l:%M %P %z`. */\n dateFormat?: string;\n /** Default locale, will be used by date filter. Defaults to system locale. */\n locale?: string;\n /** Strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trimTagRight?: boolean;\n /** Similar to `trimTagRight`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trimTagLeft?: boolean;\n /** Strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trimOutputRight?: boolean;\n /** Similar to `trimOutputRight`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trimOutputLeft?: boolean;\n /** The left delimiter for liquid tags. **/\n tagDelimiterLeft?: string;\n /** The right delimiter for liquid tags. **/\n tagDelimiterRight?: string;\n /** The left delimiter for liquid outputs. **/\n outputDelimiterLeft?: string;\n /** The right delimiter for liquid outputs. **/\n outputDelimiterRight?: string;\n /** Whether input strings to date filter preserve the given timezone **/\n preserveTimezones?: boolean;\n /** Whether `trim*Left`/`trim*Right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimmed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean;\n /** `fs` is used to override the default file-system module with a custom implementation. */\n fs?: FS;\n /** keyValue separator */\n keyValueSeparator?: string;\n /** Render from an in-memory `templates` mapping instead of the file system. When `templates` is set, Liquid uses the provided mapping for template lookup (including includes, layouts, and partials), and file-system options such as `fs`, `root`, `partials`, `layouts`, and `relativeReference` are effectively bypassed for those lookups. */\n templates?: {[key: string]: string};\n /** the global scope passed down to all partial and layout templates, i.e. templates included by `include`, `layout` and `render` tags. */\n globals?: object;\n /** Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to `false`. */\n keepOutputType?: boolean;\n /** Default escape filter applied to output values, when set, you'll have to add `| raw` for values don't need to be escaped. Defaults to `undefined`. */\n outputEscape?: OutputEscapeOption;\n /** An object of operators for conditional statements. Defaults to the regular Liquid operators. */\n operators?: Operators;\n /** Respect parameter order when using filters like \"for ... reversed limit\", Defaults to `false`. */\n orderedFilterParameters?: boolean;\n /** Allow parenthesized expressions as operands in conditions and loops, e.g. `{% if (foo | upcase) == \"BAR\" %}`. This is a non-standard extension to Liquid. Defaults to `false`. */\n groupedExpressions?: boolean;\n /** For DoS handling, limit total length of templates parsed in one `parse()` call. A typical PC can handle 1e8 (100M) characters without issues. */\n parseLimit?: number;\n /** For DoS handling, limit total time (in ms) for each `render()` call. */\n renderLimit?: number;\n /** For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue. */\n memoryLimit?: number;\n}\n\nexport interface RenderOptions {\n /**\n * This call is sync or async? It's used by Liquid internal methods, you'll not need this.\n */\n sync?: boolean;\n /**\n * Same as `globals` on LiquidOptions, but only for current render() call\n */\n globals?: object;\n /**\n * Same as `strictVariables` on LiquidOptions, but only for current render() call\n */\n strictVariables?: boolean;\n /**\n * Same as `ownPropertyOnly` on LiquidOptions, but only for current render() call\n */\n ownPropertyOnly?: boolean;\n /** For DoS handling, limit total renders of tag/HTML/output in one `render()` call. A typical PC can handle 1e5 renders of typical templates per second. */\n templateLimit?: number;\n /** For DoS handling, limit total time (in ms) for each `render()` call. */\n renderLimit?: number;\n /** For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue.. */\n memoryLimit?: number;\n}\n\nexport interface RenderFileOptions extends RenderOptions {\n lookupType?: LookupType;\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[];\n partials?: string[];\n layouts?: string[];\n cache?: LiquidCache;\n outputEscape?: OutputEscape;\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[];\n partials: string[];\n layouts: string[];\n relativeReference: boolean;\n jekyllInclude: boolean;\n extname: string;\n cache?: LiquidCache;\n jsTruthy: boolean;\n dynamicPartials: boolean;\n fs: FS;\n strictFilters: boolean;\n strictVariables: boolean;\n ownPropertyOnly: boolean;\n lenientIf: boolean;\n dateFormat: string;\n locale: string;\n trimTagRight: boolean;\n trimTagLeft: boolean;\n trimOutputRight: boolean;\n trimOutputLeft: boolean;\n tagDelimiterLeft: string;\n tagDelimiterRight: string;\n outputDelimiterLeft: string;\n outputDelimiterRight: string;\n preserveTimezones: boolean;\n greedy: boolean;\n globals: object;\n keepOutputType: boolean;\n operators: Operators;\n groupedExpressions: boolean;\n parseLimit: number;\n renderLimit: number;\n memoryLimit: number;\n}\n\nexport const defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n layouts: ['.'],\n partials: ['.'],\n relativeReference: true,\n jekyllInclude: false,\n keyValueSeparator: ':',\n cache: undefined,\n extname: '',\n fs: fs,\n dynamicPartials: true,\n jsTruthy: false,\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\n locale: '',\n trimTagRight: false,\n trimTagLeft: false,\n trimOutputRight: false,\n trimOutputLeft: false,\n greedy: true,\n tagDelimiterLeft: '{%',\n tagDelimiterRight: '%}',\n outputDelimiterLeft: '{{',\n outputDelimiterRight: '}}',\n preserveTimezones: false,\n strictFilters: false,\n strictVariables: false,\n ownPropertyOnly: true,\n lenientIf: false,\n globals: {},\n keepOutputType: false,\n operators: defaultOperators,\n groupedExpressions: false,\n memoryLimit: Infinity,\n parseLimit: Infinity,\n renderLimit: Infinity\n}\n\nexport function normalize (options: LiquidOptions): NormalizedFullOptions {\n if (options.hasOwnProperty('root')) {\n if (!options.hasOwnProperty('partials')) options.partials = options.root\n if (!options.hasOwnProperty('layouts')) options.layouts = options.root\n }\n if (options.hasOwnProperty('cache')) {\n let cache: LiquidCache | undefined\n if (typeof options.cache === 'number') cache = options.cache > 0 ? new LRU(options.cache) : undefined\n else if (typeof options.cache === 'object') cache = options.cache\n else cache = options.cache ? new LRU(1024) : undefined\n options.cache = cache\n }\n options = { ...defaultOptions, ...(options.jekyllInclude ? { dynamicPartials: false } : {}), ...options }\n if ((!options.fs!.dirname || !options.fs!.sep) && options.relativeReference) {\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning')\n options.relativeReference = false\n }\n options.root = normalizeDirectoryList(options.root)\n options.partials = normalizeDirectoryList(options.partials)\n options.layouts = normalizeDirectoryList(options.layouts)\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape)\n if (!options.locale) {\n options.locale = getDateTimeFormat()?.().resolvedOptions().locale ?? 'en-US'\n }\n if (options.templates) {\n options.fs = new MapFS(options.templates)\n options.relativeReference = true\n options.root = options.partials = options.layouts = '.'\n }\n return options as NormalizedFullOptions\n}\n\nfunction getOutputEscapeFunction (nameOrFunction: OutputEscapeOption): OutputEscape {\n if (nameOrFunction === 'escape') return escape\n if (nameOrFunction === 'json') return misc.json\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function')\n return nameOrFunction\n}\n\nexport function normalizeDirectoryList (value: any): string[] {\n let list: string[] = []\n if (isArray(value)) list = value\n if (isString(value)) list = [value]\n return list\n}\n","import { Token } from '../tokens'\nimport { NormalizedFullOptions } from '../liquid-options'\nimport { isTagToken, isHTMLToken, isDelimitedToken, TYPES, INLINE_BLANK, BLANK } from '../util'\n\nexport function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n let inRaw = false\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n if (!isDelimitedToken(token)) continue\n if (!inRaw && token.trimLeft) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (isTagToken(token)) {\n if (token.name === 'raw') inRaw = true\n else if (token.name === 'endraw') inRaw = false\n }\n\n if (!inRaw && token.trimRight) {\n trimRight(tokens[i + 1], options.greedy)\n }\n }\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || !isHTMLToken(token)) return\n\n const mask = greedy ? BLANK : INLINE_BLANK\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) token.trimRight++\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || !isHTMLToken(token)) return\n\n const mask = greedy ? BLANK : INLINE_BLANK\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) token.trimLeft++\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n') token.trimLeft++\n}\n","import { FilteredValueToken, TagToken, HTMLToken, HashToken, QuotedToken, LiquidTagToken, OutputToken, ValueToken, Token, RangeToken, FilterToken, TopLevelToken, PropertyAccessToken, OperatorToken, LiteralToken, IdentifierToken, NumberToken } from '../tokens'\nimport { OperatorHandler } from '../render/operator'\nimport { LiteralValue, Trie, createTrie, ellipsis, literalValues, TokenizationError, TYPES, QUOTE, BLANK, NUMBER, SIGN, isWord, isString } from '../util'\nimport { Operators, Expression } from '../render'\nimport { NormalizedFullOptions, defaultOptions } from '../liquid-options'\nimport { FilterArg } from './filter-arg'\nimport { whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport class Tokenizer {\n p: number\n N: number\n public groupedExpressions: boolean\n private rawBeginAt = -1\n private opTrie: Trie\n private literalTrie: Trie\n\n constructor (\n public input: string,\n operators: Operators = defaultOptions.operators,\n public file?: string,\n range?: [number, number],\n groupedExpressions = false\n ) {\n this.p = range ? range[0] : 0\n this.N = range ? range[1] : input.length\n this.opTrie = createTrie(operators)\n this.literalTrie = createTrie(literalValues)\n this.groupedExpressions = groupedExpressions\n }\n\n readExpression () {\n return new Expression(this.readExpressionTokens())\n }\n\n * readExpressionTokens (): IterableIterator {\n while (this.p < this.N) {\n const operator = this.readOperator()\n if (operator) {\n yield operator\n continue\n }\n const operand = this.readValue()\n if (operand) {\n yield operand\n continue\n }\n return\n }\n }\n readOperator (): OperatorToken | undefined {\n this.skipBlank()\n const end = this.matchTrie(this.opTrie)\n if (end === -1) return\n return new OperatorToken(this.input, this.p, (this.p = end), this.file)\n }\n matchTrie (trie: Trie) {\n let node: Trie = trie\n let i = this.p\n let info: Trie | undefined\n while ((node as Trie)[this.input[i]] && i < this.N) {\n node = (node as Trie)[this.input[i++]] as Trie\n if (node['end']) info = node\n }\n if (!info) return -1\n if (info['needBoundary'] && isWord(this.peek(i - this.p))) return -1\n return i\n }\n readFilteredValue (): FilteredValueToken {\n const begin = this.p\n const initial = this.readExpression()\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`)\n const filters = this.readFilters()\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file)\n }\n readFilters (): FilterToken[] {\n const filters = []\n while (true) {\n const filter = this.readFilter()\n if (!filter) return filters\n filters.push(filter)\n }\n }\n readFilter (): FilterToken | null {\n this.skipBlank()\n if (this.end()) return null\n if (this.peek() === ')') return null\n this.assert(this.read() === '|', `expected \"|\" before filter`)\n const name = this.readIdentifier()\n if (!name.size()) {\n this.assert(this.end(), `expected filter name`)\n return null\n }\n const args = []\n this.skipBlank()\n if (this.peek() === ':') {\n do {\n ++this.p\n const arg = this.readFilterArg()\n arg && args.push(arg)\n this.skipBlank()\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|' || this.peek() === ')', () => `unexpected character ${this.snapshot()}`)\n } while (this.peek() === ',')\n } else if (this.peek() === '|' || this.peek() === ')' || this.end()) {\n // do nothing\n } else {\n throw this.error('expected \":\" after filter name')\n }\n return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file)\n }\n\n readFilterArg (): FilterArg | undefined {\n const key = this.readValue()\n if (!key) return\n this.skipBlank()\n if (this.peek() !== ':') return key\n ++this.p\n const value = this.readValue()\n return [key.getText(), value]\n }\n\n readTopLevelTokens (options: NormalizedFullOptions = defaultOptions): TopLevelToken[] {\n const tokens: TopLevelToken[] = []\n while (this.p < this.N) {\n const token = this.readTopLevelToken(options)\n tokens.push(token)\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n }\n\n readTopLevelToken (options: NormalizedFullOptions): TopLevelToken {\n const { tagDelimiterLeft, outputDelimiterLeft } = options\n if (this.rawBeginAt > -1) return this.readEndrawOrRawContent(options)\n if (this.match(tagDelimiterLeft)) return this.readTagToken(options)\n if (this.match(outputDelimiterLeft)) return this.readOutputToken(options)\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft])\n }\n\n readHTMLToken (stopStrings: string[]): HTMLToken {\n const begin = this.p\n while (this.p < this.N) {\n if (stopStrings.some(str => this.match(str))) break\n ++this.p\n }\n return new HTMLToken(this.input, begin, this.p, this.file)\n }\n\n readTagToken (options: NormalizedFullOptions): TagToken {\n const { file, input } = this\n const begin = this.p\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin)\n }\n const token = new TagToken(input, begin, this.p, options, file)\n if (token.name === 'raw') this.rawBeginAt = begin\n return token\n }\n\n readToDelimiter (delimiter: string, respectQuoted = false) {\n this.skipBlank()\n while (this.p < this.N) {\n if (respectQuoted && (this.peekType() & QUOTE)) {\n this.readQuoted()\n continue\n }\n ++this.p\n if (this.rmatch(delimiter)) return this.p\n }\n return -1\n }\n\n readOutputToken (options: NormalizedFullOptions = defaultOptions): OutputToken {\n const { file, input } = this\n const { outputDelimiterRight } = options\n const begin = this.p\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin)\n }\n return new OutputToken(input, begin, this.p, options, file)\n }\n\n readEndrawOrRawContent (options: NormalizedFullOptions): HTMLToken | TagToken {\n const { tagDelimiterLeft, tagDelimiterRight } = options\n const begin = this.p\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length\n while (this.p < this.N) {\n if (this.readIdentifier().getText() !== 'endraw') {\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length\n continue\n }\n while (this.p <= this.N) {\n if (this.rmatch(tagDelimiterRight)) {\n const end = this.p\n if (begin === leftPos) {\n this.rawBeginAt = -1\n return new TagToken(this.input, begin, end, options, this.file)\n } else {\n this.p = leftPos\n return new HTMLToken(this.input, begin, leftPos, this.file)\n }\n }\n if (this.rmatch(tagDelimiterLeft)) break\n this.p++\n }\n }\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin)\n }\n\n readLiquidTagTokens (options: NormalizedFullOptions = defaultOptions): LiquidTagToken[] {\n const tokens: LiquidTagToken[] = []\n while (this.p < this.N) {\n const token = this.readLiquidTagToken(options)\n token && tokens.push(token)\n }\n return tokens\n }\n\n readLiquidTagToken (options: NormalizedFullOptions): LiquidTagToken | undefined {\n this.skipBlank()\n if (this.end()) return\n\n const begin = this.p\n this.readToDelimiter('\\n')\n const end = this.p\n return new LiquidTagToken(this.input, begin, end, options, this.file)\n }\n\n error (msg: string, pos: number = this.p) {\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file))\n }\n\n assert (pred: unknown, msg: string | (() => string), pos?: number) {\n if (!pred) throw this.error(typeof msg === 'function' ? msg() : msg, pos)\n }\n\n snapshot (begin: number = this.p) {\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32))\n }\n\n /**\n * @deprecated use #readIdentifier instead\n */\n readWord () {\n return this.readIdentifier()\n }\n\n readIdentifier (): IdentifierToken {\n this.skipBlank()\n const begin = this.p\n while (!this.end() && isWord(this.peek())) ++this.p\n return new IdentifierToken(this.input, begin, this.p, this.file)\n }\n\n readNonEmptyIdentifier (): IdentifierToken | undefined {\n const id = this.readIdentifier()\n return id.size() ? id : undefined\n }\n\n readTagName (): string {\n this.skipBlank()\n // Handle inline comment tags\n if (this.input[this.p] === '#') return this.input.slice(this.p, ++this.p)\n return this.readIdentifier().getText()\n }\n\n readHashes (jekyllStyle?: boolean | string) {\n const hashes = []\n while (true) {\n const hash = this.readHash(jekyllStyle)\n if (!hash) return hashes\n hashes.push(hash)\n }\n }\n\n readHash (jekyllStyle?: boolean | string): HashToken | undefined {\n this.skipBlank()\n if (this.peek() === ',') ++this.p\n const begin = this.p\n const name = this.readNonEmptyIdentifier()\n if (!name) return\n let value\n\n this.skipBlank()\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':')\n if (this.peek() === sep) {\n ++this.p\n value = this.readValue()\n }\n return new HashToken(this.input, begin, this.p, name, value, this.file)\n }\n\n remaining () {\n return this.input.slice(this.p, this.N)\n }\n\n advance (step = 1) {\n this.p += step\n }\n\n end () {\n return this.p >= this.N\n }\n read () {\n return this.input[this.p++]\n }\n readTo (end: string): number {\n while (this.p < this.N) {\n ++this.p\n if (this.rmatch(end)) return this.p\n }\n return -1\n }\n\n readValue (): ValueToken | FilteredValueToken | undefined {\n this.skipBlank()\n const begin = this.p\n let variable: ValueToken | FilteredValueToken | undefined = this.readLiteral() || this.readQuoted() || this.readNumber()\n if (!variable && this.peek() === '(') {\n variable = this.readGroupOrRange()\n }\n const props = this.readProperties(!variable)\n if (!props.length) return variable\n return new PropertyAccessToken(variable, props, this.input, begin, this.p)\n }\n\n readScopeValue (): ValueToken | undefined {\n this.skipBlank()\n const begin = this.p\n const props = this.readProperties()\n if (!props.length) return undefined\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p)\n }\n\n private readProperties (isBegin = true): (ValueToken | IdentifierToken)[] {\n const props: (ValueToken | IdentifierToken)[] = []\n while (true) {\n if (this.peek() === '[') {\n this.p++\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file)\n this.assert(this.readTo(']') !== -1, '[ not closed')\n props.push(prop)\n continue\n }\n if (isBegin && !props.length) {\n const prop = this.readNonEmptyIdentifier()\n if (prop) {\n props.push(prop)\n continue\n }\n }\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\n this.p++\n const prop = this.readNonEmptyIdentifier()\n if (!prop) break\n props.push(prop)\n continue\n }\n break\n }\n return props\n }\n\n readNumber (): NumberToken | undefined {\n this.skipBlank()\n let decimalFound = false\n let digitFound = false\n let n = 0\n if (this.peekType() & SIGN) n++\n while (this.p + n <= this.N) {\n if (this.peekType(n) & NUMBER) {\n digitFound = true\n n++\n } else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\n if (decimalFound || !digitFound) return\n decimalFound = true\n n++\n } else break\n }\n if (digitFound && !isWord(this.peek(n))) {\n const num = new NumberToken(this.input, this.p, this.p + n, this.file)\n this.advance(n)\n return num\n }\n }\n\n readLiteral (): LiteralToken | undefined {\n this.skipBlank()\n const end = this.matchTrie(this.literalTrie)\n if (end === -1) return\n const literal = new LiteralToken(this.input, this.p, end, this.file)\n this.p = end\n return literal\n }\n\n readGroupOrRange (): FilteredValueToken | RangeToken | undefined {\n this.skipBlank()\n const begin = this.p\n if (this.peek() !== '(') return\n ++this.p\n const lhs = this.readValueOrThrow()\n this.skipBlank()\n\n if (this.peek() === '.' && this.peek(1) === '.') {\n this.p += 2\n const rhs = this.readValueOrThrow()\n this.skipBlank()\n this.assert(this.read() === ')', 'invalid range syntax')\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file)\n }\n\n if (this.groupedExpressions) {\n const initial = new Expression([lhs, ...this.readExpressionTokens()])\n this.assert(initial.valid(), () => `invalid value expression: ${this.snapshot()}`)\n const filters = this.readFilters()\n this.skipBlank()\n this.assert(this.read() === ')', 'unbalanced parentheses')\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file)\n }\n\n throw this.error('invalid range syntax')\n }\n\n readValueOrThrow (): ValueToken {\n const value = this.readValue()\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`)\n return value!\n }\n\n readQuoted (): QuotedToken | undefined {\n this.skipBlank()\n const begin = this.p\n if (!(this.peekType() & QUOTE)) return\n ++this.p\n let escaped = false\n while (this.p < this.N) {\n ++this.p\n if (this.input[this.p - 1] === this.input[begin] && !escaped) break\n if (escaped) escaped = false\n else if (this.input[this.p - 1] === '\\\\') escaped = true\n }\n return new QuotedToken(this.input, begin, this.p, this.file)\n }\n\n * readFileNameTemplate (options: NormalizedFullOptions): IterableIterator {\n const { outputDelimiterLeft } = options\n const htmlStopStrings = [',', ' ', '\\r', '\\n', '\\t', outputDelimiterLeft]\n const htmlStopStringSet = new Set(htmlStopStrings)\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\n yield this.match(outputDelimiterLeft)\n ? this.readOutputToken(options)\n : this.readHTMLToken(htmlStopStrings)\n }\n }\n\n match (word: string) {\n for (let i = 0; i < word.length; i++) {\n if (word[i] !== this.input[this.p + i]) return false\n }\n return true\n }\n\n rmatch (pattern: string) {\n for (let i = 0; i < pattern.length; i++) {\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) return false\n }\n return true\n }\n\n peekType (n = 0) {\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)]\n }\n\n peek (n = 0): string {\n return this.p + n >= this.N ? '' : this.input[this.p + n]\n }\n\n skipBlank () {\n while (this.peekType() & BLANK) ++this.p\n }\n}\n","import { Token, TopLevelToken } from '../tokens'\nimport { Template } from '../template'\nimport { isTagToken } from '../util'\n\ntype ParseToken = ((token: T, remainTokens: T[]) => Template)\n\nexport class ParseStream {\n private tokens: T[]\n private handlers: Record void> = {}\n private stopRequested = false\n private parseToken: ParseToken\n\n public constructor (tokens: T[], parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n public on (name: string, cb: (this: ParseStream, arg: T2) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n private trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n return h ? (h.call(this, arg), true) : false\n }\n public start () {\n this.trigger('start')\n let token: T | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n public stop () {\n this.stopRequested = true\n return this\n }\n}\n","export abstract class TemplateImpl {\n public token: T;\n public constructor (token: T) {\n this.token = token\n }\n}\n","import { TemplateImpl } from './template-impl'\nimport type { Emitter } from '../emitters/emitter'\nimport type { Parser, Tokenizer } from '../parser'\nimport type { Context } from '../context/context'\nimport type { TopLevelToken, TagToken } from '../tokens'\nimport type { Template } from './template'\nimport type { Liquid } from '../liquid'\n\nexport type TagRenderReturn = Generator | Promise | unknown\n\nexport abstract class Tag extends TemplateImpl implements Template {\n public name: string\n public liquid: Liquid\n protected tokenizer: Tokenizer\n\n public constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token)\n this.name = token.name\n this.liquid = liquid\n this.tokenizer = token.tokenizer\n }\n public abstract render (ctx: Context, emitter: Emitter): TagRenderReturn;\n}\n\nexport interface TagClass {\n new(token: TagToken, tokens: TopLevelToken[], liquid: Liquid, parser: Parser): Tag\n}\n","import { evalToken } from '../render/expression'\nimport { Context } from '../context/context'\nimport { Tokenizer } from '../parser/tokenizer'\nimport { Token } from '../tokens/token'\n\ntype HashValueTokens = Record\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `, foo:'bar', coo:2 reversed %}`,\n * hash['foo'] === 'bar'\n * hash['coo'] === 2\n * hash['reversed'] === undefined\n */\nexport class Hash {\n hash: HashValueTokens = {}\n\n constructor (input: string | Tokenizer, jekyllStyle?: boolean | string) {\n const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {})\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\n this.hash[hash.name.content] = hash.value\n }\n }\n\n * render (ctx: Context): Generator, unknown> {\n const hash: Record = {}\n for (const key of Object.keys(this.hash)) {\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx)\n }\n return hash\n }\n}\n","import { Filter } from './filter'\nimport { Expression } from '../render'\nimport { Tokenizer } from '../parser'\nimport { assert } from '../util'\nimport type { FilteredValueToken } from '../tokens'\nimport type { Liquid } from '../liquid'\nimport type { Context } from '../context'\n\nexport class Value {\n public readonly filters: Filter[] = []\n public readonly initial: Expression\n\n /**\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\n */\n public constructor (input: string | FilteredValueToken, liquid: Liquid) {\n const token: FilteredValueToken = typeof input === 'string'\n ? new Tokenizer(input, liquid.options.operators, undefined, undefined, liquid.options.groupedExpressions).readFilteredValue()\n : input\n this.initial = token.initial\n this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid))\n }\n\n public * value (ctx: Context, lenient?: boolean): Generator {\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default')\n let val = yield this.initial.evaluate(ctx, lenient)\n\n for (const filter of this.filters) {\n val = yield filter.render(val, ctx)\n }\n return val\n }\n\n private getFilter (liquid: Liquid, name: string) {\n const impl = liquid.filters[name]\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`)\n return impl\n }\n}\n","import { Value } from './value'\nimport { Arguments, Template, TemplateImpl } from '../template'\nimport { Context } from '../context/context'\nimport { Emitter } from '../emitters/emitter'\nimport { OutputToken } from '../tokens/output-token'\nimport { Tokenizer } from '../parser'\nimport { Liquid } from '../liquid'\nimport { Filter } from './filter'\nimport { FilterToken } from '../tokens'\n\nexport class Output extends TemplateImpl implements Template {\n value: Value\n public constructor (token: OutputToken, liquid: Liquid) {\n super(token)\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange, liquid.options.groupedExpressions)\n this.value = new Value(tokenizer.readFilteredValue(), liquid)\n const filters = this.value.filters\n const outputEscape = liquid.options.outputEscape\n if (!filters[filters.length - 1]?.raw && outputEscape) {\n const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0)\n filters.push(new Filter(token, outputEscape, liquid))\n }\n }\n public * render (ctx: Context, emitter: Emitter): IterableIterator {\n const val = yield this.value.value(ctx, false)\n emitter.write(val)\n }\n\n public * arguments (): Arguments {\n yield this.value\n }\n}\n","import { TemplateImpl, Template } from '../template'\nimport { HTMLToken } from '../tokens'\nimport { Context } from '../context'\nimport { Emitter } from '../emitters'\n\nexport class HTML extends TemplateImpl implements Template {\n private str: string\n public constructor (token: HTMLToken) {\n super(token)\n this.str = token.getContent()\n }\n public * render (ctx: Context, emitter: Emitter): IterableIterator {\n emitter.write(this.str)\n }\n}\n","import { Argument, Template, Value } from '.'\nimport { isKeyValuePair } from '../parser/filter-arg'\nimport { PropertyAccessToken, ValueToken } from '../tokens'\nimport {\n isFilteredValueToken,\n isNumberToken,\n isPropertyAccessToken,\n isQuotedToken,\n isRangeToken,\n isString,\n isValueToken,\n isWordToken,\n toPromise,\n toValueSync\n} from '../util'\n\n/**\n * Row, column and file name where a variable was found.\n */\nexport interface VariableLocation {\n row: number;\n col: number;\n file?: string;\n}\n\n/**\n * A variable's segments as an array, possibly with nested arrays of segments.\n */\nexport type SegmentArray = Array\n\n/**\n * A variable's segments and location, which can be coerced to a string.\n */\nexport class Variable {\n constructor (\n readonly segments: Array,\n readonly location: VariableLocation\n ) {}\n\n public toString (): string {\n return segmentsString(this.segments, true)\n }\n\n /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */\n public toArray (): SegmentArray {\n function * _visit (...segments: Array): Generator {\n for (const segment of segments) {\n if (segment instanceof Variable) {\n yield Array.from(_visit(...segment.segments))\n } else {\n yield segment\n }\n }\n }\n return Array.from(_visit(...this.segments))\n }\n}\n\n/**\n * Property names and array indexes that make up a path to a variable.\n */\nexport type VariableSegments = Array;\n\n/**\n * A mapping of variable names to an array of locations at which the variable was found.\n */\nexport type Variables = { [key: string]: Variable[] };\n\n/**\n * Group variables by the string representation of their root segment.\n */\nexport class VariableMap {\n private map: Map\n\n constructor () {\n this.map = new Map()\n }\n\n public get (key: Variable): Variable[] {\n const k = segmentsString([key.segments[0]])\n if (!this.map.has(k)) {\n this.map.set(k, [])\n }\n return this.map.get(k) as Variable[]\n }\n\n public has (key: Variable): boolean {\n return this.map.has(segmentsString([key.segments[0]]))\n }\n\n public push (variable: Variable): void {\n this.get(variable).push(variable)\n }\n\n public asObject (): Variables {\n return Object.fromEntries(this.map)\n }\n}\n\n/**\n * The result of calling `analyze()` or `analyzeSync()`.\n */\nexport interface StaticAnalysis {\n /**\n * All variables, whether they are in scope or not. Including references to names\n * such as `forloop` from the `for` tag.\n */\n variables: Variables;\n\n /**\n * Variables that are not in scope. These could be a \"global\" variables that are\n * expected to be provided by the application developer, or possible mistakes\n * from the template author.\n *\n * If a variable is referenced before and after assignment, you should expect\n * that variable to be included in `globals`, `variables` and `locals`, each with\n * a different location.\n */\n globals: Variables;\n\n /**\n * Template variables that are added to the template local scope using tags like\n * `assign`, `capture` or `increment`.\n */\n locals: Variables;\n}\n\nexport interface StaticAnalysisOptions {\n /**\n * When `true` (the default), try to load partial templates and analyze them too.\n */\n partials?: boolean;\n}\n\nexport const defaultStaticAnalysisOptions: StaticAnalysisOptions = {\n partials: true\n}\n\nfunction * _analyze (templates: Template[], partials: boolean, sync: boolean): Generator {\n const variables = new VariableMap()\n const globals = new VariableMap()\n const locals = new VariableMap()\n\n const rootScope = new DummyScope(new Set())\n\n // Names of partial templates that we've already analyzed.\n const seen: Set = new Set()\n\n function updateVariables (variable: Variable, scope: DummyScope) {\n variables.push(variable)\n const aliased = scope.alias(variable)\n\n if (aliased !== undefined) {\n const root = aliased.segments[0]\n // TODO: What if a a template renders a rendered template? Do we need scope.parent?\n if (isString(root) && !rootScope.has(root)) {\n globals.push(aliased)\n }\n } else {\n const root = variable.segments[0]\n if (isString(root) && !scope.has(root)) {\n globals.push(variable)\n }\n }\n\n // Recurse for nested Variables\n for (const segment of variable.segments) {\n if (segment instanceof Variable) {\n updateVariables(segment, scope)\n }\n }\n }\n\n function * visit (template: Template, scope: DummyScope): Generator {\n if (template.arguments) {\n for (const arg of template.arguments()) {\n for (const variable of extractVariables(arg)) {\n updateVariables(variable, scope)\n }\n }\n }\n\n if (template.localScope) {\n for (const ident of template.localScope()) {\n scope.add(ident.content)\n scope.deleteAlias(ident.content)\n const [row, col] = ident.getPosition()\n locals.push(new Variable([ident.content], { row, col, file: ident.file }))\n }\n }\n\n if (template.children) {\n if (template.partialScope) {\n const partial = template.partialScope()\n\n if (partial === undefined) {\n // Layouts, for example, can have children that are not partials.\n for (const child of (yield template.children(partials, sync)) as Template[]) {\n yield visit(child, scope)\n }\n return\n }\n\n if (seen.has(partial.name)) return\n\n const partialScopeNames: Set = new Set()\n const partialScope = partial.isolated\n ? new DummyScope(partialScopeNames)\n : scope.push(partialScopeNames)\n\n for (const name of partial.scope) {\n if (isString(name)) {\n partialScopeNames.add(name)\n } else {\n const [alias, argument] = name\n partialScopeNames.add(alias)\n const variables = Array.from(extractVariables(argument))\n if (variables.length) {\n partialScope.setAlias(alias, variables[0].segments)\n }\n }\n }\n\n for (const child of (yield template.children(partials, sync)) as Template[]) {\n yield visit(child, partialScope)\n seen.add(partial.name)\n }\n\n partialScope.pop()\n } else {\n if (template.blockScope) {\n scope.push(new Set(template.blockScope()))\n }\n\n for (const child of (yield template.children(partials, sync)) as Template[]) {\n yield visit(child, scope)\n }\n\n if (template.blockScope) {\n scope.pop()\n }\n }\n }\n }\n\n for (const template of templates) {\n yield visit(template, rootScope)\n }\n\n return {\n variables: variables.asObject(),\n globals: globals.asObject(),\n locals: locals.asObject()\n }\n}\n\n/**\n * Statically analyze a template and report variable usage.\n */\nexport function analyze (template: Template[], options: StaticAnalysisOptions = {}): Promise {\n const opts = { ...defaultStaticAnalysisOptions, ...options } as Required\n return toPromise(_analyze(template, opts.partials, false))\n}\n\n/**\n * Statically analyze a template and report variable usage.\n */\nexport function analyzeSync (template: Template[], options: StaticAnalysisOptions = {}): StaticAnalysis {\n const opts = { ...defaultStaticAnalysisOptions, ...options } as Required\n return toValueSync(_analyze(template, opts.partials, true))\n}\n\ninterface ScopeStackItem {\n names: Set;\n aliases: Map;\n}\n\n/**\n * A stack to manage scopes while traversing templates during static analysis.\n */\nclass DummyScope {\n private stack: Array\n\n constructor (globals: Set) {\n this.stack = [{ names: globals, aliases: new Map() }]\n }\n\n /** Return true if `name` is in scope. */\n public has (name: string): boolean {\n for (const scope of this.stack) {\n if (scope.names.has(name)) {\n return true\n }\n }\n return false\n }\n\n public push (scope: Set): DummyScope {\n this.stack.push({ names: scope, aliases: new Map() })\n return this\n }\n\n public pop (): Set | undefined {\n return this.stack.pop()?.names\n }\n\n // Add a name to the template scope.\n public add (name: string): void {\n this.stack[0].names.add(name)\n }\n\n /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */\n public alias (variable: Variable): Variable | undefined {\n const root = variable.segments[0]\n if (!isString(root)) return undefined\n const alias = this.getAlias(root)\n if (alias === undefined) return undefined\n return new Variable([...alias, ...variable.segments.slice(1)], variable.location)\n }\n\n // TODO: `from` could be a path with multiple segments, like `include.x`.\n public setAlias (from: string, to: VariableSegments): void {\n this.stack[this.stack.length - 1].aliases.set(from, to)\n }\n\n public deleteAlias (name: string): void {\n this.stack[this.stack.length - 1].aliases.delete(name)\n }\n\n private getAlias (name: string): VariableSegments | undefined {\n for (const scope of this.stack) {\n if (scope.aliases.has(name)) {\n return scope.aliases.get(name)\n }\n\n // If a scope has defined `name`, then it masks aliases in parent scopes.\n if (scope.names.has(name)) {\n return undefined\n }\n }\n return undefined\n }\n}\n\nfunction * extractVariables (value: Argument): Generator {\n if (isValueToken(value)) {\n yield * extractValueTokenVariables(value)\n } else if (value instanceof Value) {\n yield * extractFilteredValueVariables(value)\n }\n}\n\nfunction * extractFilteredValueVariables (value: Value): Generator {\n for (const token of value.initial.postfix) {\n if (isValueToken(token)) {\n yield * extractValueTokenVariables(token)\n }\n }\n\n for (const filter of value.filters) {\n for (const arg of filter.args) {\n if (isKeyValuePair(arg) && arg[1]) {\n yield * extractValueTokenVariables(arg[1])\n } else if (isValueToken(arg)) {\n yield * extractValueTokenVariables(arg)\n }\n }\n }\n}\n\nfunction * extractValueTokenVariables (token: ValueToken): Generator {\n if (isRangeToken(token)) {\n yield * extractValueTokenVariables(token.lhs)\n yield * extractValueTokenVariables(token.rhs)\n } else if (isFilteredValueToken(token)) {\n yield * extractGroupedExpressionTokenVariables(token)\n } else if (isPropertyAccessToken(token)) {\n yield extractPropertyAccessVariable(token)\n }\n}\n\nfunction * extractGroupedExpressionTokenVariables (token: ValueToken): Generator {\n if (!isFilteredValueToken(token)) return\n\n for (const t of token.initial.postfix) {\n if (isValueToken(t)) yield * extractValueTokenVariables(t)\n }\n\n for (const filter of token.filters) {\n for (const arg of filter.args) {\n if (isKeyValuePair(arg) && arg[1]) {\n yield * extractValueTokenVariables(arg[1])\n } else if (isValueToken(arg)) {\n yield * extractValueTokenVariables(arg)\n }\n }\n }\n}\n\nfunction extractPropertyAccessVariable (token: PropertyAccessToken): Variable {\n const segments: VariableSegments = []\n\n // token is not guaranteed to have `file` set. We'll try to get it from a prop if not.\n let file: string | undefined = token.file\n\n // Here we're flattening the first segment of a path if it is a nested path.\n const root = token.props[0]\n file = file || root.file\n if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) {\n segments.push(root.content)\n } else if (isPropertyAccessToken(root)) {\n // Flatten paths that start with a nested path.\n segments.push(...extractPropertyAccessVariable(root).segments)\n }\n\n for (const prop of token.props.slice(1)) {\n file = file || prop.file\n if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) {\n segments.push(prop.content)\n } else if (isPropertyAccessToken(prop)) {\n segments.push(extractPropertyAccessVariable(prop))\n }\n }\n\n const [row, col] = token.getPosition()\n return new Variable(segments, {\n row,\n col,\n file\n })\n}\n\n// This is used to detect segments that can be represented with dot notation\n// when creating a string representation of VariableSegments.\nconst RE_PROPERTY = /^[\\u0080-\\uFFFFa-zA-Z_][\\u0080-\\uFFFFa-zA-Z0-9_-]*$/\n\n/**\n * Return a string representation of segments using dot notation where possible.\n * @param segments - The property names and array indices that make up a path to a variable.\n * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets.\n */\nfunction segmentsString (segments: VariableSegments, bracketedRoot = false): string {\n const buf: string[] = []\n\n const root = segments[0]\n if (isString(root)) {\n if (!bracketedRoot || root.match(RE_PROPERTY)) {\n buf.push(`${root}`)\n } else {\n buf.push(`['${root}']`)\n }\n }\n\n for (const segment of segments.slice(1)) {\n if (segment instanceof Variable) {\n buf.push(`[${segmentsString(segment.segments)}]`)\n } else if (isString(segment)) {\n if (segment.match(RE_PROPERTY)) {\n buf.push(`.${segment}`)\n } else {\n buf.push(`['${segment}']`)\n }\n } else {\n buf.push(`[${segment}]`)\n }\n }\n\n return buf.join('')\n}\n","import { FS } from './fs'\nimport { assert, LiquidAsync, toLiquidAsync } from '../util'\n\nexport interface LoaderOptions {\n fs: FS;\n extname: string;\n root: string[];\n partials: string[];\n layouts: string[];\n relativeReference: boolean;\n}\nexport enum LookupType {\n Partials = 'partials',\n Layouts = 'layouts',\n Root = 'root'\n}\nexport class Loader {\n public shouldLoadRelative: (referencedFile: string) => boolean\n private options: LoaderOptions\n private contains: LiquidAsync>\n private exists: LiquidAsync\n\n constructor (options: LoaderOptions) {\n this.options = options\n if (options.relativeReference) {\n const sep = options.fs.sep\n assert(sep, '`fs.sep` is required for relative reference')\n const prefixes = ['.' + sep, '..' + sep, './', '../']\n this.shouldLoadRelative = (referencedFile: string) => prefixes.some(prefix => referencedFile.startsWith(prefix))\n } else {\n this.shouldLoadRelative = (_referencedFile: string) => false\n }\n const fs = options.fs\n this.contains = toLiquidAsync(\n fs.contains?.bind(fs) || (async () => true),\n fs.containsSync?.bind(fs) || (() => true)\n )\n this.exists = toLiquidAsync(\n fs.exists?.bind(fs) || (async () => false),\n fs.existsSync?.bind(fs)\n )\n }\n\n public * lookup (file: string, type: LookupType, sync?: boolean, currentFile?: string): Generator {\n const dirs = this.options[type]\n for (const filepath of this.candidates(file, dirs, currentFile)) {\n let allowed = false\n for (const dir of dirs) {\n if (yield this.contains(!!sync, dir, filepath)) { allowed = true; break }\n }\n if (!allowed) continue\n if (yield this.exists(!!sync, filepath)) return filepath\n }\n throw this.lookupError(file, dirs)\n }\n\n public * candidates (file: string, dirs: string[], currentFile?: string) {\n const { fs, extname } = this.options\n\n if (this.shouldLoadRelative(file) && currentFile) {\n const referenced = fs.resolve(this.dirname(currentFile), file, extname)\n yield referenced\n }\n for (const dir of dirs) {\n const referenced = fs.resolve(dir, file, extname)\n yield referenced\n }\n\n if (fs.fallback !== undefined) {\n const filepath = fs.fallback(file)\n if (filepath !== undefined) yield filepath\n }\n }\n\n private dirname (path: string) {\n const fs = this.options.fs\n assert(fs.dirname, '`fs.dirname` is required for relative reference')\n return fs.dirname!(path)\n }\n\n private lookupError (file: string, roots: string[]) {\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n return err\n }\n}\n","import { Limiter, toPromise, assert, isTagToken, isOutputToken, ParseError, toLiquidAsync, LiquidAsync } from '../util'\nimport { Tokenizer } from './tokenizer'\nimport { ParseStream } from './parse-stream'\nimport { TopLevelToken, OutputToken } from '../tokens'\nimport { Template, Output, HTML } from '../template'\nimport { LiquidCache } from '../cache'\nimport { FS, Loader, LookupType } from '../fs'\nimport { LiquidError, LiquidErrors } from '../util/error'\nimport type { Liquid } from '../liquid'\n\nexport class Parser {\n public parseFile: (file: string, sync?: boolean, type?: LookupType, currentFile?: string) => Generator\n\n private liquid: Liquid\n private fs: FS\n private cache?: LiquidCache\n private loader: Loader\n private parseLimit: Limiter\n private readFile: LiquidAsync\n\n public constructor (liquid: Liquid) {\n this.liquid = liquid\n this.cache = this.liquid.options.cache\n this.fs = this.liquid.options.fs\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile\n this.loader = new Loader(this.liquid.options)\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit)\n this.readFile = toLiquidAsync(\n this.fs.readFile?.bind(this.fs) || (async () => { throw new Error('readFile not implemented') }),\n this.fs.readFileSync?.bind(this.fs)\n )\n }\n public parse (html: string, filepath?: string): Template[] {\n html = String(html)\n this.parseLimit.use(html.length)\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath, undefined, this.liquid.options.groupedExpressions)\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options)\n return this.parseTokens(tokens)\n }\n public parseTokens (tokens: TopLevelToken[]) {\n let token\n const templates: Template[] = []\n const errors: LiquidError[] = []\n while ((token = tokens.shift())) {\n try {\n templates.push(this.parseToken(token, tokens))\n } catch (err) {\n if (this.liquid.options.catchAllErrors) errors.push(err as LiquidError)\n else throw err\n }\n }\n if (errors.length) throw new LiquidErrors(errors)\n return templates\n }\n public parseToken (token: TopLevelToken, remainTokens: TopLevelToken[]) {\n try {\n if (isTagToken(token)) {\n const TagClass = this.liquid.tags[token.name]\n assert(TagClass, `tag \"${token.name}\" not found`)\n return new TagClass(token, remainTokens, this.liquid, this)\n }\n if (isOutputToken(token)) {\n return new Output(token as OutputToken, this.liquid)\n }\n return new HTML(token)\n } catch (e) {\n if (LiquidError.is(e)) throw e\n throw new ParseError(e as Error, token)\n }\n }\n public parseStream (tokens: TopLevelToken[]) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n private * _parseFileCached (file: string, sync?: boolean, type: LookupType = LookupType.Root, currentFile?: string): Generator {\n const cache = this.cache!\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file\n const tpls = yield cache.read(key)\n if (tpls) return tpls\n\n const task = this._parseFile(file, sync, type, currentFile)\n // sync mode: exec the task and cache the result\n // async mode: cache the task before exec\n const taskOrTpl = sync ? yield task : toPromise(task)\n cache.write(key, taskOrTpl as any)\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\n try { return yield taskOrTpl } catch (err) { cache.remove(key); throw err }\n }\n private * _parseFile (file: string, sync?: boolean, type: LookupType = LookupType.Root, currentFile?: string): Generator {\n const filepath = yield this.loader.lookup(file, type, sync, currentFile)\n return this.parse(yield this.readFile(!!sync, filepath), filepath)\n }\n}\n","import { RangeToken, NumberToken, QuotedToken, LiteralToken, PropertyAccessToken, OutputToken, HTMLToken, TagToken, IdentifierToken, DelimitedToken, OperatorToken, ValueToken, FilteredValueToken } from '../tokens'\nimport { TokenKind } from '../parser'\n\nexport function isDelimitedToken (val: any): val is DelimitedToken {\n return !!(getKind(val) & TokenKind.Delimited)\n}\n\nexport function isOperatorToken (val: any): val is OperatorToken {\n return getKind(val) === TokenKind.Operator\n}\n\nexport function isHTMLToken (val: any): val is HTMLToken {\n return getKind(val) === TokenKind.HTML\n}\n\nexport function isOutputToken (val: any): val is OutputToken {\n return getKind(val) === TokenKind.Output\n}\n\nexport function isTagToken (val: any): val is TagToken {\n return getKind(val) === TokenKind.Tag\n}\n\nexport function isQuotedToken (val: any): val is QuotedToken {\n return getKind(val) === TokenKind.Quoted\n}\n\nexport function isLiteralToken (val: any): val is LiteralToken {\n return getKind(val) === TokenKind.Literal\n}\n\nexport function isNumberToken (val: any): val is NumberToken {\n return getKind(val) === TokenKind.Number\n}\n\nexport function isPropertyAccessToken (val: any): val is PropertyAccessToken {\n return getKind(val) === TokenKind.PropertyAccess\n}\n\nexport function isWordToken (val: any): val is IdentifierToken {\n return getKind(val) === TokenKind.Word\n}\n\nexport function isRangeToken (val: any): val is RangeToken {\n return getKind(val) === TokenKind.Range\n}\n\nexport function isFilteredValueToken (val: any): val is FilteredValueToken {\n return getKind(val) === TokenKind.FilteredValue\n}\n\nexport function isValueToken (val: any): val is ValueToken {\n // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range | TokenKind.FilteredValue\n return (getKind(val) & 5763) > 0\n}\n\nfunction getKind (val: any) {\n return val ? val.kind : -1\n}\n","export enum TokenKind {\n Number = 1,\n Literal = 2,\n Tag = 4,\n Output = 8,\n HTML = 16,\n Filter = 32,\n Hash = 64,\n PropertyAccess = 128,\n Word = 256,\n Range = 512,\n Quoted = 1024,\n Operator = 2048,\n FilteredValue = 4096,\n GroupedExpression = 8192,\n Delimited = Tag | Output\n}\n","import { Drop } from '../drop/drop'\n\nexport interface ScopeObject extends Record {\n toLiquid?: () => any;\n}\n\nexport type Scope = ScopeObject | Drop\n\nexport function createScope (from?: ScopeObject): ScopeObject {\n const scope = Object.create(null)\n if (from) Object.assign(scope, from)\n return scope\n}\n","import { getPerformance } from '../util/performance'\nimport { Drop } from '../drop/drop'\nimport { __assign } from 'tslib'\nimport { NormalizedFullOptions, defaultOptions, RenderOptions } from '../liquid-options'\nimport { createScope, Scope } from './scope'\nimport { hasOwnProperty, isArray, isNil, isUndefined, isString, isFunction, isNumber, toLiquid, InternalUndefinedVariableError, toValueSync, isObject, Limiter, toValue, readArrayElement } from '../util'\n\ntype PropertyKey = string | number;\n\nexport class Context {\n /**\n * insert a Context-level empty scope,\n * for tags like `{% capture %}` `{% assign %}` to operate\n */\n private scopes: Scope[] = [createScope()]\n private registers: Record = {}\n /**\n * user passed in scope\n * `{% increment %}`, `{% decrement %}` changes this scope,\n * whereas `{% capture %}`, `{% assign %}` only hide this scope\n */\n public environments: Scope\n /**\n * global scope used as fallback for missing variables\n */\n public globals: Scope\n public sync: boolean\n public breakCalled = false\n public continueCalled = false\n /**\n * The normalized liquid options object\n */\n public opts: NormalizedFullOptions\n /**\n * Reference to the Liquid instance for filter resolution\n */\n public liquid?: any\n /**\n * Throw when accessing undefined variable?\n */\n public strictVariables: boolean;\n public ownPropertyOnly: boolean;\n public memoryLimit: Limiter;\n public renderLimit: Limiter;\n public constructor (env: object = {}, opts: NormalizedFullOptions = defaultOptions, renderOptions: RenderOptions = {}, { memoryLimit, renderLimit, liquid }: { memoryLimit?: Limiter, renderLimit?: Limiter, liquid?: any } = {}) {\n this.sync = !!renderOptions.sync\n this.opts = opts\n this.globals = renderOptions.globals ?? opts.globals\n this.environments = isObject(env) ? env : Object(env)\n this.strictVariables = renderOptions.strictVariables ?? this.opts.strictVariables\n this.ownPropertyOnly = renderOptions.ownPropertyOnly ?? opts.ownPropertyOnly\n this.memoryLimit = memoryLimit ?? new Limiter('memory alloc', renderOptions.memoryLimit ?? opts.memoryLimit)\n this.renderLimit = renderLimit ?? new Limiter('template render', getPerformance().now() + (renderOptions.renderLimit ?? opts.renderLimit))\n this.liquid = liquid\n }\n public getRegister (key: string, defaultValue: T = undefined as T): T {\n return (this.registers[key] = this.registers[key] || defaultValue)\n }\n public setRegister (key: string, value: any) {\n return (this.registers[key] = value)\n }\n public saveRegister (...keys: string[]): [string, any][] {\n return keys.map(key => [key, this.getRegister(key)])\n }\n public restoreRegister (keyValues: [string, any][]) {\n return keyValues.forEach(([key, value]) => this.setRegister(key, value))\n }\n public getAll () {\n return [this.globals, this.environments, ...this.scopes]\n .reduce((ctx, val) => __assign(ctx, val), {})\n }\n /**\n * @deprecated use `_get()` or `getSync()` instead\n */\n public get (paths: PropertyKey[]): unknown {\n return this.getSync(paths)\n }\n public getSync (paths: PropertyKey[]): unknown {\n return toValueSync(this._get(paths))\n }\n public * _get (paths: (PropertyKey | Drop)[]): IterableIterator {\n const scope = this.findScope(paths[0] as string) // first prop should always be a string\n return yield this._getFromScope(scope, paths)\n }\n /**\n * @deprecated use `_get()` instead\n */\n public getFromScope (scope: unknown, paths: PropertyKey[] | string): IterableIterator {\n return toValueSync(this._getFromScope(scope, paths))\n }\n public * _getFromScope (scope: unknown, paths: (PropertyKey | Drop)[] | string, strictVariables = this.strictVariables): IterableIterator {\n if (isString(paths)) paths = paths.split('.')\n for (let i = 0; i < paths.length; i++) {\n scope = yield this.readProperty(scope as object, paths[i])\n if (strictVariables && isUndefined(scope)) {\n throw new InternalUndefinedVariableError((paths as string[]).slice(0, i + 1).join!('.'))\n }\n }\n return scope\n }\n public push (ctx: object) {\n return this.scopes.push(ctx)\n }\n public pop () {\n return this.scopes.pop()\n }\n public bottom () {\n return this.scopes[0]\n }\n public spawn (scope = {}) {\n return new Context(scope, this.opts, {\n sync: this.sync,\n globals: this.globals,\n strictVariables: this.strictVariables,\n ownPropertyOnly: this.ownPropertyOnly\n }, {\n renderLimit: this.renderLimit,\n memoryLimit: this.memoryLimit,\n liquid: this.liquid\n })\n }\n private findScope (key: string | number) {\n for (let i = this.scopes.length - 1; i >= 0; i--) {\n const candidate = this.scopes[i]\n if (key in candidate) return candidate\n }\n if (key in this.environments) return this.environments\n return this.globals\n }\n readProperty (obj: Scope, key: (PropertyKey | Drop)) {\n obj = toLiquid(obj)\n key = toValue(key) as PropertyKey\n if (isNil(obj)) return obj\n if (isArray(obj) && isNumber(key)) return readArrayElement(obj, key, this.ownPropertyOnly)\n const value = readJSProperty(obj, key, this.ownPropertyOnly)\n if (value === undefined && obj instanceof Drop) return obj.liquidMethodMissing(key, this)\n if (isFunction(value)) return value.call(obj)\n if (key === 'size') return readSize(obj)\n else if (key === 'first') return readFirst(obj, this.ownPropertyOnly)\n else if (key === 'last') return readLast(obj, this.ownPropertyOnly)\n return value\n }\n}\n\nexport function readJSProperty (obj: Scope, key: PropertyKey, ownPropertyOnly: boolean) {\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop)) return undefined\n return obj[key]\n}\n\nfunction readFirst (obj: Scope, ownPropertyOnly: boolean) {\n if (isArray(obj)) return readArrayElement(obj, 0, ownPropertyOnly)\n return readJSProperty(obj, 'first', ownPropertyOnly)\n}\n\nfunction readLast (obj: Scope, ownPropertyOnly: boolean) {\n if (isArray(obj)) return readArrayElement(obj, -1, ownPropertyOnly)\n return readJSProperty(obj, 'last', ownPropertyOnly)\n}\n\nfunction readSize (obj: Scope) {\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined) return obj['size']\n if (isArray(obj) || isString(obj)) return obj.length\n if (typeof obj === 'object') return Object.keys(obj).length\n}\n","export enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n","import { toNumber, argumentsToNumber } from '../util/underscore'\n\nexport const abs = argumentsToNumber(Math.abs)\nexport const at_least = argumentsToNumber(Math.max)\nexport const at_most = argumentsToNumber(Math.min)\nexport const ceil = argumentsToNumber(Math.ceil)\nexport const divided_by = argumentsToNumber((dividend: number, divisor: number, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor)\nexport const floor = argumentsToNumber(Math.floor)\nexport const minus = argumentsToNumber((v: number, arg: number) => v - arg)\nexport const plus = argumentsToNumber((lhs: number, rhs: number) => lhs + rhs)\nexport const modulo = argumentsToNumber((v: number, arg: number) => ((v % arg) + arg) % arg)\nexport const times = argumentsToNumber((v: number, arg: number) => v * arg)\n\nexport function round (v: number, arg = 0) {\n v = toNumber(v)\n arg = toNumber(arg)\n const amp = Math.pow(10, arg)\n const scaled = (v * amp) * (1 + Number.EPSILON)\n return Math.round(scaled) / amp\n}\n","import { stringify } from '../util/underscore'\n\nexport const url_decode = (x: string) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ')\nexport const url_encode = (x: string) => encodeURIComponent(stringify(x)).replace(/%20/g, '+')\nexport const cgi_escape = (x: string) => encodeURIComponent(stringify(x))\n .replace(/%20/g, '+')\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\nexport const uri_escape = (x: string) => encodeURI(stringify(x))\n .replace(/%5B/g, '[')\n .replace(/%5D/g, ']')\n\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug\nconst rSlugifyReplacers = {\n 'raw': /\\s+/g,\n 'default': rSlugifyDefault,\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\n 'ascii': /[^A-Za-z0-9]+/g,\n 'latin': rSlugifyDefault,\n 'none': null\n}\n\nexport function slugify (str: string, mode: keyof typeof rSlugifyReplacers = 'default', cased = false): string {\n str = stringify(str)\n\n const replacer = rSlugifyReplacers[mode]\n if (replacer) {\n if (mode === 'latin') str = removeAccents(str)\n str = str.replace(replacer, '-').replace(/^-|-$/g, '')\n }\n\n return cased ? str : str.toLowerCase()\n}\n\nfunction removeAccents (str: string): string {\n return str.replace(/[àáâãäå]/g, 'a')\n .replace(/[æ]/g, 'ae')\n .replace(/[ç]/g, 'c')\n .replace(/[èéêë]/g, 'e')\n .replace(/[ìíîï]/g, 'i')\n .replace(/[ð]/g, 'd')\n .replace(/[ñ]/g, 'n')\n .replace(/[òóôõöø]/g, 'o')\n .replace(/[ùúûü]/g, 'u')\n .replace(/[ýÿ]/g, 'y')\n .replace(/[ß]/g, 'ss')\n .replace(/[œ]/g, 'oe')\n .replace(/[þ]/g, 'th')\n .replace(/[ẞ]/g, 'SS')\n .replace(/[Œ]/g, 'OE')\n .replace(/[Þ]/g, 'TH')\n}\n","import { toArray, argumentsToValue, toValue, stringify, caseInsensitiveCompare, orderedCompare, isArray, isNil, isArrayLike, readArrayElement, toEnumerable } from '../util'\nimport { arrayIncludes, equals, evalToken, isTruthy } from '../render'\nimport { Value, FilterImpl } from '../template'\nimport { Tokenizer } from '../parser'\nimport type { Scope } from '../context'\nimport { EmptyDrop } from '../drop'\n\nexport const join = argumentsToValue(function (this: FilterImpl, v: any[], arg: string) {\n const array = toArray(v)\n const sep = isNil(arg) ? ' ' : stringify(arg)\n let outputSize = sep.length * Math.max(array.length - 1, 0)\n for (let i = 0; i < array.length; i++) outputSize += String(array[i]).length\n this.context.memoryLimit.use(outputSize)\n return Array.prototype.join.call(array, sep)\n})\nexport const last = argumentsToValue(function (this: FilterImpl, v: any) {\n return isArrayLike(v) ? readArrayElement(v, -1, this.context.ownPropertyOnly) : ''\n})\nexport const first = argumentsToValue(function (this: FilterImpl, v: any) {\n return isArrayLike(v) ? readArrayElement(v, 0, this.context.ownPropertyOnly) : ''\n})\nexport const reverse = argumentsToValue(function (this: FilterImpl, v: any[]) {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n return [...array].reverse()\n})\n\nfunction * sortBy (this: FilterImpl, arr: T[], property: string | undefined, comparator: (a: unknown, b: unknown) => number): IterableIterator {\n const values: [T, unknown][] = []\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n for (const item of array) {\n values.push([\n item,\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\n ])\n }\n return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0])\n}\n\nexport function * sort (this: FilterImpl, arr: T[], property?: string): IterableIterator {\n return yield * sortBy.call(this, arr, property, orderedCompare)\n}\n\nexport function * sort_natural (this: FilterImpl, arr: T[], property?: string): IterableIterator {\n return yield * sortBy.call(this, arr, property, caseInsensitiveCompare)\n}\n\nexport const size = (v: string | any[]) => (v && v.length) || 0\n\nexport function * map (this: FilterImpl, arr: Scope[], property: string): IterableIterator {\n const results = []\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n for (const item of array) {\n results.push(yield this.context._getFromScope(item, stringify(property), false))\n }\n return results\n}\n\nexport function * sum (this: FilterImpl, arr: Scope[], property?: string): IterableIterator {\n let sum = 0\n const array = toArray(arr)\n for (const item of array) {\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item)\n sum += Number.isNaN(data) ? 0 : data\n }\n return sum\n}\n\nexport function compact (this: FilterImpl, arr: T[]) {\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n return Array.prototype.filter.call(array, x => !isNil(toValue(x)))\n}\n\nexport function concat (this: FilterImpl, v: T1[], arg: T2[] = []): (T1 | T2)[] {\n const lhs = toArray(v)\n const rhs = toArray(arg)\n this.context.memoryLimit.use(lhs.length + rhs.length)\n return Array.prototype.concat.call(lhs, rhs)\n}\n\nexport function push (this: FilterImpl, v: T[], arg: T): T[] {\n return concat.call(this, v, [arg]) as T[]\n}\n\nexport function unshift (this: FilterImpl, v: T[], arg: T): T[] {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n const clone = [...array]\n clone.unshift(arg)\n return clone\n}\n\nexport function pop (this: FilterImpl, v: T[]): T[] {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n const clone = [...array]\n clone.pop()\n return clone\n}\n\nexport function shift (this: FilterImpl, v: T[]): T[] {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n const clone = [...array]\n clone.shift()\n return clone\n}\n\nexport function slice (this: FilterImpl, v: T[] | string, begin: number, length = 1): T[] | string {\n v = toValue(v)\n if (isNil(v)) return []\n if (!isArray(v)) v = stringify(v)\n begin = begin < 0 ? v.length + begin : begin\n if (begin < 0 || length < 0) return isArray(v) ? [] : ''\n this.context.memoryLimit.use(length)\n return isArray(v)\n ? Array.prototype.slice.call(v, begin, begin + length)\n : String.prototype.slice.call(v, begin, begin + length)\n}\n\nfunction expectedMatcher (this: FilterImpl, expected: any): (v: any) => boolean {\n if (this.context.opts.jekyllWhere) {\n return (v: any) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected))\n } else if (expected === undefined) {\n return (v: any) => isTruthy(v, this.context)\n } else {\n return (v: any) => equals(v, expected)\n }\n}\n\nfunction * filter (this: FilterImpl, include: boolean, arr: T[], property: string, expected: any): IterableIterator {\n const values: unknown[] = []\n arr = toArray(arr)\n this.context.memoryLimit.use(arr.length)\n const token = new Tokenizer(stringify(property)).readScopeValue()\n for (const item of arr) {\n values.push(yield evalToken(token, this.context.spawn(item)))\n }\n const matcher = expectedMatcher.call(this, expected)\n return Array.prototype.filter.call(arr, (_, i) => matcher(values[i]) === include)\n}\n\nfunction * filter_exp (this: FilterImpl, include: boolean, arr: T[], itemName: string, exp: string): IterableIterator {\n const filtered: unknown[] = []\n const keyTemplate = new Value(stringify(exp), this.liquid)\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n for (const item of array) {\n this.context.push({ [itemName]: item })\n const value = yield keyTemplate.value(this.context)\n this.context.pop()\n if (value === include) filtered.push(item)\n }\n return filtered\n}\n\nexport function * where (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n return yield * filter.call(this, true, arr, property, expected)\n}\n\nexport function * reject (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n return yield * filter.call(this, false, arr, property, expected)\n}\n\nexport function * where_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n return yield * filter_exp.call(this, true, arr, itemName, exp)\n}\n\nexport function * reject_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n return yield * filter_exp.call(this, false, arr, itemName, exp)\n}\n\nexport function * group_by (this: FilterImpl, arr: T[], property: string): IterableIterator {\n const map = new Map()\n arr = toEnumerable(arr)\n const token = new Tokenizer(stringify(property)).readScopeValue()\n this.context.memoryLimit.use(arr.length)\n for (const item of arr) {\n const key = yield evalToken(token, this.context.spawn(item))\n if (!map.has(key)) map.set(key, [])\n map.get(key).push(item)\n }\n return [...map.entries()].map(([name, items]) => ({ name, items }))\n}\n\nexport function * group_by_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const map = new Map()\n const keyTemplate = new Value(stringify(exp), this.liquid)\n arr = toEnumerable(arr)\n this.context.memoryLimit.use(arr.length)\n for (const item of arr) {\n this.context.push({ [itemName]: item })\n const key = yield keyTemplate.value(this.context)\n this.context.pop()\n if (!map.has(key)) map.set(key, [])\n map.get(key).push(item)\n }\n return [...map.entries()].map(([name, items]) => ({ name, items }))\n}\n\nfunction * search (this: FilterImpl, arr: T[], property: string, expected: string): IterableIterator {\n const token = new Tokenizer(stringify(property)).readScopeValue()\n const array = toArray(arr)\n const matcher = expectedMatcher.call(this, expected)\n for (let index = 0; index < array.length; index++) {\n const value = yield evalToken(token, this.context.spawn(array[index]))\n if (matcher(value)) return [index, array[index]]\n }\n}\n\nfunction * search_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const predicate = new Value(stringify(exp), this.liquid)\n const array = toArray(arr)\n for (let index = 0; index < array.length; index++) {\n this.context.push({ [itemName]: array[index] })\n const value = yield predicate.value(this.context)\n this.context.pop()\n if (value) return [index, array[index]]\n }\n}\n\nexport function * has (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n const result = yield * search.call(this, arr, property, expected)\n return !!result\n}\n\nexport function * has_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const result = yield * search_exp.call(this, arr, itemName, exp)\n return !!result\n}\n\nexport function * find_index (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n const result = yield * search.call(this, arr, property, expected)\n return result ? result[0] : undefined\n}\n\nexport function * find_index_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const result = yield * search_exp.call(this, arr, itemName, exp)\n return result ? result[0] : undefined\n}\n\nexport function * find (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n const result = yield * search.call(this, arr, property, expected)\n return result ? result[1] : undefined\n}\n\nexport function * find_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const result = yield * search_exp.call(this, arr, itemName, exp)\n return result ? result[1] : undefined\n}\n\nexport function uniq (this: FilterImpl, arr: T[]): T[] {\n arr = toArray(arr)\n this.context.memoryLimit.use(arr.length)\n return [...new Set(arr)]\n}\n\nexport function sample (this: FilterImpl, v: T[] | string, count = 1): T | string | (T | string)[] {\n v = toValue(v)\n if (isNil(v)) return []\n if (!isArray(v)) v = stringify(v)\n this.context.memoryLimit.use(v.length)\n const shuffled = [...v].sort(() => Math.random() - 0.5)\n if (count === 1) return shuffled[0]\n return shuffled.slice(0, count)\n}\n","import { toValue, stringify, isString, isNumber, LiquidDate, strftime, isNil } from '../util'\nimport { FilterImpl } from '../template'\nimport { NormalizedFullOptions } from '../liquid-options'\n\nexport function date (this: FilterImpl, v: string | Date, format?: string, timezoneOffset?: number | string) {\n const size = ((v as string)?.length ?? 0) + ((timezoneOffset as string)?.length ?? 0)\n this.context.memoryLimit.use(size)\n const date = parseDate(v, this.context.opts, timezoneOffset)\n if (!date) return v\n format = toValue(format)\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format)\n this.context.memoryLimit.use(format.length)\n return strftime(date, format, this.context.memoryLimit)\n}\n\nexport function date_to_xmlschema (this: FilterImpl, v: string | Date) {\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z')\n}\n\nexport function date_to_rfc822 (this: FilterImpl, v: string | Date) {\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z')\n}\n\nexport function date_to_string (this: FilterImpl, v: string | Date, type?: string, style?: string) {\n return stringify_date.call(this, v, '%b', type, style)\n}\n\nexport function date_to_long_string (this: FilterImpl, v: string | Date, type?: string, style?: string) {\n return stringify_date.call(this, v, '%B', type, style)\n}\n\nfunction stringify_date (this: FilterImpl, v: string | Date, month_type: string, type?: string, style?: string) {\n const date = parseDate(v, this.context.opts)\n if (!date) return v\n const ml = this.context.memoryLimit\n if (type === 'ordinal') {\n const d = date.getDate()\n return style === 'US'\n ? strftime(date, `${month_type} ${d}%q, %Y`, ml)\n : strftime(date, `${d}%q ${month_type} %Y`, ml)\n }\n return strftime(date, `%d ${month_type} %Y`, ml)\n}\n\nfunction parseDate (v: string | Date, opts: NormalizedFullOptions, timezoneOffset?: number | string): LiquidDate | undefined {\n let date: LiquidDate | undefined\n const defaultTimezoneOffset = timezoneOffset ?? opts.timezoneOffset\n const locale = opts.locale\n v = toValue(v)\n if (isNil(v)) {\n return undefined\n } else if (v === 'now' || v === 'today') {\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset)\n } else if (isNumber(v)) {\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset)\n } else if (isString(v)) {\n if (/^\\d+$/.test(v)) {\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset)\n } else if (opts.preserveTimezones && timezoneOffset === undefined) {\n date = LiquidDate.createDateFixedToTimezone(v, locale)\n } else {\n date = new LiquidDate(v, locale, defaultTimezoneOffset)\n }\n } else {\n date = new LiquidDate(v, locale, defaultTimezoneOffset)\n }\n return date.valid() ? date : undefined\n}\n","/**\n * String related filters\n *\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\n */\n\n// Han (Chinese) characters: \\u4E00-\\u9FFF\n// Additional Han characters: \\uF900-\\uFAFF (CJK Compatibility Ideographs)\n// Additional Han characters: \\u3400-\\u4DBF (CJK Unified Ideographs Extension A)\n// Katakana (Japanese): \\u30A0-\\u30FF\n// Hiragana (Japanese): \\u3040-\\u309F\n// Hangul (Korean): \\uAC00-\\uD7AF\nimport { FilterImpl } from '../template'\nimport { assert, stringify } from '../util'\n\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu\n\n// Word boundary followed by word characters (for detecting words)\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu\n\nexport function append (this: FilterImpl, v: string, arg: string) {\n assert(arguments.length === 2, 'append expect 2 arguments')\n const lhs = stringify(v)\n const rhs = stringify(arg)\n this.context.memoryLimit.use(lhs.length + rhs.length)\n return lhs + rhs\n}\n\nexport function prepend (this: FilterImpl, v: string, arg: string) {\n assert(arguments.length === 2, 'prepend expect 2 arguments')\n const lhs = stringify(v)\n const rhs = stringify(arg)\n this.context.memoryLimit.use(lhs.length + rhs.length)\n return rhs + lhs\n}\n\nexport function lstrip (this: FilterImpl, v: string, chars?: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n if (chars) {\n chars = stringify(chars)\n this.context.memoryLimit.use(chars.length)\n for (let i = 0, set = new Set(chars); i < str.length; i++) {\n if (!set.has(str[i])) return str.slice(i)\n }\n return ''\n }\n return str.trimStart()\n}\n\nexport function downcase (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.toLowerCase()\n}\n\nexport function upcase (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return stringify(str).toUpperCase()\n}\n\nexport function remove (this: FilterImpl, v: string, arg: string) {\n const str = stringify(v)\n arg = stringify(arg)\n this.context.memoryLimit.use(str.length + arg.length)\n return str.split(arg).join('')\n}\n\nexport function remove_first (this: FilterImpl, v: string, l: string) {\n const str = stringify(v)\n l = stringify(l)\n this.context.memoryLimit.use(str.length + l.length)\n return str.replace(l, '')\n}\n\nexport function remove_last (this: FilterImpl, v: string, l: string) {\n const str = stringify(v)\n const pattern = stringify(l)\n this.context.memoryLimit.use(str.length + pattern.length)\n const index = str.lastIndexOf(pattern)\n if (index === -1) return str\n return str.substring(0, index) + str.substring(index + pattern.length)\n}\n\nexport function rstrip (this: FilterImpl, str: string, chars?: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n if (chars) {\n chars = stringify(chars)\n this.context.memoryLimit.use(chars.length)\n for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) {\n if (!set.has(str[i])) return str.slice(0, i + 1)\n }\n return ''\n }\n return str.trimEnd()\n}\n\nexport function split (this: FilterImpl, v: string, arg: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n const arr = str.split(stringify(arg))\n // align to ruby split, which is the behavior of shopify/liquid\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\n while (arr.length && arr[arr.length - 1] === '') arr.pop()\n return arr\n}\n\nexport function strip (this: FilterImpl, v: string, chars?: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n if (chars) {\n const set = new Set(stringify(chars))\n this.context.memoryLimit.use(set.size)\n let i = 0\n let j = str.length - 1\n while (set.has(str[i])) i++\n while (j >= i && set.has(str[j])) j--\n return str.slice(i, j + 1)\n }\n return str.trim()\n}\n\nexport function strip_newlines (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.replace(/\\r?\\n/gm, '')\n}\n\nexport function capitalize (this: FilterImpl, str: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nexport function replace (this: FilterImpl, v: string, pattern: string, replacement: string) {\n const str = stringify(v)\n pattern = stringify(pattern)\n replacement = stringify(replacement)\n const parts = str.split(pattern)\n const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length)\n this.context.memoryLimit.use(outputSize)\n return parts.join(replacement)\n}\n\nexport function replace_first (this: FilterImpl, v: string, arg1: string, arg2: string) {\n const str = stringify(v)\n arg1 = stringify(arg1)\n arg2 = stringify(arg2)\n this.context.memoryLimit.use(str.length + arg1.length + arg2.length)\n return str.replace(arg1, () => arg2)\n}\n\nexport function replace_last (this: FilterImpl, v: string, arg1: string, arg2: string) {\n const str = stringify(v)\n const pattern = stringify(arg1)\n const replacement = stringify(arg2)\n this.context.memoryLimit.use(str.length + pattern.length + replacement.length)\n const index = str.lastIndexOf(pattern)\n if (index === -1) return str\n return str.substring(0, index) + replacement + str.substring(index + pattern.length)\n}\n\nexport function truncate (this: FilterImpl, v: string, l = 50, o = '...') {\n const str = stringify(v)\n o = stringify(o)\n this.context.memoryLimit.use(str.length + o.length)\n if (str.length <= l) return v\n return str.substring(0, l - o.length) + o\n}\n\nexport function truncatewords (this: FilterImpl, v: string, words = 15, o = '...') {\n const str = stringify(v)\n o = stringify(o)\n this.context.memoryLimit.use(str.length + o.length)\n const arr = str.split(/\\s+/)\n if (words <= 0) words = 1\n let ret = arr.slice(0, words).join(' ')\n if (arr.length >= words) ret += o\n return ret\n}\n\nexport function normalize_whitespace (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.replace(/\\s+/g, ' ')\n}\n\nexport function number_of_words (this: FilterImpl, input: string, mode?: 'cjk' | 'auto') {\n const str = stringify(input)\n this.context.memoryLimit.use(str.length)\n input = str.trim()\n if (!input) return 0\n switch (mode) {\n case 'cjk':\n // Count CJK characters and words\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length\n case 'auto':\n // Count CJK characters, if none, count words\n return rCJKWord.test(input)\n ? input.match(rCJKWord)!.length + (input.match(rNonCJKWord) || []).length\n : input.split(/\\s+/).length\n default:\n // Count words only\n return input.split(/\\s+/).length\n }\n}\n\nexport function array_to_sentence_string (this: FilterImpl, array: unknown[], connector = 'and') {\n connector = stringify(connector)\n let outputSize = connector.length + array.length * 2\n for (let i = 0; i < array.length; i++) outputSize += stringify(array[i]).length\n this.context.memoryLimit.use(outputSize)\n switch (array.length) {\n case 0:\n return ''\n case 1:\n return array[0]\n case 2:\n return `${array[0]} ${connector} ${array[1]}`\n default:\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`\n }\n}\n","/**\n * Base64 related filters\n *\n * Implements base64_encode and base64_decode filters for Shopify compatibility\n */\n\nimport { FilterImpl } from '../template'\nimport { stringify } from '../util'\nimport { base64Encode, base64Decode } from './base64-impl'\n\nexport function base64_encode (this: FilterImpl, value: string | Buffer): string {\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n this.context.memoryLimit.use(value.byteLength)\n return value.toString('base64')\n }\n const str = stringify(value)\n this.context.memoryLimit.use(str.length)\n return base64Encode(str)\n}\n\nexport function base64_decode (this: FilterImpl, value: string): string {\n const str = stringify(value)\n this.context.memoryLimit.use(str.length)\n return base64Decode(str)\n}\n","\nexport function base64Encode (str: string): string {\n return btoa(String.fromCharCode(...new TextEncoder().encode(str)))\n}\n\nexport function base64Decode (str: string): string {\n return new TextDecoder().decode(\n Uint8Array.from(atob(str), c => c.charCodeAt(0))\n )\n}\n","function bufferToHex (buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer)\n let hex = ''\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0')\n }\n return hex\n}\n\nexport async function sha256 (str: string): Promise {\n const data = new TextEncoder().encode(str)\n const digest = await crypto.subtle.digest('SHA-256', data)\n return bufferToHex(digest)\n}\n\nexport async function hmacSha256 (str: string, key: string): Promise {\n const encoder = new TextEncoder()\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(key),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n )\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(str))\n return bufferToHex(signature)\n}\n","/**\n * Crypto related filters\n *\n * Implements sha256 and hmac_sha256 filters for Shopify compatibility\n */\n\nimport { FilterImpl } from '../template'\nimport { stringify } from '../util'\nimport { sha256 as sha256Impl, hmacSha256 as hmacSha256Impl } from './crypto-impl'\n\nexport function sha256 (this: FilterImpl, value: unknown): string | Promise {\n const str = stringify(value)\n this.context.memoryLimit.use(str.length)\n return sha256Impl(str)\n}\n\nexport function hmac_sha256 (this: FilterImpl, value: unknown, key: unknown): string | Promise {\n const str = stringify(value)\n const keyStr = stringify(key)\n this.context.memoryLimit.use(str.length + keyStr.length)\n return hmacSha256Impl(str, keyStr)\n}\n","import * as htmlFilters from './html'\nimport * as mathFilters from './math'\nimport * as urlFilters from './url'\nimport * as arrayFilters from './array'\nimport * as dateFilters from './date'\nimport * as stringFilters from './string'\nimport * as base64Filters from './base64'\nimport * as cryptoFilters from './crypto'\nimport misc from './misc'\nimport { FilterImplOptions } from '../template'\n\nexport const filters: Record = {\n ...htmlFilters,\n ...mathFilters,\n ...urlFilters,\n ...arrayFilters,\n ...dateFilters,\n ...stringFilters,\n ...base64Filters,\n ...cryptoFilters,\n ...misc\n}\n","import { Value, Liquid, TopLevelToken, TagToken, Context, Tag } from '..'\nimport { Arguments } from '../template'\nimport { IdentifierToken } from '../tokens'\n\nexport default class extends Tag {\n private key: string\n private value: Value\n private identifier: IdentifierToken\n\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.identifier = this.tokenizer.readIdentifier()\n this.key = this.identifier.content\n this.tokenizer.assert(this.key, 'expected variable name')\n\n this.tokenizer.skipBlank()\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"')\n\n this.tokenizer.advance()\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid)\n }\n * render (ctx: Context): Generator {\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf)\n }\n\n public * arguments (): Arguments {\n yield this.value\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { Hash, ValueToken, Liquid, Tag, evalToken, Emitter, TagToken, TopLevelToken, Context, Template, ParseStream, FilteredValueToken } from '..'\nimport { assertEmpty, isValueToken, toEnumerable } from '../util'\nimport { createScope } from '../context/scope'\nimport { ForloopDrop } from '../drop/forloop-drop'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\n\nconst MODIFIERS = ['offset', 'limit', 'reversed']\n\ntype valueOf = T[keyof T]\n\nexport default class extends Tag {\n variable: string\n collection: ValueToken | FilteredValueToken\n hash: Hash\n templates: Template[]\n elseTemplates: Template[]\n\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const variable = this.tokenizer.readIdentifier()\n const inStr = this.tokenizer.readIdentifier()\n const collection = this.tokenizer.readValue()\n if (!variable.size() || inStr.content !== 'in' || !collection) {\n throw new Error(`illegal tag: ${token.getText()}`)\n }\n\n this.variable = variable.content\n this.collection = collection\n this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator)\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates })\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop() })\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`) })\n\n stream.start()\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n let collection = toEnumerable(yield evalToken(this.collection, ctx))\n\n if (!collection.length) {\n yield r.renderTemplates(this.elseTemplates, ctx, emitter)\n return\n }\n\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText()\n ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) }))\n const hash = (yield this.hash.render(ctx)) as Record\n ctx.pop()\n\n const modifiers = this.liquid.options.orderedFilterParameters\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\n : MODIFIERS.filter(x => hash[x] !== undefined)\n\n collection = modifiers.reduce((collection, modifier: valueOf) => {\n if (modifier === 'offset') return offset(collection, hash['offset'])\n if (modifier === 'limit') return limit(collection, hash['limit'])\n return reversed(collection)\n }, collection)\n\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length)\n const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) })\n ctx.push(scope)\n for (const item of collection) {\n scope[this.variable] = item\n ctx.continueCalled = ctx.breakCalled = false\n yield r.renderTemplates(this.templates, ctx, emitter)\n if (ctx.breakCalled) break\n scope.forloop.next()\n }\n ctx.continueCalled = ctx.breakCalled = false\n ctx.pop()\n }\n\n public * children (): Generator {\n const templates = this.templates.slice()\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates)\n }\n return templates\n }\n\n public * arguments (): Arguments {\n yield this.collection\n\n for (const v of Object.values(this.hash.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n }\n\n public blockScope (): Iterable {\n return [this.variable, 'forloop']\n }\n}\n\nfunction reversed (arr: Array) {\n return [...arr].reverse()\n}\n\nfunction offset (arr: Array, count: number) {\n return arr.slice(count)\n}\n\nfunction limit (arr: Array, count: number) {\n return arr.slice(0, count)\n}\n","import { Liquid, Tag, Template, Context, TagToken, TopLevelToken } from '..'\nimport { Parser } from '../parser'\nimport { IdentifierToken, QuotedToken } from '../tokens'\nimport { isTagToken } from '../util'\n\nexport default class extends Tag {\n identifier: IdentifierToken | QuotedToken\n variable: string\n templates: Template[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n this.identifier = this.readVariable()\n this.variable = this.identifier.content\n\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endcapture') return\n this.templates.push(parser.parseToken(token, remainTokens))\n }\n throw new Error(`tag ${tagToken.getText()} not closed`)\n }\n\n private readVariable (): IdentifierToken | QuotedToken {\n let ident: IdentifierToken | QuotedToken | undefined = this.tokenizer.readIdentifier()\n if (ident.content) return ident\n ident = this.tokenizer.readQuoted()\n if (ident) return ident\n throw this.tokenizer.error('invalid capture name')\n }\n\n * render (ctx: Context): Generator {\n const r = this.liquid.renderer\n const html = yield r.renderTemplates(this.templates, ctx)\n ctx.bottom()[this.variable] = html\n }\n\n public * children (): Generator {\n return this.templates\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { ValueToken, Liquid, toValue, evalToken, Value, Emitter, TagToken, TopLevelToken, Context, Template, Tag, ParseStream, FilteredValueToken } from '..'\nimport { Parser } from '../parser'\nimport { equals } from '../render'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n value: Value\n branches: { values: (ValueToken | FilteredValueToken)[], templates: Template[] }[] = []\n elseTemplates: Template[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid)\n this.elseTemplates = []\n\n let p: Template[] = []\n let elseCount = 0\n const stream: ParseStream = parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n if (elseCount > 0) {\n return\n }\n\n p = []\n\n const values: (ValueToken | FilteredValueToken)[] = []\n while (!token.tokenizer.end()) {\n values.push(token.tokenizer.readValueOrThrow())\n token.tokenizer.skipBlank()\n if (token.tokenizer.peek() === ',') {\n token.tokenizer.readTo(',')\n } else {\n token.tokenizer.readTo('or')\n }\n }\n this.branches.push({\n values,\n templates: p\n })\n })\n .on('tag:else', () => {\n elseCount++\n p = this.elseTemplates\n })\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: Template) => {\n if (p !== this.elseTemplates || elseCount === 1) {\n p.push(tpl)\n }\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.getText()} not closed`)\n })\n\n stream.start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf))\n let branchHit = false\n for (const branch of this.branches) {\n for (const valueToken of branch.values) {\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf)\n if (equals(target, value)) {\n yield r.renderTemplates(branch.templates, ctx, emitter)\n branchHit = true\n break\n }\n }\n }\n if (!branchHit) {\n yield r.renderTemplates(this.elseTemplates, ctx, emitter)\n }\n }\n\n public * arguments (): Arguments {\n yield this.value\n yield * this.branches.flatMap(b => b.values)\n }\n\n public * children (): Generator {\n const templates = this.branches.flatMap(b => b.templates)\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates)\n }\n return templates\n }\n}\n","import { Liquid, TopLevelToken, TagToken, Tag } from '..'\nimport { isTagToken } from '../util'\n\nexport default class extends Tag {\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(tagToken, remainTokens, liquid)\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endcomment') return\n }\n throw new Error(`tag ${tagToken.getText()} not closed`)\n }\n render () {}\n}\n","import { __assign } from 'tslib'\nimport { ForloopDrop } from '../drop'\nimport { isString, isValueToken, toEnumerable } from '../util'\nimport { TopLevelToken, assert, Liquid, Token, ValueToken, Template, evalQuotedToken, TypeGuards, Tokenizer, evalToken, Hash, Emitter, TagToken, Context, Tag } from '..'\nimport { Parser } from '../parser'\nimport { Argument, Arguments, PartialScope } from '../template'\n\nexport type ParsedFileName = Template[] | Token | string | undefined\n\ntype RenderBinding = { value: ValueToken; alias?: string }\n\nexport default class extends Tag {\n private file: ParsedFileName\n private currentFile?: string\n private hash: Hash\n private with?: RenderBinding\n private forBinding?: RenderBinding\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const tokenizer = this.tokenizer\n this.file = parseFilePath(tokenizer, this.liquid, parser)\n this.currentFile = token.file\n while (!tokenizer.end()) {\n tokenizer.skipBlank()\n const begin = tokenizer.p\n const keyword = tokenizer.readIdentifier()\n if (keyword.content === 'with' || keyword.content === 'for') {\n tokenizer.skipBlank()\n // can be normal key/value pair, like \"with: true\"\n if (tokenizer.peek() !== ':') {\n const value = tokenizer.readValue()\n // can be normal key, like \"with,\"\n if (value) {\n const beforeAs = tokenizer.p\n const asStr = tokenizer.readIdentifier()\n let alias\n if (asStr.content === 'as') alias = tokenizer.readIdentifier()\n else tokenizer.p = beforeAs\n\n const binding: RenderBinding = { value, alias: alias && alias.content }\n if (keyword.content === 'with') this.with = binding\n else this.forBinding = binding\n tokenizer.skipBlank()\n if (tokenizer.peek() === ',') tokenizer.advance()\n continue // matched!\n }\n }\n }\n /**\n * restore cursor if with/for not matched\n */\n tokenizer.p = begin\n break\n }\n this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const { liquid, hash } = this\n const filepath = (yield renderFilePath(this.file, ctx, liquid)) as string\n assert(filepath, () => `illegal file path \"${filepath}\"`)\n\n const childCtx = ctx.spawn()\n const scope = childCtx.bottom()\n __assign(scope, yield hash.render(ctx))\n if (this.with) {\n const { value, alias } = this.with\n scope[alias || filepath] = yield evalToken(value, ctx)\n }\n\n if (this.forBinding) {\n const { value, alias } = this.forBinding\n const collection = toEnumerable(yield evalToken(value, ctx))\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias as string)\n for (const item of collection) {\n scope[alias as string] = item\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)) as Template[]\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter)\n scope['forloop'].next()\n }\n } else {\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)) as Template[]\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter)\n }\n }\n\n public * children (partials: boolean, sync: boolean): Generator {\n if (partials && isString(this.file)) {\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)) as Template[]\n }\n return []\n }\n\n public partialScope (): PartialScope | undefined {\n if (isString(this.file)) {\n const names: Array = Object.keys(this.hash.hash)\n\n if (this.with) {\n const { value, alias } = this.with\n if (isString(alias)) {\n names.push([alias, value])\n } else if (isString(this.file)) {\n names.push([this.file, value])\n }\n }\n\n if (this.forBinding) {\n const { value, alias } = this.forBinding\n if (isString(alias)) {\n names.push([alias, value])\n } else if (isString(this.file)) {\n names.push([this.file, value])\n }\n }\n\n return { name: this.file, isolated: true, scope: names }\n }\n }\n\n public * arguments (): Arguments {\n for (const v of Object.values(this.hash.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n\n if (this.with) {\n const { value } = this.with\n if (isValueToken(value)) {\n yield value\n }\n }\n\n if (this.forBinding) {\n const { value } = this.forBinding\n if (isValueToken(value)) {\n yield value\n }\n }\n }\n}\n\n/**\n * @return null for \"none\",\n * @return Template[] for quoted with tags and/or filters\n * @return Token for expression (not quoted)\n * @throws TypeError if cannot read next token\n */\nexport function parseFilePath (tokenizer: Tokenizer, liquid: Liquid, parser: Parser): ParsedFileName {\n if (liquid.options.dynamicPartials) {\n const file = tokenizer.readValue()\n tokenizer.assert(file, 'illegal file path')\n if (file!.getText() === 'none') return\n if (TypeGuards.isQuotedToken(file)) {\n // for filenames like \"files/{{file}}\", eval as liquid template\n const templates = parser.parse(evalQuotedToken(file))\n return optimize(templates)\n }\n return file\n }\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)]\n const templates = optimize(parser.parseTokens(tokens))\n return templates === 'none' ? undefined : templates\n}\n\nfunction optimize (templates: Template[]): string | Template[] {\n // for filenames like \"files/file.liquid\", extract the string directly\n if (templates.length === 1 && TypeGuards.isHTMLToken(templates[0].token)) return templates[0].token.getContent()\n return templates\n}\n\nexport function * renderFilePath (file: ParsedFileName, ctx: Context, liquid: Liquid): IterableIterator {\n if (typeof file === 'string') return file\n if (Array.isArray(file)) return liquid.renderer.renderTemplates(file, ctx)\n return yield evalToken(file, ctx)\n}\n","import { Template, ValueToken, TopLevelToken, Liquid, Tag, assert, evalToken, Hash, Emitter, TagToken, Context } from '..'\nimport { BlockMode, createScope, Scope } from '../context'\nimport { Parser } from '../parser'\nimport { Argument, Arguments, PartialScope } from '../template'\nimport { isString, isValueToken } from '../util'\nimport { parseFilePath, renderFilePath, ParsedFileName } from './render'\n\nexport default class extends Tag {\n private file: ParsedFileName\n private currentFile?: string\n private withVar?: ValueToken\n private hash: Hash\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const { tokenizer } = token\n this.file = parseFilePath(tokenizer, this.liquid, parser)\n this.currentFile = token.file\n\n const begin = tokenizer.p\n const withStr = tokenizer.readIdentifier()\n if (withStr.content === 'with') {\n tokenizer.skipBlank()\n if (tokenizer.peek() !== ':') {\n this.withVar = tokenizer.readValue()\n } else tokenizer.p = begin\n } else tokenizer.p = begin\n\n this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const { liquid, hash, withVar } = this\n const { renderer } = liquid\n const filepath = (yield renderFilePath(this.file, ctx, liquid)) as string\n assert(filepath, () => `illegal file path \"${filepath}\"`)\n\n const saved = ctx.saveRegister('blocks', 'blockMode')\n ctx.setRegister('blocks', {})\n ctx.setRegister('blockMode', BlockMode.OUTPUT)\n const scope = createScope((yield hash.render(ctx)) as Scope)\n if (withVar) scope[filepath] = yield evalToken(withVar, ctx)\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile)) as Template[]\n ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope)\n yield renderer.renderTemplates(templates, ctx, emitter)\n ctx.pop()\n ctx.restoreRegister(saved)\n }\n\n public * children (partials: boolean, sync: boolean): Generator {\n if (partials && isString(this.file)) {\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)) as Template[]\n }\n return []\n }\n\n public partialScope (): PartialScope | undefined {\n if (isString(this.file)) {\n let names: Array\n\n if (this.liquid.options.jekyllInclude) {\n names = ['include']\n } else {\n names = Object.keys(this.hash.hash)\n if (this.withVar) {\n names.push([this.file, this.withVar])\n }\n }\n\n return { name: this.file, isolated: false, scope: names }\n }\n }\n\n public * arguments (): Arguments {\n yield * Object.values(this.hash.hash).filter(isValueToken)\n\n if (isValueToken(this.file)) {\n yield this.file\n }\n\n if (isValueToken(this.withVar)) {\n yield this.withVar\n }\n }\n}\n","import { Tag, Liquid, TopLevelToken, Emitter, TagToken, Context } from '..'\nimport { IdentifierToken } from '../tokens'\nimport { isNumber, stringify } from '../util'\n\nexport default class extends Tag {\n private identifier: IdentifierToken\n private variable: string\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.identifier = this.tokenizer.readIdentifier()\n this.variable = this.identifier.content\n }\n render (context: Context, emitter: Emitter) {\n const scope = context.environments\n if (!isNumber(scope[this.variable])) {\n scope[this.variable] = 0\n }\n emitter.write(stringify(--scope[this.variable]))\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { TopLevelToken, Liquid, ValueToken, evalToken, Emitter, TagToken, Context, Tag } from '..'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n private candidates: ValueToken[] = []\n private group?: ValueToken\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n const group = this.tokenizer.readValue()\n this.tokenizer.skipBlank()\n\n if (group) {\n if (this.tokenizer.peek() === ':') {\n this.group = group\n this.tokenizer.advance()\n } else this.candidates.push(group)\n }\n\n while (!this.tokenizer.end()) {\n const value = this.tokenizer.readValue()\n if (value) this.candidates.push(value)\n this.tokenizer.readTo(',')\n }\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`)\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const group = (yield evalToken(this.group, ctx)) as ValueToken\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = ctx.getRegister('cycle', {} as Record)\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n return yield evalToken(candidate, ctx)\n }\n\n public * arguments (): Arguments {\n yield * this.candidates\n\n if (this.group) {\n yield this.group\n }\n }\n}\n","import { Liquid, Tag, Value, Emitter, isTruthy, TagToken, TopLevelToken, Context, Template } from '..'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\nimport { assert, assertEmpty } from '../util'\n\nexport default class extends Tag {\n branches: { value: Value, templates: Template[] }[] = []\n elseTemplates: Template[] | undefined\n\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n let p: Template[] = []\n parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n assert(!this.elseTemplates, 'unexpected elsif after else')\n this.branches.push({\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\n templates: (p = [])\n })\n })\n .on('tag:else', tag => {\n assertEmpty(tag.args)\n assert(!this.elseTemplates, 'duplicated else')\n p = this.elseTemplates = []\n })\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop() })\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) })\n .start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n\n for (const { value, templates } of this.branches) {\n const v = yield value.value(ctx, ctx.opts.lenientIf)\n if (isTruthy(v, ctx)) {\n yield r.renderTemplates(templates, ctx, emitter)\n return\n }\n }\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter)\n }\n\n public * children (): Generator {\n const templates = this.branches.flatMap(b => b.templates)\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates)\n }\n return templates\n }\n\n public arguments (): Arguments {\n return this.branches.map(b => b.value)\n }\n}\n","import { isNumber, stringify } from '../util'\nimport { Tag, Liquid, TopLevelToken, Emitter, TagToken, Context } from '..'\nimport { IdentifierToken } from '../tokens'\n\nexport default class extends Tag {\n private identifier: IdentifierToken\n private variable: string\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.identifier = this.tokenizer.readIdentifier()\n this.variable = this.identifier.content\n }\n render (context: Context, emitter: Emitter) {\n const scope = context.environments\n if (!isNumber(scope[this.variable])) {\n scope[this.variable] = 0\n }\n const val = scope[this.variable]\n scope[this.variable]++\n emitter.write(stringify(val))\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { Scope, Template, Liquid, Tag, assert, Emitter, Hash, TagToken, TopLevelToken, Context } from '..'\nimport { BlockMode, createScope } from '../context'\nimport { parseFilePath, renderFilePath, ParsedFileName } from './render'\nimport { BlankDrop } from '../drop'\nimport { Parser } from '../parser'\nimport { Arguments, PartialScope } from '../template'\nimport { isString, isValueToken } from '../util'\n\nexport default class extends Tag {\n args: Hash\n templates: Template[]\n file?: ParsedFileName\n private currentFile?: string\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n this.file = parseFilePath(this.tokenizer, this.liquid, parser)\n this.currentFile = token.file\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator)\n this.templates = parser.parseTokens(remainTokens)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const { liquid, args, file } = this\n const { renderer } = liquid\n if (file === undefined) {\n ctx.setRegister('blockMode', BlockMode.OUTPUT)\n yield renderer.renderTemplates(this.templates, ctx, emitter)\n return\n }\n const filepath = (yield renderFilePath(this.file, ctx, liquid)) as string\n assert(filepath, () => `illegal file path \"${filepath}\"`)\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile)) as Template[]\n\n // render remaining contents and store rendered results\n ctx.setRegister('blockMode', BlockMode.STORE)\n const html = yield renderer.renderTemplates(this.templates, ctx)\n const blocks = ctx.getRegister('blocks', {} as Record)\n\n // set whole content to anonymous block if anonymous doesn't specified\n if (blocks[''] === undefined) blocks[''] = (parent: BlankDrop, emitter: Emitter) => emitter.write(html)\n ctx.setRegister('blockMode', BlockMode.OUTPUT)\n\n // render the layout file use stored blocks\n ctx.push(createScope((yield args.render(ctx)) as Scope))\n yield renderer.renderTemplates(templates, ctx, emitter)\n ctx.pop()\n }\n\n public * children (partials: boolean): Generator {\n const templates = this.templates.slice()\n\n if (partials && isString(this.file)) {\n templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile)) as Template[])\n }\n\n return templates\n }\n\n public * arguments (): Arguments {\n for (const v of Object.values(this.args.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n\n if (isValueToken(this.file)) {\n yield this.file\n }\n }\n\n public partialScope (): PartialScope | undefined {\n if (isString(this.file)) {\n return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) }\n }\n }\n}\n","import { BlockMode, createScope } from '../context'\nimport { isTagToken } from '../util'\nimport { BlockDrop } from '../drop'\nimport { Liquid, TagToken, TopLevelToken, Template, Context, Emitter, Tag } from '..'\nimport { Parser } from '../parser'\n\nexport default class extends Tag {\n block: string\n templates: Template[] = []\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endblock') return\n const template = parser.parseToken(token, remainTokens)\n this.templates.push(template)\n }\n throw new Error(`tag ${token.getText()} not closed`)\n }\n\n * render (ctx: Context, emitter: Emitter) {\n const blockRender = this.getBlockRender(ctx)\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\n ctx.getRegister('blocks', {} as Record)[this.block] = blockRender\n } else {\n yield blockRender(new BlockDrop(), emitter)\n }\n }\n\n private getBlockRender (ctx: Context) {\n const self = this as Tag\n const { liquid, templates } = this\n const renderChild = ctx.getRegister('blocks', {} as Record)[this.block]\n const renderCurrent = function * (superBlock: BlockDrop, emitter: Emitter) {\n const stack: Tag[] = ctx.getRegister('blockStack', [])\n if (stack.includes(self)) throw new Error('block tag cannot be nested')\n\n stack.push(self)\n ctx.push(createScope({ block: superBlock }))\n yield liquid.renderer.renderTemplates(templates, ctx, emitter)\n ctx.pop()\n stack.pop()\n }\n return renderChild\n ? (superBlock: BlockDrop, emitter: Emitter) => renderChild(\n new BlockDrop(\n (emitter: Emitter) => renderCurrent(superBlock, emitter)\n ),\n emitter)\n : renderCurrent\n }\n\n public * children (): Generator {\n return this.templates\n }\n\n public blockScope (): Iterable {\n return ['block']\n }\n}\n","import { Liquid, TagToken, TopLevelToken, Tag } from '..'\nimport { isTagToken } from '../util'\n\nexport default class extends Tag {\n private tokens: TopLevelToken[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(tagToken, remainTokens, liquid)\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endraw') return\n this.tokens.push(token)\n }\n throw new Error(`tag ${tagToken.getText()} not closed`)\n }\n render () {\n return this.tokens.map((token: TopLevelToken) => token.getText()).join('')\n }\n}\n","import { ForloopDrop } from './forloop-drop'\n\nexport class TablerowloopDrop extends ForloopDrop {\n private cols: number\n public constructor (length: number, cols: number, collection: string, variable: string) {\n super(length, collection, variable)\n this.length = length\n this.cols = cols\n }\n public row () {\n return Math.floor(this.i / this.cols) + 1\n }\n public col0 () {\n return (this.i % this.cols)\n }\n public col () {\n return this.col0() + 1\n }\n public col_first () { // eslint-disable-line\n return this.col0() === 0\n }\n public col_last () { // eslint-disable-line\n return this.col() === this.cols\n }\n}\n","import { isValueToken, toEnumerable } from '../util'\nimport { createScope } from '../context/scope'\nimport { ValueToken, Liquid, Tag, evalToken, Emitter, Hash, TagToken, TopLevelToken, Context, Template, ParseStream, FilteredValueToken } from '..'\nimport { TablerowloopDrop } from '../drop/tablerowloop-drop'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n variable: string\n args: Hash\n templates: Template[]\n collection: ValueToken | FilteredValueToken\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n const variable = this.tokenizer.readIdentifier()\n this.tokenizer.skipBlank()\n\n const predicate = this.tokenizer.readIdentifier()\n const collectionToken = this.tokenizer.readValue()\n if (predicate.content !== 'in' || !collectionToken) {\n throw new Error(`illegal tag: ${tagToken.getText()}`)\n }\n\n this.variable = variable.content\n this.collection = collectionToken\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator)\n this.templates = []\n\n let p\n const stream: ParseStream = parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.getText()} not closed`)\n })\n\n stream.start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n let collection = toEnumerable(yield evalToken(this.collection, ctx))\n const args = (yield this.args.render(ctx)) as Record\n const offset = args.offset || 0\n const limit = (args.limit === undefined) ? collection.length : args.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = args.cols || collection.length\n\n const r = this.liquid.renderer\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable)\n const scope = createScope({ tablerowloop })\n ctx.push(scope)\n\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\n scope[this.variable] = collection[idx]\n if (tablerowloop.col0() === 0) {\n if (tablerowloop.row() !== 1) emitter.write('')\n emitter.write(``)\n }\n emitter.write(``)\n yield r.renderTemplates(this.templates, ctx, emitter)\n emitter.write('')\n }\n if (collection.length) emitter.write('')\n ctx.pop()\n }\n\n public * children (): Generator {\n return this.templates\n }\n\n public * arguments (): Arguments {\n yield this.collection\n\n for (const v of Object.values(this.args.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n }\n\n public blockScope (): string[] {\n return [this.variable, 'tablerowloop']\n }\n}\n","import { Liquid, Tag, Value, TopLevelToken, Template, Emitter, isTruthy, isFalsy, Context, TagToken } from '..'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n branches: { value: Value, test: (val: any, ctx: Context) => boolean, templates: Template[] }[] = []\n elseTemplates: Template[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n let p: Template[] = []\n let elseCount = 0\n parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\n test: isFalsy,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n if (elseCount > 0) {\n p = []\n return\n }\n this.branches.push({\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\n test: isTruthy,\n templates: (p = [])\n })\n })\n .on('tag:else', () => {\n elseCount++\n p = this.elseTemplates\n })\n .on('tag:endunless', function () { this.stop() })\n .on('template', (tpl: Template) => {\n if (p !== this.elseTemplates || elseCount === 1) {\n p.push(tpl)\n }\n })\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) })\n .start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n\n for (const { value, test, templates } of this.branches) {\n const v = yield value.value(ctx, ctx.opts.lenientIf)\n if (test(v, ctx)) {\n yield r.renderTemplates(templates, ctx, emitter)\n return\n }\n }\n\n yield r.renderTemplates(this.elseTemplates, ctx, emitter)\n }\n\n public * children (): Generator {\n const children = this.branches.flatMap(b => b.templates)\n if (this.elseTemplates) {\n children.push(...this.elseTemplates)\n }\n return children\n }\n\n public arguments (): Arguments {\n return this.branches.map(b => b.value)\n }\n}\n","import { Context, Emitter, Tag } from '..'\n\nexport default class extends Tag {\n render (ctx: Context, _emitter: Emitter) {\n ctx.breakCalled = true\n }\n}\n","import { Tag, Emitter, Context } from '..'\n\nexport default class extends Tag {\n render (ctx: Context, _emitter: Emitter) {\n ctx.continueCalled = true\n }\n}\n","import { Liquid, TopLevelToken, Emitter, Value, TagToken, Context, Tag } from '..'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n private value?: Value\n\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.tokenizer.skipBlank()\n if (!this.tokenizer.end()) {\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid)\n }\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n if (!this.value) return\n const val = yield this.value.value(ctx, false)\n emitter.write(val)\n }\n\n public * arguments (): Arguments {\n if (this.value) {\n yield this.value\n }\n }\n}\n","import { Template, Emitter, Liquid, TopLevelToken, TagToken, Context, Tag } from '..'\nimport { Parser } from '../parser'\n\nexport default class extends Tag {\n templates: Template[]\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options)\n this.templates = parser.parseTokens(tokens)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter)\n }\n\n public * children (): Generator {\n return this.templates\n }\n}\n","import { TagToken, Liquid, TopLevelToken, Tag } from '..'\n\nexport default class extends Tag {\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(tagToken, remainTokens, liquid)\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\n throw new Error('every line of an inline comment must start with a \\'#\\' character')\n }\n }\n render () { }\n}\n","import AssignTag from './assign'\nimport ForTag from './for'\nimport CaptureTag from './capture'\nimport CaseTag from './case'\nimport CommentTag from './comment'\nimport IncludeTag from './include'\nimport RenderTag from './render'\nimport DecrementTag from './decrement'\nimport CycleTag from './cycle'\nimport IfTag from './if'\nimport IncrementTag from './increment'\nimport LayoutTag from './layout'\nimport BlockTag from './block'\nimport RawTag from './raw'\nimport TablerowTag from './tablerow'\nimport UnlessTag from './unless'\nimport BreakTag from './break'\nimport ContinueTag from './continue'\nimport EchoTag from './echo'\nimport LiquidTag from './liquid'\nimport InlineCommentTag from './inline-comment'\nimport type { TagClass } from '../template/tag'\n\nexport const tags: Record = {\n assign: AssignTag,\n 'for': ForTag,\n capture: CaptureTag,\n 'case': CaseTag,\n comment: CommentTag,\n include: IncludeTag,\n render: RenderTag,\n decrement: DecrementTag,\n increment: IncrementTag,\n cycle: CycleTag,\n 'if': IfTag,\n layout: LayoutTag,\n block: BlockTag,\n raw: RawTag,\n tablerow: TablerowTag,\n unless: UnlessTag,\n 'break': BreakTag,\n 'continue': ContinueTag,\n echo: EchoTag,\n liquid: LiquidTag,\n '#': InlineCommentTag\n}\n\nexport { AssignTag, ForTag, CaptureTag, CaseTag, CommentTag, IncludeTag, RenderTag, DecrementTag, IncrementTag, CycleTag, IfTag, LayoutTag, BlockTag, RawTag, TablerowTag, UnlessTag, BreakTag, ContinueTag, EchoTag, LiquidTag, InlineCommentTag }\n","import { Context } from './context'\nimport { toPromise, toValueSync, isFunction, forOwn, isString, strictUniq } from './util'\nimport { TagClass, createTagClass, TagImplOptions, FilterImplOptions, Template, Value, StaticAnalysisOptions, StaticAnalysis, analyze, analyzeSync, SegmentArray } from './template'\nimport { LookupType } from './fs/loader'\nimport { Render } from './render'\nimport { Parser } from './parser'\nimport { tags } from './tags'\nimport { filters } from './filters'\nimport { LiquidOptions, normalizeDirectoryList, NormalizedFullOptions, normalize, RenderOptions, RenderFileOptions } from './liquid-options'\n\nexport class Liquid {\n public readonly options: NormalizedFullOptions\n public readonly renderer = new Render()\n /**\n * @deprecated will be removed. In tags use `this.parser` instead\n */\n public readonly parser: Parser\n public readonly filters: Record = Object.create(null)\n public readonly tags: Record = Object.create(null)\n\n public constructor (opts: LiquidOptions = {}) {\n this.options = normalize(opts)\n // eslint-disable-next-line deprecation/deprecation\n this.parser = new Parser(this)\n forOwn(tags, (conf: TagClass, name: string) => this.registerTag(name, conf))\n forOwn(filters, (handler: FilterImplOptions, name: string) => this.registerFilter(name, handler))\n }\n public parse (html: string, filepath?: string): Template[] {\n const parser = new Parser(this)\n return parser.parse(html, filepath)\n }\n\n public _render (tpl: Template[], scope: Context | object | undefined, renderOptions: RenderOptions): IterableIterator {\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions, { liquid: this })\n return this.renderer.renderTemplates(tpl, ctx)\n }\n public async render (tpl: Template[], scope?: object, renderOptions?: RenderOptions): Promise {\n return toPromise(this._render(tpl, scope, { ...renderOptions, sync: false }))\n }\n public renderSync (tpl: Template[], scope?: object, renderOptions?: RenderOptions): any {\n return toValueSync(this._render(tpl, scope, { ...renderOptions, sync: true }))\n }\n public renderToNodeStream (tpl: Template[], scope?: object, renderOptions: RenderOptions = {}): NodeJS.ReadableStream {\n const ctx = new Context(scope, this.options, renderOptions, { liquid: this })\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx)\n }\n\n public _parseAndRender (html: string, scope: Context | object | undefined, renderOptions: RenderOptions): IterableIterator {\n const tpl = this.parse(html)\n return this._render(tpl, scope, renderOptions)\n }\n public async parseAndRender (html: string, scope?: Context | object, renderOptions?: RenderOptions): Promise {\n return toPromise(this._parseAndRender(html, scope, { ...renderOptions, sync: false }))\n }\n public parseAndRenderSync (html: string, scope?: Context | object, renderOptions?: RenderOptions): any {\n return toValueSync(this._parseAndRender(html, scope, { ...renderOptions, sync: true }))\n }\n\n public _parsePartialFile (file: string, sync?: boolean, currentFile?: string) {\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile)\n }\n public _parseLayoutFile (file: string, sync?: boolean, currentFile?: string) {\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile)\n }\n public _parseFile (file: string, sync?: boolean, lookupType?: LookupType, currentFile?: string): Generator {\n return new Parser(this).parseFile(file, sync, lookupType, currentFile)\n }\n public async parseFile (file: string, lookupType?: LookupType): Promise {\n return toPromise(new Parser(this).parseFile(file, false, lookupType))\n }\n public parseFileSync (file: string, lookupType?: LookupType): Template[] {\n return toValueSync(new Parser(this).parseFile(file, true, lookupType))\n }\n public * _renderFile (file: string, ctx: Context | object | undefined, renderFileOptions: RenderFileOptions): Generator {\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType)) as Template[]\n return yield this._render(templates, ctx, renderFileOptions)\n }\n public async renderFile (file: string, ctx?: Context | object, renderFileOptions?: RenderFileOptions) {\n return toPromise(this._renderFile(file, ctx, { ...renderFileOptions, sync: false }))\n }\n public renderFileSync (file: string, ctx?: Context | object, renderFileOptions?: RenderFileOptions) {\n return toValueSync(this._renderFile(file, ctx, { ...renderFileOptions, sync: true }))\n }\n public async renderFileToNodeStream (file: string, scope?: object, renderOptions?: RenderOptions) {\n const templates = await this.parseFile(file)\n return this.renderToNodeStream(templates, scope, renderOptions)\n }\n\n public _evalValue (str: string, scope?: object | Context): IterableIterator {\n const value = new Value(str, this)\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, {}, { liquid: this })\n return value.value(ctx)\n }\n public async evalValue (str: string, scope?: object | Context): Promise {\n return toPromise(this._evalValue(str, scope))\n }\n public evalValueSync (str: string, scope?: object | Context): any {\n return toValueSync(this._evalValue(str, scope))\n }\n\n public registerFilter (name: string, filter: FilterImplOptions) {\n this.filters[name] = filter\n }\n public registerTag (name: string, tag: TagClass | TagImplOptions) {\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag)\n }\n public plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n public express () {\n const self = this // eslint-disable-line\n let firstCall = true\n\n return function (this: any, filePath: string, ctx: object, callback: (err: Error | null, rendered: string) => void) {\n if (firstCall) {\n firstCall = false\n const dirs = normalizeDirectoryList(this.root)\n self.options.root.unshift(...dirs)\n self.options.layouts.unshift(...dirs)\n self.options.partials.unshift(...dirs)\n }\n self.renderFile(filePath, ctx).then(html => callback(null, html) as any, callback as any)\n }\n }\n\n public async analyze (template: Template[], options: StaticAnalysisOptions = {}): Promise {\n return analyze(template, options)\n }\n\n public analyzeSync (template: Template[], options: StaticAnalysisOptions = {}): StaticAnalysis {\n return analyzeSync(template, options)\n }\n\n public async parseAndAnalyze (html: string, filename?: string, options: StaticAnalysisOptions = {}): Promise {\n return analyze(this.parse(html, filename), options)\n }\n\n public parseAndAnalyzeSync (html: string, filename?: string, options: StaticAnalysisOptions = {}): StaticAnalysis {\n return analyzeSync(this.parse(html, filename), options)\n }\n\n /** Return an array of all variables without their properties. */\n public async variables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.variables)\n }\n\n /** Return an array of all variables without their properties. */\n public variablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.variables)\n }\n\n /** Return an array of all variables including their properties/paths. */\n public async fullVariables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all variables including their properties/paths. */\n public fullVariablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all variables, each as an array of properties/segments. */\n public async variableSegments (template: string | Template[], options: StaticAnalysisOptions = {}): Promise> {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))))\n }\n\n /** Return an array of all variables, each as an array of properties/segments. */\n public variableSegmentsSync (template: string | Template[], options: StaticAnalysisOptions = {}): Array {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))))\n }\n\n /** Return an array of all expected context variables without their properties. */\n public async globalVariables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.globals)\n }\n\n /** Return an array of all expected context variables without their properties. */\n public globalVariablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.globals)\n }\n\n /** Return an array of all expected context variables including their properties/paths. */\n public async globalFullVariables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all expected context variables including their properties/paths. */\n public globalFullVariablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all expected context variables, each as an array of properties/segments. */\n public async globalVariableSegments (template: string | Template[], options: StaticAnalysisOptions = {}): Promise> {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))))\n }\n\n /** Return an array of all expected context variables, each as an array of properties/segments. */\n public globalVariableSegmentsSync (template: string | Template[], options: StaticAnalysisOptions = {}): Array {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))))\n }\n}\n","import { isFunction } from '../util'\nimport { Hash } from './hash'\nimport { Tag, TagClass, TagRenderReturn } from './tag'\nimport { TagToken, TopLevelToken } from '../tokens'\nimport { Emitter } from '../emitters'\nimport { Context } from '../context'\nimport type { Liquid } from '../liquid'\n\nexport interface TagImplOptions {\n [key: string]: any\n parse?: (this: Tag & TagImplOptions, token: TagToken, remainingTokens: TopLevelToken[]) => void;\n render: (this: Tag & TagImplOptions, ctx: Context, emitter: Emitter, hash: Record) => TagRenderReturn;\n}\n\nexport function createTagClass (options: TagImplOptions): TagClass {\n return class extends Tag {\n constructor (token: TagToken, tokens: TopLevelToken[], liquid: Liquid) {\n super(token, tokens, liquid)\n if (isFunction(options.parse)) {\n options.parse.call(this, token, tokens)\n }\n }\n * render (ctx: Context, emitter: Emitter): TagRenderReturn {\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx)) as Record\n return yield options.render.call(this, ctx, emitter, hash)\n }\n }\n}\n","/* istanbul ignore file */\nexport const version = '[VI]{version}[/VI]'\nexport * as TypeGuards from './util/type-guards'\nexport { toValue, createTrie, Trie, toPromise, toValueSync, assert, LiquidError, ParseError, RenderError, UndefinedVariableError, TokenizationError, AssertionError } from './util'\nexport type { LiquidErrors } from './util/error'\nexport { Drop } from './drop'\nexport type { Comparable } from './drop'\nexport { Emitter } from './emitters'\nexport { defaultOperators, Operators, evalToken, evalQuotedToken, Expression, isFalsy, isTruthy } from './render'\nexport { Context, Scope } from './context'\nexport { Value, Hash, Template, FilterImplOptions, Tag, Filter, Output, Variable, VariableLocation, VariableSegments, Variables, StaticAnalysis, StaticAnalysisOptions, analyze, analyzeSync, Arguments, PartialScope } from './template'\nexport type { TagRenderReturn } from './template'\nexport { Token, TopLevelToken, TagToken, ValueToken } from './tokens'\nexport type { RangeToken, LiteralToken, QuotedToken, PropertyAccessToken, NumberToken, FilteredValueToken } from './tokens'\nexport { TokenKind, Tokenizer, ParseStream, Parser } from './parser'\nexport { filters } from './filters'\nexport * from './tags'\nexport { defaultOptions } from './liquid-options'\nexport type { LiquidOptions, RenderOptions, RenderFileOptions } from './liquid-options'\nexport { FS, LookupType } from './fs'\nexport { Liquid } from './liquid'\n"],"names":["Token","this","input","slice","begin","end","_a","__read","row","col","i","kind","file","Drop","key","context","toString","Object","prototype","toLowerCase","String","hasOwnProperty","isString","value","isFunction","isIterator","val","next","throw","return","stringify","toValue","isNil","isArray","map","join","readArrayElement","arr","index","ownPropertyOnly","length","call","toEnumerable","isObject","Symbol","iterator","Array","from","keys","toArray","valueOf","toNumber","isNumber","isArrayLike","forOwn","obj","iteratee","k","type","range","start","stop","step","push","padStart","str","ch","pad","add","n","repeat","identify","orderedCompare","a","b","caseInsensitiveCompare","argumentsToValue","fn","_i","args","argumentsToNumber","strictUniq","array","seen","Set","array_1","__values","element","JSON","has","_b","TRAIT","__extends","Error","LiquidError","line","lines","msg","token","defineProperty","getPosition","split","Math","max","min","_\r\n .range","lineNumber","rowIndicator","num","_.padStart","text","colIndicator","enumerable","message","stack","originalError","err","_super","_this","name","update","RenderError","tpl","LiquidErrors","errors","s","variableName","TYPES","WORD","BLANK","INLINE_BLANK","isWord","char","code","charCodeAt","assert","predicate","AssertionError","assertEmpty","NullDrop","EmptyDrop","BlankDrop","test","equals","ForloopDrop","collection","variable","SimpleEmitter","html","buffer","KeepingTypeEmitter","BlockDrop","emitter","superBlockRender","isComparable","arg","gt","geq","lt","leq","nil","literalValues","true","false","null","empty","blank","trieCache","WeakMap","createTrie","cached","get","trie","entries","_d","name_1","data","node","c","needBoundary","set","toLiquidAsync","asyncFn","syncFn","syncImpl","sync","toPromise","done","state","then","err_1","toValueSync","rFormat","daysInMonth","d","year","getFullYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","floor","padWidths","e","H","I","j","l","L","m","M","S","U","W","padSpaceChars","getTimezoneOffset","opts","nOffset","abs","h","flags","formatCodes","getShortWeekdayName","A","getLongWeekdayName","getShortMonthName","B","getLongMonthName","toLocaleString","C","parseInt","substring","getHours","getMilliseconds","getMinutes","N","width","Number","memoryLimit","use","p","P","q","date","includes","dateValue","getSeconds","u","w","x","toLocaleDateString","X","toLocaleTimeString","y","Y","z","Z","getTimeZoneName","t","%","strftime","formatStr","match","output","remaining","exec","_c","flagStr","modifier","conversion","convert","flagStr_1","flag","ret","padChar","padWidth","toUpperCase","__spreadArray","some","getDateTimeFormat","Intl","DateTimeFormat","undefined","TIMEZONE_PATTERN","monthNames","monthNamesShort","dayNames","dayNamesShort","LiquidDate","displayDate","getTime","locale","init","timeZone","timezoneOffset","timezoneFixed","timezoneName","resolvedOptions","format","month","weekday","isNaN","options","dateString","hours","offset","sign","minutes","localDateString","utcDateString","localDate","timezone","diff","time","Limiter","count","base","limit","resource","DelimitedToken","contentRange","trimLeft","trimRight","contentBegin","contentEnd","tl","tr","r","trimTagLeft","trimTagRight","tagDelimiterLeft","tagDelimiterRight","valueBegin","valueEnd","TokenKind","Tag","tokenizer","Tokenizer","operators","groupedExpressions","readTagName","skipBlank","trimOutputLeft","trimOutputRight","outputDelimiterLeft","outputDelimiterRight","valueRange","Output","HTMLToken","HTML","content","getText","Word","Literal","literal","operatorPrecedences","==","!=",">","<",">=","<=","contains","not","and","or","operatorTypes","OperatorToken","operator","Operator","props","PropertyAccess","Filter","Hash","rHex","rOct","escapeChar","f","v","hexVal","Quoted","fromCharCode","lhs","rhs","Range","LiquidTagToken","initial","filters","FilteredValue","polyfill","getPerformance","global","performance","window","Render","templates","ctx","StreamedEmitter","Promise","resolve","renderTemplates","error","stream","keepOutputType","renderLimit","check","templates_1","render","write","breakCalled","continueCalled","is","e_1","catchAllErrors","isKeyValuePair","argv","evalToken","_j","_g","_f","handler","apply","liquid","raw","Expression","lenient","operands","postfix","isOperatorToken","pop","result","tokens","ops","tokens_1","getPrecedence","isPropertyAccessToken","prop","_getFromScope","_get","e_4","UndefinedVariableError","isRangeToken","low","high","isFilteredValueToken","lenientIf","evaluate","filterToken","filterImpl","strictFilters","_e","evalQuotedToken","isTruthy","isFalsy","jsTruthy","defaultOperators","indexOf","prev","LRU","cache","Node","head","size","ensureLimit","remove","tail","domResolve","root","path","document","createElement","href","getElementsByTagName","insertBefore","firstChild","resolved","removeChild","filepath","ext","replace","origin","last","url","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","chargeJsonReplacerValue","json","space","_key","default","defaultValue","Map","jsonify","to_integer","inspect","ancestors","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","blocks","out","blocks_1","opener_1","closer","startsWith","delete","MapFS","existsSync","mapping","readFileSync","segments","sep","dir","segment","defaultOptions","layouts","partials","relativeReference","jekyllInclude","keyValueSeparator","extname","fs","dynamicPartials","dateFormat","greedy","preserveTimezones","strictVariables","globals","Infinity","parseLimit","normalize","nameOrFunction","dirname","console","warn","normalizeDirectoryList","outputEscape","misc","list","whiteSpaceCtrl","inRaw","isDelimitedToken","mask","isHTMLToken","isTagToken","charAt","readExpressionTokens","readOperator","operand","readValue","matchTrie","opTrie","info","peek","readExpression","valid","snapshot","readFilters","FilteredValueToken","filter","readFilter","read","readIdentifier","readFilterArg","FilterToken","readTopLevelToken","rawBeginAt","readEndrawOrRawContent","readTagToken","readOutputToken","readHTMLToken","stopStrings","readToDelimiter","TagToken","delimiter","respectQuoted","peekType","readQuoted","rmatch","OutputToken","leftPos","readTo","readLiquidTagToken","pos","TokenizationError","IdentifierToken","pred","id","jekyllStyle","hashes","hash","readHash","readNonEmptyIdentifier","HashToken","readLiteral","readNumber","readGroupOrRange","readProperties","PropertyAccessToken","isBegin","decimalFound","digitFound","NumberToken","advance","literalTrie","LiteralToken","readValueOrThrow","RangeToken","escaped","QuotedToken","htmlStopStrings","htmlStopStringSet","word","pattern","ParseStream","cb","handlers","event","template","trigger","stopRequested","shift","parseToken","TemplateImpl","remainTokens","readHashes","Value","impl","readFilteredValue","getFilter","token_1","getContent","Variable","segmentsString","_visit","segments_1","location","VariableMap","fromEntries","defaultStaticAnalysisOptions","_analyze","visit","scope","arguments","extractVariables","updateVariables","variables","aliased","alias","rootScope","localScope","ident","deleteAlias","locals","children","partialScope","partial","_h","_z","partialScopeNames","isolated","DummyScope","_k","_m","argument","variables_1","setAlias","_o","blockScope","_q","asObject","analyze","__assign","analyzeSync","names","aliases","getAlias","to","isValueToken","extractValueTokenVariables","extractPropertyAccessVariable","isQuotedToken","isNumberToken","isWordToken","RE_PROPERTY","bracketedRoot","buf","LookupType","Loader","currentFile","dirs","candidates","allowed","dirs_1","exists","lookupError","shouldLoadRelative","dirs_2","fallback","roots","prefixes_1","referencedFile","prefix","_referencedFile","bind","containsSync","Parser","readTopLevelTokens","parseTokens","TagClass","tags","isOutputToken","ParseError","Root","loader","tpls","task","_parseFile","taskOrTpl","lookup","parse","readFile","parseFile","_parseFileCached","getKind","Delimited","createScope","create","assign","Context","registers","getRegister","keyValues","forEach","setRegister","environments","scopes","reduce","paths","getSync","findScope","readProperty","InternalUndefinedVariableError","candidate","toLiquid","readJSProperty","liquidMethodMissing","BlockMode","env","renderOptions","at_least","at_most","ceil","divided_by","dividend","divisor","integerArithmetic","minus","plus","modulo","times","amp","pow","scaled","EPSILON","round","rSlugifyDefault","rSlugifyReplacers","pretty","ascii","latin","none","decodeURIComponent","encodeURIComponent","encodeURI","mode","cased","replacer","outputSize","first","reverse","sortBy","property","comparator","values","item","sort","tuple","concat","expectedMatcher","expected","jekyllWhere","include","readScopeValue","arr_1","spawn","matcher","_","filter_exp","itemName","exp","filtered","keyTemplate","array_4","search","search_exp","results","array_2","sum","array_3","clone","unshift","arr_2","items","arr_3","shuffled","random","parseDate","stringify_date","month_type","style","ml","defaultTimezoneOffset","createDateFixedToTimezone","rCJKWord","rNonCJKWord","chars","trimStart","lastIndexOf","trimEnd","trim","replacement","parts","arg1","arg2","o","words","connector","Buffer","isBuffer","byteLength","btoa","TextEncoder","encode","TextDecoder","decode","Uint8Array","atob","bufferToHex","bytes","hex","crypto","subtle","digest","keyStr","encoder","importKey","cryptoKey","htmlFilters","mathFilters","urlFilters","arrayFilters","dateFilters","stringFilters","base64Filters","cryptoFilters","default_1","bottom","identifier","MODIFIERS","renderer","elseTemplates","continueKey","continue","modifiers","orderedFilterParameters","forloop","collection_1","parser","inStr","parseStream","on","tag","tagToken","readVariable","target","branchHit","branches","branch","flatMap","elseCount","renderFilePath","childCtx","with","forBinding","_parsePartialFile","parseFilePath","keyword","beforeAs","binding","TypeGuards.isQuotedToken","optimize","readFileNameTemplate","TypeGuards.isHTMLToken","withVar","saved","saveRegister","OUTPUT","restoreRegister","group","fingerprint","groups","idx","_parseLayoutFile","STORE","parent","blockRender","getBlockRender","block","renderCurrent","superBlock","self","renderChild","TablerowloopDrop","cols","col0","tablerowloop","collectionToken","test_1","_emitter","readLiquidTagTokens","AssignTag","for","ForTag","capture","CaptureTag","case","CaseTag","comment","CommentTag","IncludeTag","RenderTag","decrement","DecrementTag","increment","IncrementTag","cycle","CycleTag","if","IfTag","layout","LayoutTag","BlockTag","RawTag","tablerow","TablerowTag","unless","UnlessTag","break","BreakTag","ContinueTag","echo","EchoTag","LiquidTag","#","InlineCommentTag","Liquid","_render","renderTemplatesToNodeStream","_parseAndRender","Partials","Layouts","lookupType","renderFileOptions","_renderFile","renderToNodeStream","_evalValue","class_1","plugin","firstCall","filePath","callback","renderFile","filename","analysis","conf","registerTag","registerFilter"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/liquidjs/dist/liquid.browser.mjs b/node_modules/liquidjs/dist/liquid.browser.mjs new file mode 100644 index 00000000..0cf4e81c --- /dev/null +++ b/node_modules/liquidjs/dist/liquid.browser.mjs @@ -0,0 +1,5230 @@ +/* + * liquidjs@10.28.0, https://github.com/harttle/liquidjs + * (c) 2016-2026 harttle + * Released under the MIT License. + */ +class Token { + constructor(kind, input, begin, end, file) { + this.kind = kind; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } + getText() { + return this.input.slice(this.begin, this.end); + } + getPosition() { + let [row, col] = [1, 1]; + for (let i = 0; i < this.begin; i++) { + if (this.input[i] === '\n') { + row++; + col = 1; + } + else + col++; + } + return [row, col]; + } + size() { + return this.end - this.begin; + } +} + +class Drop { + liquidMethodMissing(key, context) { + return undefined; + } +} + +const toString$1 = Object.prototype.toString; +const toLowerCase = String.prototype.toLowerCase; +const hasOwnProperty = Object.hasOwnProperty; +function isString(value) { + return typeof value === 'string'; +} +// eslint-disable-next-line @typescript-eslint/ban-types +function isFunction(value) { + return typeof value === 'function'; +} +function isPromise(val) { + return val && isFunction(val.then); +} +function isIterator(val) { + return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return); +} +function stringify(value) { + value = toValue(value); + if (isString(value)) + return value; + if (isNil(value)) + return ''; + if (isArray(value)) + return value.map(x => stringify(x)).join(''); + return String(value); +} +function readArrayElement(arr, index, ownPropertyOnly) { + if (index < 0) + index = arr.length + index; + if (ownPropertyOnly && !hasOwnProperty.call(arr, index)) + return undefined; + return arr[index]; +} +function toEnumerable(val) { + val = toValue(val); + if (isArray(val)) + return val; + if (isString(val) && val.length > 0) + return [val]; + if (isIterable(val)) + return Array.from(val); + if (isObject(val)) + return Object.keys(val).map((key) => [key, val[key]]); + return []; +} +function toArray(val) { + val = toValue(val); + if (isNil(val)) + return []; + if (isArray(val)) + return val; + return [val]; +} +function toValue(value) { + return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value; +} +function toNumber(value) { + return +toValue(value) || 0; +} +function isNumber(value) { + return typeof value === 'number'; +} +function toLiquid(value) { + if (value && isFunction(value.toLiquid)) + return toLiquid(value.toLiquid()); + return value; +} +function isNil(value) { + return value == null; +} +function isUndefined(value) { + return value === undefined; +} +function isArray(value) { + // be compatible with IE 8 + return toString$1.call(value) === '[object Array]'; +} +function isArrayLike(value) { + return value && isNumber(value.length); +} +function isIterable(value) { + return isObject(value) && Symbol.iterator in value; +} +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +function forOwn(obj, iteratee) { + obj = obj || {}; + for (const k in obj) { + if (hasOwnProperty.call(obj, k)) { + if (iteratee(obj[k], k, obj) === false) + break; + } + } + return obj; +} +function last(arr) { + return arr[arr.length - 1]; +} +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +function isObject(value) { + const type = typeof value; + return value !== null && (type === 'object' || type === 'function'); +} +function range(start, stop, step = 1) { + const arr = []; + for (let i = start; i < stop; i += step) { + arr.push(i); + } + return arr; +} +function padStart(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str); +} +function padEnd(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch); +} +function pad(str, length, ch, add) { + str = String(str); + const n = length - str.length; + if (n <= 0) + return str; + return add(str, ch.repeat(n)); +} +function identify(val) { + return val; +} +function changeCase(str) { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z'); + return hasLowerCase ? str.toUpperCase() : str.toLowerCase(); +} +function ellipsis(str, N) { + return str.length > N ? str.slice(0, N - 3) + '...' : str; +} +function orderedCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +// compare string in case-insensitive way, undefined values to the tail +function caseInsensitiveCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + a = toLowerCase.call(a); + b = toLowerCase.call(b); + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +function argumentsToValue(fn) { + return function (...args) { return fn.call(this, ...args.map(toValue)); }; +} +function argumentsToNumber(fn) { + return function (...args) { return fn.call(this, ...args.map(toNumber)); }; +} +/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */ +function* strictUniq(array) { + const seen = new Set(); + for (const element of array) { + const key = JSON.stringify(element); + if (!seen.has(key)) { + seen.add(key); + yield element; + } + } +} + +/** + * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes + */ +const TRAIT = '__liquidClass__'; +class LiquidError extends Error { + constructor(err, token) { + /** + * note: for ES5 targeting, `this` will be replaced by return value of Error(), + * thus everything on `this` will be lost, avoid calling `LiquidError` methods here + */ + super(typeof err === 'string' ? err : err.message); + this.context = ''; + if (typeof err !== 'string') + Object.defineProperty(this, 'originalError', { value: err, enumerable: false }); + Object.defineProperty(this, 'token', { value: token, enumerable: false }); + Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false }); + } + update() { + Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false }); + this.message = mkMessage(this.message, this.token); + this.stack = this.message + '\n' + this.context + + '\n' + this.stack; + if (this.originalError) + this.stack += '\nFrom ' + this.originalError.stack; + } + static is(obj) { + return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError'; + } +} +class TokenizationError extends LiquidError { + constructor(message, token) { + super(message, token); + this.name = 'TokenizationError'; + super.update(); + } +} +class ParseError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'ParseError'; + this.message = err.message; + super.update(); + } +} +class RenderError extends LiquidError { + constructor(err, tpl) { + super(err, tpl.token); + this.name = 'RenderError'; + this.message = err.message; + super.update(); + } + static is(obj) { + return obj.name === 'RenderError'; + } +} +class LiquidErrors extends LiquidError { + constructor(errors) { + super(errors[0], errors[0].token); + this.errors = errors; + this.name = 'LiquidErrors'; + const s = errors.length > 1 ? 's' : ''; + this.message = `${errors.length} error${s} found`; + super.update(); + } + static is(obj) { + return obj.name === 'LiquidErrors'; + } +} +class UndefinedVariableError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'UndefinedVariableError'; + this.message = err.message; + super.update(); + } +} +// only used internally; raised where we don't have token information, +// so it can't be an UndefinedVariableError. +class InternalUndefinedVariableError extends Error { + constructor(variableName) { + super(`undefined variable: ${variableName}`); + this.name = 'InternalUndefinedVariableError'; + this.variableName = variableName; + } +} +class AssertionError extends Error { + constructor(message) { + super(message); + this.name = 'AssertionError'; + this.message = message + ''; + } +} +function mkContext(token) { + const [line, col] = token.getPosition(); + const lines = token.input.split('\n'); + const begin = Math.max(line - 2, 1); + const end = Math.min(line + 3, lines.length); + const context = range(begin, end + 1) + .map(lineNumber => { + const rowIndicator = (lineNumber === line) ? '>> ' : ' '; + const num = padStart(String(lineNumber), String(end).length); + let text = `${rowIndicator}${num}| `; + const colIndicator = lineNumber === line + ? '\n' + padStart('^', col + text.length) + : ''; + text += lines[lineNumber - 1]; + text += colIndicator; + return text; + }) + .join('\n'); + return context; +} +function mkMessage(msg, token) { + if (token.file) + msg += `, file:${token.file}`; + const [line, col] = token.getPosition(); + msg += `, line:${line}, col:${col}`; + return msg; +} + +// **DO NOT CHANGE THIS FILE** +// +// This file is generated by bin/character-gen.js +// bitmask character types to boost performance +const TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; +const WORD = 1; +const BLANK = 4; +const QUOTE = 8; +const INLINE_BLANK = 16; +const NUMBER = 32; +const SIGN = 64; +const PUNCTUATION = 128; +function isWord(char) { + const code = char.charCodeAt(0); + return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD); +} +TYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK; +TYPES[8220] = TYPES[8221] = PUNCTUATION; + +function assert(predicate, message) { + if (!predicate) { + const msg = typeof message === 'function' + ? message() + : (message || `expect ${predicate} to be true`); + throw new AssertionError(msg); + } +} +function assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) { + assert(!predicate, message); +} + +class NullDrop extends Drop { + equals(value) { + return isNil(toValue(value)); + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return null; + } +} + +class EmptyDrop extends Drop { + equals(value) { + if (value instanceof EmptyDrop) + return false; + value = toValue(value); + if (isString(value) || isArray(value)) + return value.length === 0; + if (isObject(value)) + return Object.keys(value).length === 0; + return false; + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return ''; + } + static is(value) { + return value instanceof EmptyDrop; + } +} + +class BlankDrop extends EmptyDrop { + equals(value) { + if (value === false) + return true; + if (isNil(toValue(value))) + return true; + if (isString(value)) + return /^\s*$/.test(value); + return super.equals(value); + } + static is(value) { + return value instanceof BlankDrop; + } +} + +class ForloopDrop extends Drop { + constructor(length, collection, variable) { + super(); + this.i = 0; + this.length = length; + this.name = `${variable}-${collection}`; + } + next() { + this.i++; + } + index0() { + return this.i; + } + index() { + return this.i + 1; + } + first() { + return this.i === 0; + } + last() { + return this.i === this.length - 1; + } + rindex() { + return this.length - this.i; + } + rindex0() { + return this.length - this.i - 1; + } + valueOf() { + return JSON.stringify(this); + } +} + +class SimpleEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + this.buffer += stringify(html); + } +} + +class StreamedEmitter { + constructor() { + this.buffer = ''; + this.stream = null; + throw new Error('streaming not supported in browser'); + } +} + +class KeepingTypeEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + html = toValue(html); + // This will only preserve the type if the value is isolated. + // I.E: + // {{ my-port }} -> 42 + // {{ my-host }}:{{ my-port }} -> 'host:42' + if (typeof html !== 'string' && this.buffer === '') { + this.buffer = html; + } + else { + this.buffer = stringify(this.buffer) + stringify(html); + } + } +} + +class BlockDrop extends Drop { + constructor( + // the block render from layout template + superBlockRender = () => '') { + super(); + this.superBlockRender = superBlockRender; + } + /** + * Provide parent access in child block by + * {{ block.super }} + */ + *super() { + const emitter = new SimpleEmitter(); + yield this.superBlockRender(emitter); + return emitter.buffer; + } +} + +function isComparable(arg) { + return (arg && + isFunction(arg.equals) && + isFunction(arg.gt) && + isFunction(arg.geq) && + isFunction(arg.lt) && + isFunction(arg.leq)); +} + +const nil = new NullDrop(); +const literalValues = { + 'true': true, + 'false': false, + 'nil': nil, + 'null': nil, + 'empty': new EmptyDrop(), + 'blank': new BlankDrop() +}; + +// Tries are built once per input object and reused: the Tokenizer rebuilds them +// on every instantiation, but `input` (operators/literalValues) is a stable +// reference. WeakMap-keying by `input` lets short-lived operator objects (and +// their tries) be garbage collected. The returned trie is treated as read-only +// by callers (matchTrie only reads it); do not mutate it. +const trieCache = new WeakMap(); +function createTrie(input) { + const cached = trieCache.get(input); + if (cached) + return cached; + const trie = {}; + for (const [name, data] of Object.entries(input)) { + let node = trie; + for (let i = 0; i < name.length; i++) { + const c = name[i]; + node[c] = node[c] || {}; + if (i === name.length - 1 && isWord(name[i])) { + node[c].needBoundary = true; + } + node = node[c]; + } + node.data = data; + node.end = true; + } + trieCache.set(input, trie); + return trie; +} + +/****************************************************************************** +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. +***************************************************************************** */ + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function toLiquidAsync(asyncFn, syncFn) { + const syncImpl = syncFn || asyncFn; + return (sync, ...args) => { + return sync ? syncImpl(...args) : asyncFn(...args); + }; +} +// convert an async iterator to a Promise +function toPromise(val) { + return __awaiter(this, void 0, void 0, function* () { + if (!isIterator(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + try { + if (isIterator(value)) + value = toPromise(value); + if (isPromise(value)) + value = yield value; + } + catch (err) { + next = 'throw'; + value = err; + } + } while (!done); + return value; + }); +} +// convert an async iterator to a value in a synchronous manner +function toValueSync(val) { + if (!isIterator(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + if (isIterator(value)) { + try { + value = toValueSync(value); + } + catch (err) { + next = 'throw'; + value = err; + } + } + } while (!done); + return value; +} + +const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/; +// prototype extensions +function daysInMonth(d) { + const feb = isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +} +function getDayOfYear(d) { + let num = 0; + for (let i = 0; i < d.getMonth(); ++i) { + num += daysInMonth(d)[i]; + } + return num + d.getDate(); +} +function getWeekOfYear(d, startDay) { + // Skip to startDay of this week + const now = getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + const jan1 = new Date(d.getFullYear(), 0, 1); + const then = (7 - jan1.getDay() + startDay); + return String(Math.floor((now - then) / 7) + 1); +} +function isLeapYear(d) { + const year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); +} +function ordinal(d) { + const date = d.getDate(); + if ([11, 12, 13].includes(date)) + return 'th'; + switch (date % 10) { + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; + } +} +function century(d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); +} +// default to 0 +const padWidths = { + d: 2, + e: 2, + H: 2, + I: 2, + j: 3, + k: 2, + l: 2, + L: 3, + m: 2, + M: 2, + S: 2, + U: 2, + W: 2 +}; +const padSpaceChars = new Set('aAbBceklpP'); +function getTimezoneOffset(d, opts) { + const nOffset = Math.abs(d.getTimezoneOffset()); + const h = Math.floor(nOffset / 60); + const m = nOffset % 60; + return (d.getTimezoneOffset() > 0 ? '-' : '+') + + padStart(h, 2, '0') + + (opts.flags[':'] ? ':' : '') + + padStart(m, 2, '0'); +} +const formatCodes = { + a: (d) => d.getShortWeekdayName(), + A: (d) => d.getLongWeekdayName(), + b: (d) => d.getShortMonthName(), + B: (d) => d.getLongMonthName(), + c: (d) => d.toLocaleString(), + C: (d) => century(d), + d: (d) => d.getDate(), + e: (d) => d.getDate(), + H: (d) => d.getHours(), + I: (d) => String(d.getHours() % 12 || 12), + j: (d) => getDayOfYear(d), + k: (d) => d.getHours(), + l: (d) => String(d.getHours() % 12 || 12), + L: (d) => d.getMilliseconds(), + m: (d) => d.getMonth() + 1, + M: (d) => d.getMinutes(), + N: (d, opts) => { + var _a; + const width = Number(opts.width) || 9; + const str = padStart(String(d.getMilliseconds()), 3, '0').slice(0, width); + (_a = opts.memoryLimit) === null || _a === void 0 ? void 0 : _a.use(width - str.length); + return padEnd(str, width, '0'); + }, + p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'), + P: (d) => (d.getHours() < 12 ? 'am' : 'pm'), + q: (d) => ordinal(d), + s: (d) => Math.floor(d.dateValue() / 1000), + S: (d) => d.getSeconds(), + u: (d) => d.getDay() || 7, + U: (d) => getWeekOfYear(d, 0), + w: (d) => d.getDay(), + W: (d) => getWeekOfYear(d, 1), + x: (d) => d.toLocaleDateString(), + X: (d) => d.toLocaleTimeString(), + y: (d) => d.getFullYear().toString().slice(2, 4), + Y: (d) => d.getFullYear(), + z: getTimezoneOffset, + Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts), + 't': () => '\t', + 'n': () => '\n', + '%': () => '%' +}; +formatCodes.h = formatCodes.b; +function strftime(d, formatStr, memoryLimit) { + let output = ''; + let remaining = formatStr; + let match; + while ((match = rFormat.exec(remaining))) { + output += remaining.slice(0, match.index); + remaining = remaining.slice(match.index + match[0].length); + output += format(d, match, memoryLimit); + } + return output + remaining; +} +function format(d, match, memoryLimit) { + const [input, flagStr = '', width, modifier, conversion] = match; + const convert = formatCodes[conversion]; + if (!convert) + return input; + const flags = {}; + for (const flag of flagStr) + flags[flag] = true; + let ret = String(convert(d, { flags, width, modifier, memoryLimit })); + let padChar = padSpaceChars.has(conversion) ? ' ' : '0'; + let padWidth = Number(width) || padWidths[conversion] || 0; + if (flags['^']) + ret = ret.toUpperCase(); + else if (flags['#']) + ret = changeCase(ret); + if (flags['_']) + padChar = ' '; + else if (flags['0']) + padChar = '0'; + if (flags['-']) + padWidth = 0; + memoryLimit === null || memoryLimit === void 0 ? void 0 : memoryLimit.use(Number(padWidth) - ret.length); + return padStart(ret, padWidth, padChar); +} + +function getDateTimeFormat() { + return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined); +} + +// one minute in milliseconds +const OneMinute = 60000; +/** + * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS + * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3 + */ +const TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):?(\d{2}))$/; +const monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' +]; +const monthNamesShort = monthNames.map(name => name.slice(0, 3)); +const dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' +]; +const dayNamesShort = dayNames.map(name => name.slice(0, 3)); +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +class LiquidDate { + constructor(init, locale, timezone) { + this.locale = locale; + this.DateTimeFormat = getDateTimeFormat(); + this.date = new Date(init); + this.timezoneFixed = timezone !== undefined; + if (timezone === undefined) { + timezone = this.date.getTimezoneOffset(); + } + this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone; + this.timezoneName = isString(timezone) ? timezone : ''; + const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute; + const time = this.date.getTime() + diff; + this.displayDate = new Date(time); + } + getTime() { + return this.displayDate.getTime(); + } + /** + * The underlying UTC timestamp in milliseconds, unaffected by the display + * timezone. Use this (not `getTime()`) for timezone-invariant values like + * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by + * the display timezone offset so wall-clock getters can delegate to Date. + */ + dateValue() { + return this.date.getTime(); + } + getMilliseconds() { + return this.displayDate.getMilliseconds(); + } + getSeconds() { + return this.displayDate.getSeconds(); + } + getMinutes() { + return this.displayDate.getMinutes(); + } + getHours() { + return this.displayDate.getHours(); + } + getDay() { + return this.displayDate.getDay(); + } + getDate() { + return this.displayDate.getDate(); + } + getMonth() { + return this.displayDate.getMonth(); + } + getFullYear() { + return this.displayDate.getFullYear(); + } + toLocaleString(locale, init) { + if (init === null || init === void 0 ? void 0 : init.timeZone) { + return this.date.toLocaleString(locale, init); + } + return this.displayDate.toLocaleString(locale, init); + } + toLocaleTimeString(locale) { + return this.displayDate.toLocaleTimeString(locale); + } + toLocaleDateString(locale) { + return this.displayDate.toLocaleDateString(locale); + } + getTimezoneOffset() { + return this.timezoneOffset; + } + getTimeZoneName() { + if (this.timezoneFixed) + return this.timezoneName; + if (!this.DateTimeFormat) + return; + return this.DateTimeFormat().resolvedOptions().timeZone; + } + getLongMonthName() { + var _a; + return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()]; + } + getShortMonthName() { + var _a; + return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()]; + } + getLongWeekdayName() { + var _a; + return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()]; + } + getShortWeekdayName() { + var _a; + return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()]; + } + valid() { + return !isNaN(this.getTime()); + } + format(options) { + return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate); + } + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone(dateString, locale) { + const m = dateString.match(TIMEZONE_PATTERN); + // representing a UTC timestamp + if (m && m[1] === 'Z') { + return new LiquidDate(+new Date(dateString), locale, 0); + } + // has a timezone specified + if (m && m[2] && m[3] && m[4]) { + const [, , sign, hours, minutes] = m; + const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10)); + return new LiquidDate(+new Date(dateString), locale, offset); + } + return new LiquidDate(dateString, locale); + } + static getTimezoneOffset(timezoneName, date) { + const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName }); + const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' }); + const localDate = new Date(localDateString); + const utcDate = new Date(utcDateString); + return (+utcDate - +localDate) / (60 * 1000); + } +} + +class Limiter { + constructor(resource, limit) { + this.base = 0; + this.message = `${resource} limit exceeded`; + this.limit = limit; + } + use(count) { + if (+count > 0) { + assert(this.base + +count <= this.limit, this.message); + this.base += +count; + } + } + check(count) { + if (+count > 0) { + assert(+count <= this.limit, this.message); + } + } +} + +class DelimitedToken extends Token { + constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) { + super(kind, input, begin, end, file); + this.trimLeft = false; + this.trimRight = false; + const tl = input[contentBegin] === '-'; + const tr = input[contentEnd - 1] === '-'; + let l = tl ? contentBegin + 1 : contentBegin; + let r = tr ? contentEnd - 1 : contentEnd; + while (l < r && (TYPES[input.charCodeAt(l)] & BLANK)) + l++; + while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK)) + r--; + this.contentRange = [l, r]; + this.trimLeft = tl || trimLeft; + this.trimRight = tr || trimRight; + } + get content() { + return this.input.slice(this.contentRange[0], this.contentRange[1]); + } +} + +class TagToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options; + const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length]; + super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file); + this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions); + this.name = this.tokenizer.readTagName(); + this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`); + this.tokenizer.skipBlank(); + this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + } +} + +class OutputToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options; + const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length]; + super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file); + } +} + +class HTMLToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.HTML, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.trimLeft = 0; + this.trimRight = 0; + } + getContent() { + return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight); + } +} + +class NumberToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Number, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = Number(this.getText()); + } +} + +class IdentifierToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Word, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = this.getText(); + } +} + +class LiteralToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Literal, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.literal = this.getText(); + this.content = literalValues[this.literal]; + } +} + +const operatorPrecedences = { + '==': 2, + '!=': 2, + '>': 2, + '<': 2, + '>=': 2, + '<=': 2, + 'contains': 2, + 'not': 1, + 'and': 0, + 'or': 0 +}; +const operatorTypes = { + '==': 0 /* OperatorType.Binary */, + '!=': 0 /* OperatorType.Binary */, + '>': 0 /* OperatorType.Binary */, + '<': 0 /* OperatorType.Binary */, + '>=': 0 /* OperatorType.Binary */, + '<=': 0 /* OperatorType.Binary */, + 'contains': 0 /* OperatorType.Binary */, + 'not': 1 /* OperatorType.Unary */, + 'and': 0 /* OperatorType.Binary */, + 'or': 0 /* OperatorType.Binary */ +}; +class OperatorToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Operator, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.operator = this.getText(); + } + getPrecedence() { + return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1; + } +} + +class PropertyAccessToken extends Token { + constructor(variable, props, input, begin, end, file) { + super(TokenKind.PropertyAccess, input, begin, end, file); + this.variable = variable; + this.props = props; + } +} + +class FilterToken extends Token { + constructor(name, args, input, begin, end, file) { + super(TokenKind.Filter, input, begin, end, file); + this.name = name; + this.args = args; + } +} + +class HashToken extends Token { + constructor(input, begin, end, name, value, file) { + super(TokenKind.Hash, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.name = name; + this.value = value; + this.file = file; + } +} + +const rHex = /[\da-fA-F]/; +const rOct = /[0-7]/; +const escapeChar = { + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t', + v: '\x0B' +}; +function hexVal(c) { + const code = c.charCodeAt(0); + if (code >= 97) + return code - 87; + if (code >= 65) + return code - 55; + return code - 48; +} +function parseStringLiteral(str) { + let ret = ''; + for (let i = 1; i < str.length - 1; i++) { + if (str[i] !== '\\') { + ret += str[i]; + continue; + } + if (escapeChar[str[i + 1]] !== undefined) { + ret += escapeChar[str[++i]]; + } + else if (str[i + 1] === 'u') { + let val = 0; + let j = i + 2; + while (j <= i + 5 && rHex.test(str[j])) { + val = val * 16 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + else if (!rOct.test(str[i + 1])) { + ret += str[++i]; + } + else { + let j = i + 1; + let val = 0; + while (j <= i + 3 && rOct.test(str[j])) { + val = val * 8 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + } + return ret; +} + +class QuotedToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Quoted, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = parseStringLiteral(this.getText()); + } +} + +class RangeToken extends Token { + constructor(input, begin, end, lhs, rhs, file) { + super(TokenKind.Range, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.lhs = lhs; + this.rhs = rhs; + this.file = file; + } +} + +/** + * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}` + */ +class LiquidTagToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file); + this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions); + this.name = this.tokenizer.readTagName(); + this.tokenizer.assert(this.name, 'illegal liquid tag syntax'); + this.tokenizer.skipBlank(); + } + get args() { + return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + } +} + +/** + * value expression with optional filters + * e.g. + * {% assign foo="bar" | append: "coo" %} + */ +class FilteredValueToken extends Token { + constructor(initial, filters, input, begin, end, file) { + super(TokenKind.FilteredValue, input, begin, end, file); + this.initial = initial; + this.filters = filters; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } +} + +const polyfill = { + now: () => Date.now() +}; +function getPerformance() { + return (typeof global === 'object' && global.performance) || + (typeof window === 'object' && window.performance) || + polyfill; +} + +class Render { + renderTemplatesToNodeStream(templates, ctx) { + const emitter = new StreamedEmitter(); + Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter))) + .then(() => emitter.end(), err => emitter.error(err)); + return emitter.stream; + } + *renderTemplates(templates, ctx, emitter) { + if (!emitter) { + emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter(); + } + ctx.renderLimit.check(getPerformance().now()); + const errors = []; + for (const tpl of templates) { + ctx.renderLimit.check(getPerformance().now()); + try { + // if tpl.render supports emitter, it'll return empty `html` + const html = yield tpl.render(ctx, emitter); + // if not, it'll return an `html`, write to the emitter for it + html && emitter.write(html); + if (ctx.breakCalled || ctx.continueCalled) + break; + } + catch (e) { + const err = LiquidError.is(e) ? e : new RenderError(e, tpl); + if (ctx.opts.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) { + throw new LiquidErrors(errors); + } + return emitter.buffer; + } +} + +function isKeyValuePair(arr) { + return isArray(arr); +} + +class Filter { + constructor(token, options, liquid) { + this.token = token; + this.name = token.name; + this.handler = isFunction(options) + ? options + : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify); + this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw); + this.args = token.args; + this.liquid = liquid; + } + *render(value, context) { + const argv = []; + for (const arg of this.args) { + if (isKeyValuePair(arg)) + argv.push([arg[0], yield evalToken(arg[1], context)]); + else + argv.push(yield evalToken(arg, context)); + } + return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]); + } +} + +class Expression { + constructor(tokens) { + this.postfix = [...toPostfix(tokens)]; + } + *evaluate(ctx, lenient) { + assert(ctx, 'unable to evaluate: context not defined'); + const operands = []; + for (const token of this.postfix) { + if (isOperatorToken(token)) { + const r = operands.pop(); + let result; + if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) { + result = yield ctx.opts.operators[token.operator](r, ctx); + } + else { + const l = operands.pop(); + result = yield ctx.opts.operators[token.operator](l, r, ctx); + } + operands.push(result); + } + else { + operands.push(yield evalToken(token, ctx, lenient)); + } + } + return operands[0]; + } + valid() { + return !!this.postfix.length; + } +} +function* evalToken(token, ctx, lenient = false) { + if (!token) + return; + if ('content' in token) + return token.content; + if (isPropertyAccessToken(token)) + return yield evalPropertyAccessToken(token, ctx, lenient); + if (isRangeToken(token)) + return yield evalRangeToken(token, ctx); + if (isFilteredValueToken(token)) + return yield evalFilteredValueToken(token, ctx, lenient); +} +function* evalFilteredValueToken(token, ctx, lenient) { + assert(ctx.liquid, 'FilteredValueToken evaluation requires liquid instance in context'); + lenient = lenient || (ctx.opts.lenientIf && token.filters.length > 0 && token.filters[0].name === 'default'); + let val = yield token.initial.evaluate(ctx, lenient); + for (const filterToken of token.filters) { + const filterImpl = ctx.liquid.filters[filterToken.name]; + assert(filterImpl || !ctx.liquid.options.strictFilters, () => `undefined filter: ${filterToken.name}`); + const filter = new Filter(filterToken, filterImpl, ctx.liquid); + val = yield filter.render(val, ctx); + } + return val; +} +function* evalPropertyAccessToken(token, ctx, lenient) { + const props = []; + for (const prop of token.props) { + props.push((yield evalToken(prop, ctx, false))); + } + try { + if (token.variable) { + const variable = yield evalToken(token.variable, ctx, lenient); + return yield ctx._getFromScope(variable, props); + } + else { + return yield ctx._get(props); + } + } + catch (e) { + if (lenient && e.name === 'InternalUndefinedVariableError') + return null; + throw (new UndefinedVariableError(e, token)); + } +} +function evalQuotedToken(token) { + return token.content; +} +function* evalRangeToken(token, ctx) { + const low = yield evalToken(token.lhs, ctx); + const high = yield evalToken(token.rhs, ctx); + ctx.memoryLimit.use(high - low + 1); + return range(+low, +high + 1); +} +function* toPostfix(tokens) { + const ops = []; + for (const token of tokens) { + if (isOperatorToken(token)) { + while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) { + yield ops.pop(); + } + ops.push(token); + } + else + yield token; + } + while (ops.length) { + yield ops.pop(); + } +} + +function isTruthy(val, ctx) { + return !isFalsy(val, ctx); +} +function isFalsy(val, ctx) { + val = toValue(val); + if (ctx.opts.jsTruthy) { + return !val; + } + else { + return val === false || undefined === val || val === null; + } +} + +const defaultOperators = { + '==': equals, + '!=': (l, r) => !equals(l, r), + '>': (l, r) => { + if (isComparable(l)) + return l.gt(r); + if (isComparable(r)) + return r.lt(l); + return toValue(l) > toValue(r); + }, + '<': (l, r) => { + if (isComparable(l)) + return l.lt(r); + if (isComparable(r)) + return r.gt(l); + return toValue(l) < toValue(r); + }, + '>=': (l, r) => { + if (isComparable(l)) + return l.geq(r); + if (isComparable(r)) + return r.leq(l); + return toValue(l) >= toValue(r); + }, + '<=': (l, r) => { + if (isComparable(l)) + return l.leq(r); + if (isComparable(r)) + return r.geq(l); + return toValue(l) <= toValue(r); + }, + 'contains': (l, r) => { + l = toValue(l); + if (isArray(l)) + return l.some((i) => equals(i, r)); + if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf)) + return l.indexOf(toValue(r)) > -1; + return false; + }, + 'not': (v, ctx) => isFalsy(toValue(v), ctx), + 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx), + 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx) +}; +function equals(lhs, rhs) { + if (isComparable(lhs)) + return lhs.equals(rhs); + if (isComparable(rhs)) + return rhs.equals(lhs); + lhs = toValue(lhs); + rhs = toValue(rhs); + if (isArray(lhs)) { + return isArray(rhs) && arrayEquals(lhs, rhs); + } + return lhs === rhs; +} +function arrayEquals(lhs, rhs) { + if (lhs.length !== rhs.length) + return false; + return !lhs.some((value, i) => !equals(value, rhs[i])); +} +function arrayIncludes(arr, item) { + return arr.some(value => equals(value, item)); +} + +class Node { + constructor(key, value, next, prev) { + this.key = key; + this.value = value; + this.next = next; + this.prev = prev; + } +} +class LRU { + constructor(limit, size = 0) { + this.limit = limit; + this.size = size; + this.cache = {}; + this.head = new Node('HEAD', null, null, null); + this.tail = new Node('TAIL', null, null, null); + this.head.next = this.tail; + this.tail.prev = this.head; + } + write(key, value) { + if (this.cache[key]) { + this.cache[key].value = value; + } + else { + const node = new Node(key, value, this.head.next, this.head); + this.head.next.prev = node; + this.head.next = node; + this.cache[key] = node; + this.size++; + this.ensureLimit(); + } + } + read(key) { + if (!this.cache[key]) + return; + const { value } = this.cache[key]; + this.remove(key); + this.write(key, value); + return value; + } + remove(key) { + const node = this.cache[key]; + node.prev.next = node.next; + node.next.prev = node.prev; + delete this.cache[key]; + this.size--; + } + clear() { + this.head.next = this.tail; + this.tail.prev = this.head; + this.size = 0; + this.cache = {}; + } + ensureLimit() { + if (this.size > this.limit) + this.remove(this.tail.prev.key); + } +} + +function domResolve(root, path) { + const base = document.createElement('base'); + base.href = root; + const head = document.getElementsByTagName('head')[0]; + head.insertBefore(base, head.firstChild); + const a = document.createElement('a'); + a.href = path; + const resolved = a.href; + head.removeChild(base); + return resolved; +} +function resolve(root, filepath, ext) { + if (root.length && last(root) !== '/') + root += '/'; + const url = domResolve(root, filepath); + return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, (str, origin, path) => { + const last = path.split('/').pop(); + if (/\.\w+$/.test(last)) + return str; + return origin + path + ext; + }); +} +function readFile(url) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.onload = () => { + if (xhr.status >= 200 && xhr.status < 300) { + resolve(xhr.responseText); + } + else { + reject(new Error(xhr.statusText)); + } + }; + xhr.onerror = () => { + reject(new Error('An error occurred whilst receiving the response.')); + }; + xhr.open('GET', url); + xhr.send(); + }); + }); +} +function readFileSync(url) { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(); + if (xhr.status < 200 || xhr.status >= 300) { + throw new Error(xhr.statusText); + } + return xhr.responseText; +} +function exists(filepath) { + return __awaiter(this, void 0, void 0, function* () { + return true; + }); +} +function existsSync(filepath) { + return true; +} +function dirname(filepath) { + return domResolve(filepath, '.'); +} +const sep = '/'; + +var fs = /*#__PURE__*/Object.freeze({ + __proto__: null, + resolve: resolve, + readFile: readFile, + readFileSync: readFileSync, + exists: exists, + existsSync: existsSync, + dirname: dirname, + sep: sep +}); + +function chargeJsonReplacerValue(memoryLimit, val) { + if (typeof val === 'string') { + memoryLimit.use(val.length); + } + else if (val === null || typeof val === 'number' || typeof val === 'boolean') { + memoryLimit.use(JSON.stringify(val).length); + } + else if (Array.isArray(val)) { + memoryLimit.use(val.length + 1); + } + else if (typeof val === 'object') { + memoryLimit.use(2); + } +} +function defaultFilter(value, defaultValue, ...args) { + value = toValue(value); + if (isArray(value) || isString(value)) + return value.length ? value : defaultValue; + if (value === false && (new Map(args)).get('allow_false')) + return false; + return isFalsy(value, this.context) ? defaultValue : value; +} +function json(value, space = 0) { + const memoryLimit = this.context.memoryLimit; + return JSON.stringify(value, (_key, val) => { + chargeJsonReplacerValue(memoryLimit, val); + return val; + }, space); +} +function inspect(value, space = 0) { + const memoryLimit = this.context.memoryLimit; + const ancestors = []; + return JSON.stringify(value, function (_key, value) { + if (typeof value !== 'object' || value === null) { + chargeJsonReplacerValue(memoryLimit, value); + return value; + } + // `this` is the object that value is contained in, i.e., its direct parent. + while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) + ancestors.pop(); + if (ancestors.includes(value)) { + memoryLimit.use('[Circular]'.length); + return '[Circular]'; + } + ancestors.push(value); + chargeJsonReplacerValue(memoryLimit, value); + return value; + }, space); +} +function to_integer(value) { + return Number(value); +} +const raw = { + raw: true, + handler: identify +}; +var misc = { + default: defaultFilter, + raw, + jsonify: json, + to_integer, + json, + inspect +}; + +const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; +function escape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&|<|>|"|'/g, m => escapeMap[m]); +} +function xml_escape(str) { + return escape.call(this, str); +} +function unescape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]); +} +function escape_once(str) { + return escape.call(this, unescape.call(this, str)); +} +function newline_to_br(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, '
\n'); +} +// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex +// equivalent is O(n^2) in V8 on unclosed openers. +function strip_html(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + const blocks = new Map([[''], [''], [''], ['<', '>']]); + let out = ''; + let i = 0; + while (i < str.length) { + const lt = str.indexOf('<', i); + if (lt < 0) + return out + str.slice(i); + out += str.slice(i, lt); + for (const [opener, closer] of blocks) { + if (!str.startsWith(opener, lt)) + continue; + const e = str.indexOf(closer, lt + opener.length); + if (e >= 0) { + i = e + closer.length; + break; + } + blocks.delete(opener); + } + if (i <= lt) + return out + str.slice(lt); + } + return out; +} + +var htmlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + escape: escape, + xml_escape: xml_escape, + escape_once: escape_once, + newline_to_br: newline_to_br, + strip_html: strip_html +}); + +class MapFS { + constructor(mapping) { + this.mapping = mapping; + this.sep = '/'; + } + exists(filepath) { + return __awaiter(this, void 0, void 0, function* () { + return this.existsSync(filepath); + }); + } + existsSync(filepath) { + return !isNil(this.mapping[filepath]); + } + readFile(filepath) { + return __awaiter(this, void 0, void 0, function* () { + return this.readFileSync(filepath); + }); + } + readFileSync(filepath) { + const content = this.mapping[filepath]; + if (isNil(content)) + throw new Error(`ENOENT: ${filepath}`); + return content; + } + dirname(filepath) { + const segments = filepath.split(this.sep); + segments.pop(); + return segments.join(this.sep); + } + resolve(dir, file, ext) { + file += ext; + if (dir === '.') + return file; + const segments = dir.split(/\/+/); + for (const segment of file.split(this.sep)) { + if (segment === '.' || segment === '') + continue; + else if (segment === '..') { + if (segments.length > 1 || segments[0] !== '') + segments.pop(); + } + else + segments.push(segment); + } + return segments.join(this.sep); + } +} + +const defaultOptions = { + root: ['.'], + layouts: ['.'], + partials: ['.'], + relativeReference: true, + jekyllInclude: false, + keyValueSeparator: ':', + cache: undefined, + extname: '', + fs: fs, + dynamicPartials: true, + jsTruthy: false, + dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z', + locale: '', + trimTagRight: false, + trimTagLeft: false, + trimOutputRight: false, + trimOutputLeft: false, + greedy: true, + tagDelimiterLeft: '{%', + tagDelimiterRight: '%}', + outputDelimiterLeft: '{{', + outputDelimiterRight: '}}', + preserveTimezones: false, + strictFilters: false, + strictVariables: false, + ownPropertyOnly: true, + lenientIf: false, + globals: {}, + keepOutputType: false, + operators: defaultOperators, + groupedExpressions: false, + memoryLimit: Infinity, + parseLimit: Infinity, + renderLimit: Infinity +}; +function normalize(options) { + var _a, _b; + if (options.hasOwnProperty('root')) { + if (!options.hasOwnProperty('partials')) + options.partials = options.root; + if (!options.hasOwnProperty('layouts')) + options.layouts = options.root; + } + if (options.hasOwnProperty('cache')) { + let cache; + if (typeof options.cache === 'number') + cache = options.cache > 0 ? new LRU(options.cache) : undefined; + else if (typeof options.cache === 'object') + cache = options.cache; + else + cache = options.cache ? new LRU(1024) : undefined; + options.cache = cache; + } + options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options); + if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) { + console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning'); + options.relativeReference = false; + } + options.root = normalizeDirectoryList(options.root); + options.partials = normalizeDirectoryList(options.partials); + options.layouts = normalizeDirectoryList(options.layouts); + options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape); + if (!options.locale) { + options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US'; + } + if (options.templates) { + options.fs = new MapFS(options.templates); + options.relativeReference = true; + options.root = options.partials = options.layouts = '.'; + } + return options; +} +function getOutputEscapeFunction(nameOrFunction) { + if (nameOrFunction === 'escape') + return escape; + if (nameOrFunction === 'json') + return misc.json; + assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function'); + return nameOrFunction; +} +function normalizeDirectoryList(value) { + let list = []; + if (isArray(value)) + list = value; + if (isString(value)) + list = [value]; + return list; +} + +function whiteSpaceCtrl(tokens, options) { + let inRaw = false; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (!isDelimitedToken(token)) + continue; + if (!inRaw && token.trimLeft) { + trimLeft(tokens[i - 1], options.greedy); + } + if (isTagToken(token)) { + if (token.name === 'raw') + inRaw = true; + else if (token.name === 'endraw') + inRaw = false; + } + if (!inRaw && token.trimRight) { + trimRight(tokens[i + 1], options.greedy); + } + } +} +function trimLeft(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + const mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) + token.trimRight++; +} +function trimRight(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + const mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) + token.trimLeft++; + if (token.input.charAt(token.begin + token.trimLeft) === '\n') + token.trimLeft++; +} + +class Tokenizer { + constructor(input, operators = defaultOptions.operators, file, range, groupedExpressions = false) { + this.input = input; + this.file = file; + this.rawBeginAt = -1; + this.p = range ? range[0] : 0; + this.N = range ? range[1] : input.length; + this.opTrie = createTrie(operators); + this.literalTrie = createTrie(literalValues); + this.groupedExpressions = groupedExpressions; + } + readExpression() { + return new Expression(this.readExpressionTokens()); + } + *readExpressionTokens() { + while (this.p < this.N) { + const operator = this.readOperator(); + if (operator) { + yield operator; + continue; + } + const operand = this.readValue(); + if (operand) { + yield operand; + continue; + } + return; + } + } + readOperator() { + this.skipBlank(); + const end = this.matchTrie(this.opTrie); + if (end === -1) + return; + return new OperatorToken(this.input, this.p, (this.p = end), this.file); + } + matchTrie(trie) { + let node = trie; + let i = this.p; + let info; + while (node[this.input[i]] && i < this.N) { + node = node[this.input[i++]]; + if (node['end']) + info = node; + } + if (!info) + return -1; + if (info['needBoundary'] && isWord(this.peek(i - this.p))) + return -1; + return i; + } + readFilteredValue() { + const begin = this.p; + const initial = this.readExpression(); + this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`); + const filters = this.readFilters(); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + readFilters() { + const filters = []; + while (true) { + const filter = this.readFilter(); + if (!filter) + return filters; + filters.push(filter); + } + } + readFilter() { + this.skipBlank(); + if (this.end()) + return null; + if (this.peek() === ')') + return null; + this.assert(this.read() === '|', `expected "|" before filter`); + const name = this.readIdentifier(); + if (!name.size()) { + this.assert(this.end(), `expected filter name`); + return null; + } + const args = []; + this.skipBlank(); + if (this.peek() === ':') { + do { + ++this.p; + const arg = this.readFilterArg(); + arg && args.push(arg); + this.skipBlank(); + this.assert(this.end() || this.peek() === ',' || this.peek() === '|' || this.peek() === ')', () => `unexpected character ${this.snapshot()}`); + } while (this.peek() === ','); + } + else if (this.peek() === '|' || this.peek() === ')' || this.end()) ; + else { + throw this.error('expected ":" after filter name'); + } + return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file); + } + readFilterArg() { + const key = this.readValue(); + if (!key) + return; + this.skipBlank(); + if (this.peek() !== ':') + return key; + ++this.p; + const value = this.readValue(); + return [key.getText(), value]; + } + readTopLevelTokens(options = defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readTopLevelToken(options); + tokens.push(token); + } + whiteSpaceCtrl(tokens, options); + return tokens; + } + readTopLevelToken(options) { + const { tagDelimiterLeft, outputDelimiterLeft } = options; + if (this.rawBeginAt > -1) + return this.readEndrawOrRawContent(options); + if (this.match(tagDelimiterLeft)) + return this.readTagToken(options); + if (this.match(outputDelimiterLeft)) + return this.readOutputToken(options); + return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]); + } + readHTMLToken(stopStrings) { + const begin = this.p; + while (this.p < this.N) { + if (stopStrings.some(str => this.match(str))) + break; + ++this.p; + } + return new HTMLToken(this.input, begin, this.p, this.file); + } + readTagToken(options) { + const { file, input } = this; + const begin = this.p; + if (this.readToDelimiter(options.tagDelimiterRight) === -1) { + throw this.error(`tag ${this.snapshot(begin)} not closed`, begin); + } + const token = new TagToken(input, begin, this.p, options, file); + if (token.name === 'raw') + this.rawBeginAt = begin; + return token; + } + readToDelimiter(delimiter, respectQuoted = false) { + this.skipBlank(); + while (this.p < this.N) { + if (respectQuoted && (this.peekType() & QUOTE)) { + this.readQuoted(); + continue; + } + ++this.p; + if (this.rmatch(delimiter)) + return this.p; + } + return -1; + } + readOutputToken(options = defaultOptions) { + const { file, input } = this; + const { outputDelimiterRight } = options; + const begin = this.p; + if (this.readToDelimiter(outputDelimiterRight, true) === -1) { + throw this.error(`output ${this.snapshot(begin)} not closed`, begin); + } + return new OutputToken(input, begin, this.p, options, file); + } + readEndrawOrRawContent(options) { + const { tagDelimiterLeft, tagDelimiterRight } = options; + const begin = this.p; + let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + while (this.p < this.N) { + if (this.readIdentifier().getText() !== 'endraw') { + leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + continue; + } + while (this.p <= this.N) { + if (this.rmatch(tagDelimiterRight)) { + const end = this.p; + if (begin === leftPos) { + this.rawBeginAt = -1; + return new TagToken(this.input, begin, end, options, this.file); + } + else { + this.p = leftPos; + return new HTMLToken(this.input, begin, leftPos, this.file); + } + } + if (this.rmatch(tagDelimiterLeft)) + break; + this.p++; + } + } + throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin); + } + readLiquidTagTokens(options = defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readLiquidTagToken(options); + token && tokens.push(token); + } + return tokens; + } + readLiquidTagToken(options) { + this.skipBlank(); + if (this.end()) + return; + const begin = this.p; + this.readToDelimiter('\n'); + const end = this.p; + return new LiquidTagToken(this.input, begin, end, options, this.file); + } + error(msg, pos = this.p) { + return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file)); + } + assert(pred, msg, pos) { + if (!pred) + throw this.error(typeof msg === 'function' ? msg() : msg, pos); + } + snapshot(begin = this.p) { + return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32)); + } + /** + * @deprecated use #readIdentifier instead + */ + readWord() { + return this.readIdentifier(); + } + readIdentifier() { + this.skipBlank(); + const begin = this.p; + while (!this.end() && isWord(this.peek())) + ++this.p; + return new IdentifierToken(this.input, begin, this.p, this.file); + } + readNonEmptyIdentifier() { + const id = this.readIdentifier(); + return id.size() ? id : undefined; + } + readTagName() { + this.skipBlank(); + // Handle inline comment tags + if (this.input[this.p] === '#') + return this.input.slice(this.p, ++this.p); + return this.readIdentifier().getText(); + } + readHashes(jekyllStyle) { + const hashes = []; + while (true) { + const hash = this.readHash(jekyllStyle); + if (!hash) + return hashes; + hashes.push(hash); + } + } + readHash(jekyllStyle) { + this.skipBlank(); + if (this.peek() === ',') + ++this.p; + const begin = this.p; + const name = this.readNonEmptyIdentifier(); + if (!name) + return; + let value; + this.skipBlank(); + const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':'); + if (this.peek() === sep) { + ++this.p; + value = this.readValue(); + } + return new HashToken(this.input, begin, this.p, name, value, this.file); + } + remaining() { + return this.input.slice(this.p, this.N); + } + advance(step = 1) { + this.p += step; + } + end() { + return this.p >= this.N; + } + read() { + return this.input[this.p++]; + } + readTo(end) { + while (this.p < this.N) { + ++this.p; + if (this.rmatch(end)) + return this.p; + } + return -1; + } + readValue() { + this.skipBlank(); + const begin = this.p; + let variable = this.readLiteral() || this.readQuoted() || this.readNumber(); + if (!variable && this.peek() === '(') { + variable = this.readGroupOrRange(); + } + const props = this.readProperties(!variable); + if (!props.length) + return variable; + return new PropertyAccessToken(variable, props, this.input, begin, this.p); + } + readScopeValue() { + this.skipBlank(); + const begin = this.p; + const props = this.readProperties(); + if (!props.length) + return undefined; + return new PropertyAccessToken(undefined, props, this.input, begin, this.p); + } + readProperties(isBegin = true) { + const props = []; + while (true) { + if (this.peek() === '[') { + this.p++; + const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file); + this.assert(this.readTo(']') !== -1, '[ not closed'); + props.push(prop); + continue; + } + if (isBegin && !props.length) { + const prop = this.readNonEmptyIdentifier(); + if (prop) { + props.push(prop); + continue; + } + } + if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax + this.p++; + const prop = this.readNonEmptyIdentifier(); + if (!prop) + break; + props.push(prop); + continue; + } + break; + } + return props; + } + readNumber() { + this.skipBlank(); + let decimalFound = false; + let digitFound = false; + let n = 0; + if (this.peekType() & SIGN) + n++; + while (this.p + n <= this.N) { + if (this.peekType(n) & NUMBER) { + digitFound = true; + n++; + } + else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') { + if (decimalFound || !digitFound) + return; + decimalFound = true; + n++; + } + else + break; + } + if (digitFound && !isWord(this.peek(n))) { + const num = new NumberToken(this.input, this.p, this.p + n, this.file); + this.advance(n); + return num; + } + } + readLiteral() { + this.skipBlank(); + const end = this.matchTrie(this.literalTrie); + if (end === -1) + return; + const literal = new LiteralToken(this.input, this.p, end, this.file); + this.p = end; + return literal; + } + readGroupOrRange() { + this.skipBlank(); + const begin = this.p; + if (this.peek() !== '(') + return; + ++this.p; + const lhs = this.readValueOrThrow(); + this.skipBlank(); + if (this.peek() === '.' && this.peek(1) === '.') { + this.p += 2; + const rhs = this.readValueOrThrow(); + this.skipBlank(); + this.assert(this.read() === ')', 'invalid range syntax'); + return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file); + } + if (this.groupedExpressions) { + const initial = new Expression([lhs, ...this.readExpressionTokens()]); + this.assert(initial.valid(), () => `invalid value expression: ${this.snapshot()}`); + const filters = this.readFilters(); + this.skipBlank(); + this.assert(this.read() === ')', 'unbalanced parentheses'); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + throw this.error('invalid range syntax'); + } + readValueOrThrow() { + const value = this.readValue(); + this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`); + return value; + } + readQuoted() { + this.skipBlank(); + const begin = this.p; + if (!(this.peekType() & QUOTE)) + return; + ++this.p; + let escaped = false; + while (this.p < this.N) { + ++this.p; + if (this.input[this.p - 1] === this.input[begin] && !escaped) + break; + if (escaped) + escaped = false; + else if (this.input[this.p - 1] === '\\') + escaped = true; + } + return new QuotedToken(this.input, begin, this.p, this.file); + } + *readFileNameTemplate(options) { + const { outputDelimiterLeft } = options; + const htmlStopStrings = [',', ' ', '\r', '\n', '\t', outputDelimiterLeft]; + const htmlStopStringSet = new Set(htmlStopStrings); + // break on ',' and ' ', outputDelimiterLeft only stops HTML token + while (this.p < this.N && !htmlStopStringSet.has(this.peek())) { + yield this.match(outputDelimiterLeft) + ? this.readOutputToken(options) + : this.readHTMLToken(htmlStopStrings); + } + } + match(word) { + for (let i = 0; i < word.length; i++) { + if (word[i] !== this.input[this.p + i]) + return false; + } + return true; + } + rmatch(pattern) { + for (let i = 0; i < pattern.length; i++) { + if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) + return false; + } + return true; + } + peekType(n = 0) { + return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)]; + } + peek(n = 0) { + return this.p + n >= this.N ? '' : this.input[this.p + n]; + } + skipBlank() { + while (this.peekType() & BLANK) + ++this.p; + } +} + +class ParseStream { + constructor(tokens, parseToken) { + this.handlers = {}; + this.stopRequested = false; + this.tokens = tokens; + this.parseToken = parseToken; + } + on(name, cb) { + this.handlers[name] = cb; + return this; + } + trigger(event, arg) { + const h = this.handlers[event]; + return h ? (h.call(this, arg), true) : false; + } + start() { + this.trigger('start'); + let token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) { + continue; + } + const template = this.parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + } + stop() { + this.stopRequested = true; + return this; + } +} + +class TemplateImpl { + constructor(token) { + this.token = token; + } +} + +class Tag extends TemplateImpl { + constructor(token, remainTokens, liquid) { + super(token); + this.name = token.name; + this.liquid = liquid; + this.tokenizer = token.tokenizer; + } +} + +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +class Hash { + constructor(input, jekyllStyle) { + this.hash = {}; + const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {}); + for (const hash of tokenizer.readHashes(jekyllStyle)) { + this.hash[hash.name.content] = hash.value; + } + } + *render(ctx) { + const hash = {}; + for (const key of Object.keys(this.hash)) { + hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx); + } + return hash; + } +} + +function createTagClass(options) { + return class extends Tag { + constructor(token, tokens, liquid) { + super(token, tokens, liquid); + if (isFunction(options.parse)) { + options.parse.call(this, token, tokens); + } + } + *render(ctx, emitter) { + const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx)); + return yield options.render.call(this, ctx, emitter, hash); + } + }; +} + +class Value { + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + constructor(input, liquid) { + this.filters = []; + const token = typeof input === 'string' + ? new Tokenizer(input, liquid.options.operators, undefined, undefined, liquid.options.groupedExpressions).readFilteredValue() + : input; + this.initial = token.initial; + this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid)); + } + *value(ctx, lenient) { + lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default'); + let val = yield this.initial.evaluate(ctx, lenient); + for (const filter of this.filters) { + val = yield filter.render(val, ctx); + } + return val; + } + getFilter(liquid, name) { + const impl = liquid.filters[name]; + assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`); + return impl; + } +} + +class Output extends TemplateImpl { + constructor(token, liquid) { + var _a; + super(token); + const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange, liquid.options.groupedExpressions); + this.value = new Value(tokenizer.readFilteredValue(), liquid); + const filters = this.value.filters; + const outputEscape = liquid.options.outputEscape; + if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) { + const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0); + filters.push(new Filter(token, outputEscape, liquid)); + } + } + *render(ctx, emitter) { + const val = yield this.value.value(ctx, false); + emitter.write(val); + } + *arguments() { + yield this.value; + } +} + +class HTML extends TemplateImpl { + constructor(token) { + super(token); + this.str = token.getContent(); + } + *render(ctx, emitter) { + emitter.write(this.str); + } +} + +/** + * A variable's segments and location, which can be coerced to a string. + */ +class Variable { + constructor(segments, location) { + this.segments = segments; + this.location = location; + } + toString() { + return segmentsString(this.segments, true); + } + /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */ + toArray() { + function* _visit(...segments) { + for (const segment of segments) { + if (segment instanceof Variable) { + yield Array.from(_visit(...segment.segments)); + } + else { + yield segment; + } + } + } + return Array.from(_visit(...this.segments)); + } +} +/** + * Group variables by the string representation of their root segment. + */ +class VariableMap { + constructor() { + this.map = new Map(); + } + get(key) { + const k = segmentsString([key.segments[0]]); + if (!this.map.has(k)) { + this.map.set(k, []); + } + return this.map.get(k); + } + has(key) { + return this.map.has(segmentsString([key.segments[0]])); + } + push(variable) { + this.get(variable).push(variable); + } + asObject() { + return Object.fromEntries(this.map); + } +} +const defaultStaticAnalysisOptions = { + partials: true +}; +function* _analyze(templates, partials, sync) { + const variables = new VariableMap(); + const globals = new VariableMap(); + const locals = new VariableMap(); + const rootScope = new DummyScope(new Set()); + // Names of partial templates that we've already analyzed. + const seen = new Set(); + function updateVariables(variable, scope) { + variables.push(variable); + const aliased = scope.alias(variable); + if (aliased !== undefined) { + const root = aliased.segments[0]; + // TODO: What if a a template renders a rendered template? Do we need scope.parent? + if (isString(root) && !rootScope.has(root)) { + globals.push(aliased); + } + } + else { + const root = variable.segments[0]; + if (isString(root) && !scope.has(root)) { + globals.push(variable); + } + } + // Recurse for nested Variables + for (const segment of variable.segments) { + if (segment instanceof Variable) { + updateVariables(segment, scope); + } + } + } + function* visit(template, scope) { + if (template.arguments) { + for (const arg of template.arguments()) { + for (const variable of extractVariables(arg)) { + updateVariables(variable, scope); + } + } + } + if (template.localScope) { + for (const ident of template.localScope()) { + scope.add(ident.content); + scope.deleteAlias(ident.content); + const [row, col] = ident.getPosition(); + locals.push(new Variable([ident.content], { row, col, file: ident.file })); + } + } + if (template.children) { + if (template.partialScope) { + const partial = template.partialScope(); + if (partial === undefined) { + // Layouts, for example, can have children that are not partials. + for (const child of (yield template.children(partials, sync))) { + yield visit(child, scope); + } + return; + } + if (seen.has(partial.name)) + return; + const partialScopeNames = new Set(); + const partialScope = partial.isolated + ? new DummyScope(partialScopeNames) + : scope.push(partialScopeNames); + for (const name of partial.scope) { + if (isString(name)) { + partialScopeNames.add(name); + } + else { + const [alias, argument] = name; + partialScopeNames.add(alias); + const variables = Array.from(extractVariables(argument)); + if (variables.length) { + partialScope.setAlias(alias, variables[0].segments); + } + } + } + for (const child of (yield template.children(partials, sync))) { + yield visit(child, partialScope); + seen.add(partial.name); + } + partialScope.pop(); + } + else { + if (template.blockScope) { + scope.push(new Set(template.blockScope())); + } + for (const child of (yield template.children(partials, sync))) { + yield visit(child, scope); + } + if (template.blockScope) { + scope.pop(); + } + } + } + } + for (const template of templates) { + yield visit(template, rootScope); + } + return { + variables: variables.asObject(), + globals: globals.asObject(), + locals: locals.asObject() + }; +} +/** + * Statically analyze a template and report variable usage. + */ +function analyze(template, options = {}) { + const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options); + return toPromise(_analyze(template, opts.partials, false)); +} +/** + * Statically analyze a template and report variable usage. + */ +function analyzeSync(template, options = {}) { + const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options); + return toValueSync(_analyze(template, opts.partials, true)); +} +/** + * A stack to manage scopes while traversing templates during static analysis. + */ +class DummyScope { + constructor(globals) { + this.stack = [{ names: globals, aliases: new Map() }]; + } + /** Return true if `name` is in scope. */ + has(name) { + for (const scope of this.stack) { + if (scope.names.has(name)) { + return true; + } + } + return false; + } + push(scope) { + this.stack.push({ names: scope, aliases: new Map() }); + return this; + } + pop() { + var _a; + return (_a = this.stack.pop()) === null || _a === void 0 ? void 0 : _a.names; + } + // Add a name to the template scope. + add(name) { + this.stack[0].names.add(name); + } + /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */ + alias(variable) { + const root = variable.segments[0]; + if (!isString(root)) + return undefined; + const alias = this.getAlias(root); + if (alias === undefined) + return undefined; + return new Variable([...alias, ...variable.segments.slice(1)], variable.location); + } + // TODO: `from` could be a path with multiple segments, like `include.x`. + setAlias(from, to) { + this.stack[this.stack.length - 1].aliases.set(from, to); + } + deleteAlias(name) { + this.stack[this.stack.length - 1].aliases.delete(name); + } + getAlias(name) { + for (const scope of this.stack) { + if (scope.aliases.has(name)) { + return scope.aliases.get(name); + } + // If a scope has defined `name`, then it masks aliases in parent scopes. + if (scope.names.has(name)) { + return undefined; + } + } + return undefined; + } +} +function* extractVariables(value) { + if (isValueToken(value)) { + yield* extractValueTokenVariables(value); + } + else if (value instanceof Value) { + yield* extractFilteredValueVariables(value); + } +} +function* extractFilteredValueVariables(value) { + for (const token of value.initial.postfix) { + if (isValueToken(token)) { + yield* extractValueTokenVariables(token); + } + } + for (const filter of value.filters) { + for (const arg of filter.args) { + if (isKeyValuePair(arg) && arg[1]) { + yield* extractValueTokenVariables(arg[1]); + } + else if (isValueToken(arg)) { + yield* extractValueTokenVariables(arg); + } + } + } +} +function* extractValueTokenVariables(token) { + if (isRangeToken(token)) { + yield* extractValueTokenVariables(token.lhs); + yield* extractValueTokenVariables(token.rhs); + } + else if (isFilteredValueToken(token)) { + yield* extractGroupedExpressionTokenVariables(token); + } + else if (isPropertyAccessToken(token)) { + yield extractPropertyAccessVariable(token); + } +} +function* extractGroupedExpressionTokenVariables(token) { + if (!isFilteredValueToken(token)) + return; + for (const t of token.initial.postfix) { + if (isValueToken(t)) + yield* extractValueTokenVariables(t); + } + for (const filter of token.filters) { + for (const arg of filter.args) { + if (isKeyValuePair(arg) && arg[1]) { + yield* extractValueTokenVariables(arg[1]); + } + else if (isValueToken(arg)) { + yield* extractValueTokenVariables(arg); + } + } + } +} +function extractPropertyAccessVariable(token) { + const segments = []; + // token is not guaranteed to have `file` set. We'll try to get it from a prop if not. + let file = token.file; + // Here we're flattening the first segment of a path if it is a nested path. + const root = token.props[0]; + file = file || root.file; + if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) { + segments.push(root.content); + } + else if (isPropertyAccessToken(root)) { + // Flatten paths that start with a nested path. + segments.push(...extractPropertyAccessVariable(root).segments); + } + for (const prop of token.props.slice(1)) { + file = file || prop.file; + if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) { + segments.push(prop.content); + } + else if (isPropertyAccessToken(prop)) { + segments.push(extractPropertyAccessVariable(prop)); + } + } + const [row, col] = token.getPosition(); + return new Variable(segments, { + row, + col, + file + }); +} +// This is used to detect segments that can be represented with dot notation +// when creating a string representation of VariableSegments. +const RE_PROPERTY = /^[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*$/; +/** + * Return a string representation of segments using dot notation where possible. + * @param segments - The property names and array indices that make up a path to a variable. + * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets. + */ +function segmentsString(segments, bracketedRoot = false) { + const buf = []; + const root = segments[0]; + if (isString(root)) { + if (!bracketedRoot || root.match(RE_PROPERTY)) { + buf.push(`${root}`); + } + else { + buf.push(`['${root}']`); + } + } + for (const segment of segments.slice(1)) { + if (segment instanceof Variable) { + buf.push(`[${segmentsString(segment.segments)}]`); + } + else if (isString(segment)) { + if (segment.match(RE_PROPERTY)) { + buf.push(`.${segment}`); + } + else { + buf.push(`['${segment}']`); + } + } + else { + buf.push(`[${segment}]`); + } + } + return buf.join(''); +} + +var LookupType; +(function (LookupType) { + LookupType["Partials"] = "partials"; + LookupType["Layouts"] = "layouts"; + LookupType["Root"] = "root"; +})(LookupType || (LookupType = {})); +class Loader { + constructor(options) { + var _a, _b, _c, _d; + this.options = options; + if (options.relativeReference) { + const sep = options.fs.sep; + assert(sep, '`fs.sep` is required for relative reference'); + const prefixes = ['.' + sep, '..' + sep, './', '../']; + this.shouldLoadRelative = (referencedFile) => prefixes.some(prefix => referencedFile.startsWith(prefix)); + } + else { + this.shouldLoadRelative = (_referencedFile) => false; + } + const fs = options.fs; + this.contains = toLiquidAsync(((_a = fs.contains) === null || _a === void 0 ? void 0 : _a.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return true; })), ((_b = fs.containsSync) === null || _b === void 0 ? void 0 : _b.bind(fs)) || (() => true)); + this.exists = toLiquidAsync(((_c = fs.exists) === null || _c === void 0 ? void 0 : _c.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return false; })), (_d = fs.existsSync) === null || _d === void 0 ? void 0 : _d.bind(fs)); + } + *lookup(file, type, sync, currentFile) { + const dirs = this.options[type]; + for (const filepath of this.candidates(file, dirs, currentFile)) { + let allowed = false; + for (const dir of dirs) { + if (yield this.contains(!!sync, dir, filepath)) { + allowed = true; + break; + } + } + if (!allowed) + continue; + if (yield this.exists(!!sync, filepath)) + return filepath; + } + throw this.lookupError(file, dirs); + } + *candidates(file, dirs, currentFile) { + const { fs, extname } = this.options; + if (this.shouldLoadRelative(file) && currentFile) { + const referenced = fs.resolve(this.dirname(currentFile), file, extname); + yield referenced; + } + for (const dir of dirs) { + const referenced = fs.resolve(dir, file, extname); + yield referenced; + } + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file); + if (filepath !== undefined) + yield filepath; + } + } + dirname(path) { + const fs = this.options.fs; + assert(fs.dirname, '`fs.dirname` is required for relative reference'); + return fs.dirname(path); + } + lookupError(file, roots) { + const err = new Error('ENOENT'); + err.message = `ENOENT: Failed to lookup "${file}" in "${roots}"`; + err.code = 'ENOENT'; + return err; + } +} + +class Parser { + constructor(liquid) { + var _a, _b; + this.liquid = liquid; + this.cache = this.liquid.options.cache; + this.fs = this.liquid.options.fs; + this.parseFile = this.cache ? this._parseFileCached : this._parseFile; + this.loader = new Loader(this.liquid.options); + this.parseLimit = new Limiter('parse length', liquid.options.parseLimit); + this.readFile = toLiquidAsync(((_a = this.fs.readFile) === null || _a === void 0 ? void 0 : _a.bind(this.fs)) || (() => __awaiter(this, void 0, void 0, function* () { throw new Error('readFile not implemented'); })), (_b = this.fs.readFileSync) === null || _b === void 0 ? void 0 : _b.bind(this.fs)); + } + parse(html, filepath) { + html = String(html); + this.parseLimit.use(html.length); + const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath, undefined, this.liquid.options.groupedExpressions); + const tokens = tokenizer.readTopLevelTokens(this.liquid.options); + return this.parseTokens(tokens); + } + parseTokens(tokens) { + let token; + const templates = []; + const errors = []; + while ((token = tokens.shift())) { + try { + templates.push(this.parseToken(token, tokens)); + } + catch (err) { + if (this.liquid.options.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) + throw new LiquidErrors(errors); + return templates; + } + parseToken(token, remainTokens) { + try { + if (isTagToken(token)) { + const TagClass = this.liquid.tags[token.name]; + assert(TagClass, `tag "${token.name}" not found`); + return new TagClass(token, remainTokens, this.liquid, this); + } + if (isOutputToken(token)) { + return new Output(token, this.liquid); + } + return new HTML(token); + } + catch (e) { + if (LiquidError.is(e)) + throw e; + throw new ParseError(e, token); + } + } + parseStream(tokens) { + return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens)); + } + *_parseFileCached(file, sync, type = LookupType.Root, currentFile) { + const cache = this.cache; + const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file; + const tpls = yield cache.read(key); + if (tpls) + return tpls; + const task = this._parseFile(file, sync, type, currentFile); + // sync mode: exec the task and cache the result + // async mode: cache the task before exec + const taskOrTpl = sync ? yield task : toPromise(task); + cache.write(key, taskOrTpl); + // note: concurrent tasks will be reused, cache for failed task is removed until its end + try { + return yield taskOrTpl; + } + catch (err) { + cache.remove(key); + throw err; + } + } + *_parseFile(file, sync, type = LookupType.Root, currentFile) { + const filepath = yield this.loader.lookup(file, type, sync, currentFile); + return this.parse(yield this.readFile(!!sync, filepath), filepath); + } +} + +var TokenKind; +(function (TokenKind) { + TokenKind[TokenKind["Number"] = 1] = "Number"; + TokenKind[TokenKind["Literal"] = 2] = "Literal"; + TokenKind[TokenKind["Tag"] = 4] = "Tag"; + TokenKind[TokenKind["Output"] = 8] = "Output"; + TokenKind[TokenKind["HTML"] = 16] = "HTML"; + TokenKind[TokenKind["Filter"] = 32] = "Filter"; + TokenKind[TokenKind["Hash"] = 64] = "Hash"; + TokenKind[TokenKind["PropertyAccess"] = 128] = "PropertyAccess"; + TokenKind[TokenKind["Word"] = 256] = "Word"; + TokenKind[TokenKind["Range"] = 512] = "Range"; + TokenKind[TokenKind["Quoted"] = 1024] = "Quoted"; + TokenKind[TokenKind["Operator"] = 2048] = "Operator"; + TokenKind[TokenKind["FilteredValue"] = 4096] = "FilteredValue"; + TokenKind[TokenKind["GroupedExpression"] = 8192] = "GroupedExpression"; + TokenKind[TokenKind["Delimited"] = 12] = "Delimited"; +})(TokenKind || (TokenKind = {})); + +function isDelimitedToken(val) { + return !!(getKind(val) & TokenKind.Delimited); +} +function isOperatorToken(val) { + return getKind(val) === TokenKind.Operator; +} +function isHTMLToken(val) { + return getKind(val) === TokenKind.HTML; +} +function isOutputToken(val) { + return getKind(val) === TokenKind.Output; +} +function isTagToken(val) { + return getKind(val) === TokenKind.Tag; +} +function isQuotedToken(val) { + return getKind(val) === TokenKind.Quoted; +} +function isLiteralToken(val) { + return getKind(val) === TokenKind.Literal; +} +function isNumberToken(val) { + return getKind(val) === TokenKind.Number; +} +function isPropertyAccessToken(val) { + return getKind(val) === TokenKind.PropertyAccess; +} +function isWordToken(val) { + return getKind(val) === TokenKind.Word; +} +function isRangeToken(val) { + return getKind(val) === TokenKind.Range; +} +function isFilteredValueToken(val) { + return getKind(val) === TokenKind.FilteredValue; +} +function isValueToken(val) { + // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range | TokenKind.FilteredValue + return (getKind(val) & 5763) > 0; +} +function getKind(val) { + return val ? val.kind : -1; +} + +var typeGuards = /*#__PURE__*/Object.freeze({ + __proto__: null, + isDelimitedToken: isDelimitedToken, + isOperatorToken: isOperatorToken, + isHTMLToken: isHTMLToken, + isOutputToken: isOutputToken, + isTagToken: isTagToken, + isQuotedToken: isQuotedToken, + isLiteralToken: isLiteralToken, + isNumberToken: isNumberToken, + isPropertyAccessToken: isPropertyAccessToken, + isWordToken: isWordToken, + isRangeToken: isRangeToken, + isFilteredValueToken: isFilteredValueToken, + isValueToken: isValueToken +}); + +function createScope(from) { + const scope = Object.create(null); + if (from) + Object.assign(scope, from); + return scope; +} + +class Context { + constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit, liquid } = {}) { + var _a, _b, _c, _d, _e; + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + this.scopes = [createScope()]; + this.registers = {}; + this.breakCalled = false; + this.continueCalled = false; + this.sync = !!renderOptions.sync; + this.opts = opts; + this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals; + this.environments = isObject(env) ? env : Object(env); + this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables; + this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly; + this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit); + this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit)); + this.liquid = liquid; + } + getRegister(key, defaultValue = undefined) { + return (this.registers[key] = this.registers[key] || defaultValue); + } + setRegister(key, value) { + return (this.registers[key] = value); + } + saveRegister(...keys) { + return keys.map(key => [key, this.getRegister(key)]); + } + restoreRegister(keyValues) { + return keyValues.forEach(([key, value]) => this.setRegister(key, value)); + } + getAll() { + return [this.globals, this.environments, ...this.scopes] + .reduce((ctx, val) => __assign(ctx, val), {}); + } + /** + * @deprecated use `_get()` or `getSync()` instead + */ + get(paths) { + return this.getSync(paths); + } + getSync(paths) { + return toValueSync(this._get(paths)); + } + *_get(paths) { + const scope = this.findScope(paths[0]); // first prop should always be a string + return yield this._getFromScope(scope, paths); + } + /** + * @deprecated use `_get()` instead + */ + getFromScope(scope, paths) { + return toValueSync(this._getFromScope(scope, paths)); + } + *_getFromScope(scope, paths, strictVariables = this.strictVariables) { + if (isString(paths)) + paths = paths.split('.'); + for (let i = 0; i < paths.length; i++) { + scope = yield this.readProperty(scope, paths[i]); + if (strictVariables && isUndefined(scope)) { + throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.')); + } + } + return scope; + } + push(ctx) { + return this.scopes.push(ctx); + } + pop() { + return this.scopes.pop(); + } + bottom() { + return this.scopes[0]; + } + spawn(scope = {}) { + return new Context(scope, this.opts, { + sync: this.sync, + globals: this.globals, + strictVariables: this.strictVariables, + ownPropertyOnly: this.ownPropertyOnly + }, { + renderLimit: this.renderLimit, + memoryLimit: this.memoryLimit, + liquid: this.liquid + }); + } + findScope(key) { + for (let i = this.scopes.length - 1; i >= 0; i--) { + const candidate = this.scopes[i]; + if (key in candidate) + return candidate; + } + if (key in this.environments) + return this.environments; + return this.globals; + } + readProperty(obj, key) { + obj = toLiquid(obj); + key = toValue(key); + if (isNil(obj)) + return obj; + if (isArray(obj) && isNumber(key)) + return readArrayElement(obj, key, this.ownPropertyOnly); + const value = readJSProperty(obj, key, this.ownPropertyOnly); + if (value === undefined && obj instanceof Drop) + return obj.liquidMethodMissing(key, this); + if (isFunction(value)) + return value.call(obj); + if (key === 'size') + return readSize(obj); + else if (key === 'first') + return readFirst(obj, this.ownPropertyOnly); + else if (key === 'last') + return readLast(obj, this.ownPropertyOnly); + return value; + } +} +function readJSProperty(obj, key, ownPropertyOnly) { + if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop)) + return undefined; + return obj[key]; +} +function readFirst(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, 0, ownPropertyOnly); + return readJSProperty(obj, 'first', ownPropertyOnly); +} +function readLast(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, -1, ownPropertyOnly); + return readJSProperty(obj, 'last', ownPropertyOnly); +} +function readSize(obj) { + if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined) + return obj['size']; + if (isArray(obj) || isString(obj)) + return obj.length; + if (typeof obj === 'object') + return Object.keys(obj).length; +} + +var BlockMode; +(function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; +})(BlockMode || (BlockMode = {})); + +const abs = argumentsToNumber(Math.abs); +const at_least = argumentsToNumber(Math.max); +const at_most = argumentsToNumber(Math.min); +const ceil = argumentsToNumber(Math.ceil); +const divided_by = argumentsToNumber((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor); +const floor = argumentsToNumber(Math.floor); +const minus = argumentsToNumber((v, arg) => v - arg); +const plus = argumentsToNumber((lhs, rhs) => lhs + rhs); +const modulo = argumentsToNumber((v, arg) => ((v % arg) + arg) % arg); +const times = argumentsToNumber((v, arg) => v * arg); +function round(v, arg = 0) { + v = toNumber(v); + arg = toNumber(arg); + const amp = Math.pow(10, arg); + const scaled = (v * amp) * (1 + Number.EPSILON); + return Math.round(scaled) / amp; +} + +var mathFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + abs: abs, + at_least: at_least, + at_most: at_most, + ceil: ceil, + divided_by: divided_by, + floor: floor, + minus: minus, + plus: plus, + modulo: modulo, + times: times, + round: round +}); + +const url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\+/g, ' '); +const url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+'); +const cgi_escape = (x) => encodeURIComponent(stringify(x)) + .replace(/%20/g, '+') + .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase()); +const uri_escape = (x) => encodeURI(stringify(x)) + .replace(/%5B/g, '[') + .replace(/%5D/g, ']'); +const rSlugifyDefault = /[^\p{M}\p{L}\p{Nd}]+/ug; +const rSlugifyReplacers = { + 'raw': /\s+/g, + 'default': rSlugifyDefault, + 'pretty': /[^\p{M}\p{L}\p{Nd}._~!$&'()+,;=@]+/ug, + 'ascii': /[^A-Za-z0-9]+/g, + 'latin': rSlugifyDefault, + 'none': null +}; +function slugify(str, mode = 'default', cased = false) { + str = stringify(str); + const replacer = rSlugifyReplacers[mode]; + if (replacer) { + if (mode === 'latin') + str = removeAccents(str); + str = str.replace(replacer, '-').replace(/^-|-$/g, ''); + } + return cased ? str : str.toLowerCase(); +} +function removeAccents(str) { + return str.replace(/[àáâãäå]/g, 'a') + .replace(/[æ]/g, 'ae') + .replace(/[ç]/g, 'c') + .replace(/[èéêë]/g, 'e') + .replace(/[ìíîï]/g, 'i') + .replace(/[ð]/g, 'd') + .replace(/[ñ]/g, 'n') + .replace(/[òóôõöø]/g, 'o') + .replace(/[ùúûü]/g, 'u') + .replace(/[ýÿ]/g, 'y') + .replace(/[ß]/g, 'ss') + .replace(/[œ]/g, 'oe') + .replace(/[þ]/g, 'th') + .replace(/[ẞ]/g, 'SS') + .replace(/[Œ]/g, 'OE') + .replace(/[Þ]/g, 'TH'); +} + +var urlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + url_decode: url_decode, + url_encode: url_encode, + cgi_escape: cgi_escape, + uri_escape: uri_escape, + slugify: slugify +}); + +const join = argumentsToValue(function (v, arg) { + const array = toArray(v); + const sep = isNil(arg) ? ' ' : stringify(arg); + let outputSize = sep.length * Math.max(array.length - 1, 0); + for (let i = 0; i < array.length; i++) + outputSize += String(array[i]).length; + this.context.memoryLimit.use(outputSize); + return Array.prototype.join.call(array, sep); +}); +const last$1 = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, -1, this.context.ownPropertyOnly) : ''; +}); +const first = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, 0, this.context.ownPropertyOnly) : ''; +}); +const reverse = argumentsToValue(function (v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + return [...array].reverse(); +}); +function* sortBy(arr, property, comparator) { + const values = []; + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + values.push([ + item, + property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item + ]); + } + return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0]); +} +function* sort(arr, property) { + return yield* sortBy.call(this, arr, property, orderedCompare); +} +function* sort_natural(arr, property) { + return yield* sortBy.call(this, arr, property, caseInsensitiveCompare); +} +const size = (v) => (v && v.length) || 0; +function* map(arr, property) { + const results = []; + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + results.push(yield this.context._getFromScope(item, stringify(property), false)); + } + return results; +} +function* sum(arr, property) { + let sum = 0; + const array = toArray(arr); + for (const item of array) { + const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item); + sum += Number.isNaN(data) ? 0 : data; + } + return sum; +} +function compact(arr) { + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + return Array.prototype.filter.call(array, x => !isNil(toValue(x))); +} +function concat(v, arg = []) { + const lhs = toArray(v); + const rhs = toArray(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return Array.prototype.concat.call(lhs, rhs); +} +function push(v, arg) { + return concat.call(this, v, [arg]); +} +function unshift(v, arg) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.unshift(arg); + return clone; +} +function pop(v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.pop(); + return clone; +} +function shift(v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.shift(); + return clone; +} +function slice(v, begin, length = 1) { + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + begin = begin < 0 ? v.length + begin : begin; + if (begin < 0 || length < 0) + return isArray(v) ? [] : ''; + this.context.memoryLimit.use(length); + return isArray(v) + ? Array.prototype.slice.call(v, begin, begin + length) + : String.prototype.slice.call(v, begin, begin + length); +} +function expectedMatcher(expected) { + if (this.context.opts.jekyllWhere) { + return (v) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected)); + } + else if (expected === undefined) { + return (v) => isTruthy(v, this.context); + } + else { + return (v) => equals(v, expected); + } +} +function* filter(include, arr, property, expected) { + const values = []; + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + const token = new Tokenizer(stringify(property)).readScopeValue(); + for (const item of arr) { + values.push(yield evalToken(token, this.context.spawn(item))); + } + const matcher = expectedMatcher.call(this, expected); + return Array.prototype.filter.call(arr, (_, i) => matcher(values[i]) === include); +} +function* filter_exp(include, arr, itemName, exp) { + const filtered = []; + const keyTemplate = new Value(stringify(exp), this.liquid); + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + this.context.push({ [itemName]: item }); + const value = yield keyTemplate.value(this.context); + this.context.pop(); + if (value === include) + filtered.push(item); + } + return filtered; +} +function* where(arr, property, expected) { + return yield* filter.call(this, true, arr, property, expected); +} +function* reject(arr, property, expected) { + return yield* filter.call(this, false, arr, property, expected); +} +function* where_exp(arr, itemName, exp) { + return yield* filter_exp.call(this, true, arr, itemName, exp); +} +function* reject_exp(arr, itemName, exp) { + return yield* filter_exp.call(this, false, arr, itemName, exp); +} +function* group_by(arr, property) { + const map = new Map(); + arr = toEnumerable(arr); + const token = new Tokenizer(stringify(property)).readScopeValue(); + this.context.memoryLimit.use(arr.length); + for (const item of arr) { + const key = yield evalToken(token, this.context.spawn(item)); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + } + return [...map.entries()].map(([name, items]) => ({ name, items })); +} +function* group_by_exp(arr, itemName, exp) { + const map = new Map(); + const keyTemplate = new Value(stringify(exp), this.liquid); + arr = toEnumerable(arr); + this.context.memoryLimit.use(arr.length); + for (const item of arr) { + this.context.push({ [itemName]: item }); + const key = yield keyTemplate.value(this.context); + this.context.pop(); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + } + return [...map.entries()].map(([name, items]) => ({ name, items })); +} +function* search(arr, property, expected) { + const token = new Tokenizer(stringify(property)).readScopeValue(); + const array = toArray(arr); + const matcher = expectedMatcher.call(this, expected); + for (let index = 0; index < array.length; index++) { + const value = yield evalToken(token, this.context.spawn(array[index])); + if (matcher(value)) + return [index, array[index]]; + } +} +function* search_exp(arr, itemName, exp) { + const predicate = new Value(stringify(exp), this.liquid); + const array = toArray(arr); + for (let index = 0; index < array.length; index++) { + this.context.push({ [itemName]: array[index] }); + const value = yield predicate.value(this.context); + this.context.pop(); + if (value) + return [index, array[index]]; + } +} +function* has(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return !!result; +} +function* has_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return !!result; +} +function* find_index(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return result ? result[0] : undefined; +} +function* find_index_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return result ? result[0] : undefined; +} +function* find(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return result ? result[1] : undefined; +} +function* find_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return result ? result[1] : undefined; +} +function uniq(arr) { + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + return [...new Set(arr)]; +} +function sample(v, count = 1) { + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + this.context.memoryLimit.use(v.length); + const shuffled = [...v].sort(() => Math.random() - 0.5); + if (count === 1) + return shuffled[0]; + return shuffled.slice(0, count); +} + +var arrayFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + join: join, + last: last$1, + first: first, + reverse: reverse, + sort: sort, + sort_natural: sort_natural, + size: size, + map: map, + sum: sum, + compact: compact, + concat: concat, + push: push, + unshift: unshift, + pop: pop, + shift: shift, + slice: slice, + where: where, + reject: reject, + where_exp: where_exp, + reject_exp: reject_exp, + group_by: group_by, + group_by_exp: group_by_exp, + has: has, + has_exp: has_exp, + find_index: find_index, + find_index_exp: find_index_exp, + find: find, + find_exp: find_exp, + uniq: uniq, + sample: sample +}); + +function date(v, format, timezoneOffset) { + var _a, _b; + const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _b !== void 0 ? _b : 0); + this.context.memoryLimit.use(size); + const date = parseDate(v, this.context.opts, timezoneOffset); + if (!date) + return v; + format = toValue(format); + format = isNil(format) ? this.context.opts.dateFormat : stringify(format); + this.context.memoryLimit.use(format.length); + return strftime(date, format, this.context.memoryLimit); +} +function date_to_xmlschema(v) { + return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z'); +} +function date_to_rfc822(v) { + return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z'); +} +function date_to_string(v, type, style) { + return stringify_date.call(this, v, '%b', type, style); +} +function date_to_long_string(v, type, style) { + return stringify_date.call(this, v, '%B', type, style); +} +function stringify_date(v, month_type, type, style) { + const date = parseDate(v, this.context.opts); + if (!date) + return v; + const ml = this.context.memoryLimit; + if (type === 'ordinal') { + const d = date.getDate(); + return style === 'US' + ? strftime(date, `${month_type} ${d}%q, %Y`, ml) + : strftime(date, `${d}%q ${month_type} %Y`, ml); + } + return strftime(date, `%d ${month_type} %Y`, ml); +} +function parseDate(v, opts, timezoneOffset) { + let date; + const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset; + const locale = opts.locale; + v = toValue(v); + if (isNil(v)) { + return undefined; + } + else if (v === 'now' || v === 'today') { + date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset); + } + else if (isNumber(v)) { + date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset); + } + else if (isString(v)) { + if (/^\d+$/.test(v)) { + date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset); + } + else if (opts.preserveTimezones && timezoneOffset === undefined) { + date = LiquidDate.createDateFixedToTimezone(v, locale); + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + return date.valid() ? date : undefined; +} + +var dateFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + date: date, + date_to_xmlschema: date_to_xmlschema, + date_to_rfc822: date_to_rfc822, + date_to_string: date_to_string, + date_to_long_string: date_to_long_string +}); + +/** + * String related filters + * + * * prefer stringify() to String() since `undefined`, `null` should eval '' + */ +const rCJKWord = /[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF]/gu; +// Word boundary followed by word characters (for detecting words) +const rNonCJKWord = /[^\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF\s]+/gu; +function append(v, arg) { + assert(arguments.length === 2, 'append expect 2 arguments'); + const lhs = stringify(v); + const rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return lhs + rhs; +} +function prepend(v, arg) { + assert(arguments.length === 2, 'prepend expect 2 arguments'); + const lhs = stringify(v); + const rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return rhs + lhs; +} +function lstrip(v, chars) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (let i = 0, set = new Set(chars); i < str.length; i++) { + if (!set.has(str[i])) + return str.slice(i); + } + return ''; + } + return str.trimStart(); +} +function downcase(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.toLowerCase(); +} +function upcase(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return stringify(str).toUpperCase(); +} +function remove(v, arg) { + const str = stringify(v); + arg = stringify(arg); + this.context.memoryLimit.use(str.length + arg.length); + return str.split(arg).join(''); +} +function remove_first(v, l) { + const str = stringify(v); + l = stringify(l); + this.context.memoryLimit.use(str.length + l.length); + return str.replace(l, ''); +} +function remove_last(v, l) { + const str = stringify(v); + const pattern = stringify(l); + this.context.memoryLimit.use(str.length + pattern.length); + const index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + str.substring(index + pattern.length); +} +function rstrip(str, chars) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) { + if (!set.has(str[i])) + return str.slice(0, i + 1); + } + return ''; + } + return str.trimEnd(); +} +function split(v, arg) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + const arr = str.split(stringify(arg)); + // align to ruby split, which is the behavior of shopify/liquid + // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split + while (arr.length && arr[arr.length - 1] === '') + arr.pop(); + return arr; +} +function strip(v, chars) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + const set = new Set(stringify(chars)); + this.context.memoryLimit.use(set.size); + let i = 0; + let j = str.length - 1; + while (set.has(str[i])) + i++; + while (j >= i && set.has(str[j])) + j--; + return str.slice(i, j + 1); + } + return str.trim(); +} +function strip_newlines(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, ''); +} +function capitalize(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +} +function replace(v, pattern, replacement) { + const str = stringify(v); + pattern = stringify(pattern); + replacement = stringify(replacement); + const parts = str.split(pattern); + const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length); + this.context.memoryLimit.use(outputSize); + return parts.join(replacement); +} +function replace_first(v, arg1, arg2) { + const str = stringify(v); + arg1 = stringify(arg1); + arg2 = stringify(arg2); + this.context.memoryLimit.use(str.length + arg1.length + arg2.length); + return str.replace(arg1, () => arg2); +} +function replace_last(v, arg1, arg2) { + const str = stringify(v); + const pattern = stringify(arg1); + const replacement = stringify(arg2); + this.context.memoryLimit.use(str.length + pattern.length + replacement.length); + const index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + replacement + str.substring(index + pattern.length); +} +function truncate(v, l = 50, o = '...') { + const str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + if (str.length <= l) + return v; + return str.substring(0, l - o.length) + o; +} +function truncatewords(v, words = 15, o = '...') { + const str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + const arr = str.split(/\s+/); + if (words <= 0) + words = 1; + let ret = arr.slice(0, words).join(' '); + if (arr.length >= words) + ret += o; + return ret; +} +function normalize_whitespace(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\s+/g, ' '); +} +function number_of_words(input, mode) { + const str = stringify(input); + this.context.memoryLimit.use(str.length); + input = str.trim(); + if (!input) + return 0; + switch (mode) { + case 'cjk': + // Count CJK characters and words + return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length; + case 'auto': + // Count CJK characters, if none, count words + return rCJKWord.test(input) + ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length + : input.split(/\s+/).length; + default: + // Count words only + return input.split(/\s+/).length; + } +} +function array_to_sentence_string(array, connector = 'and') { + connector = stringify(connector); + let outputSize = connector.length + array.length * 2; + for (let i = 0; i < array.length; i++) + outputSize += stringify(array[i]).length; + this.context.memoryLimit.use(outputSize); + switch (array.length) { + case 0: + return ''; + case 1: + return array[0]; + case 2: + return `${array[0]} ${connector} ${array[1]}`; + default: + return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`; + } +} + +var stringFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + append: append, + prepend: prepend, + lstrip: lstrip, + downcase: downcase, + upcase: upcase, + remove: remove, + remove_first: remove_first, + remove_last: remove_last, + rstrip: rstrip, + split: split, + strip: strip, + strip_newlines: strip_newlines, + capitalize: capitalize, + replace: replace, + replace_first: replace_first, + replace_last: replace_last, + truncate: truncate, + truncatewords: truncatewords, + normalize_whitespace: normalize_whitespace, + number_of_words: number_of_words, + array_to_sentence_string: array_to_sentence_string +}); + +function base64Encode(str) { + return btoa(String.fromCharCode(...new TextEncoder().encode(str))); +} +function base64Decode(str) { + return new TextDecoder().decode(Uint8Array.from(atob(str), c => c.charCodeAt(0))); +} + +/** + * Base64 related filters + * + * Implements base64_encode and base64_decode filters for Shopify compatibility + */ +function base64_encode(value) { + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + this.context.memoryLimit.use(value.byteLength); + return value.toString('base64'); + } + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Encode(str); +} +function base64_decode(value) { + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Decode(str); +} + +var base64Filters = /*#__PURE__*/Object.freeze({ + __proto__: null, + base64_encode: base64_encode, + base64_decode: base64_decode +}); + +function bufferToHex(buffer) { + const bytes = new Uint8Array(buffer); + let hex = ''; + for (let i = 0; i < bytes.length; i++) { + hex += bytes[i].toString(16).padStart(2, '0'); + } + return hex; +} +function sha256(str) { + return __awaiter(this, void 0, void 0, function* () { + const data = new TextEncoder().encode(str); + const digest = yield crypto.subtle.digest('SHA-256', data); + return bufferToHex(digest); + }); +} +function hmacSha256(str, key) { + return __awaiter(this, void 0, void 0, function* () { + const encoder = new TextEncoder(); + const cryptoKey = yield crypto.subtle.importKey('raw', encoder.encode(key), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']); + const signature = yield crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(str)); + return bufferToHex(signature); + }); +} + +/** + * Crypto related filters + * + * Implements sha256 and hmac_sha256 filters for Shopify compatibility + */ +function sha256$1(value) { + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return sha256(str); +} +function hmac_sha256(value, key) { + const str = stringify(value); + const keyStr = stringify(key); + this.context.memoryLimit.use(str.length + keyStr.length); + return hmacSha256(str, keyStr); +} + +var cryptoFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + sha256: sha256$1, + hmac_sha256: hmac_sha256 +}); + +const filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), base64Filters), cryptoFilters), misc); + +class AssignTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.key = this.identifier.content; + this.tokenizer.assert(this.key, 'expected variable name'); + this.tokenizer.skipBlank(); + this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected "="'); + this.tokenizer.advance(); + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + } + *render(ctx) { + ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf); + } + *arguments() { + yield this.value; + } + *localScope() { + yield this.identifier; + } +} + +const MODIFIERS = ['offset', 'limit', 'reversed']; +class ForTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const variable = this.tokenizer.readIdentifier(); + const inStr = this.tokenizer.readIdentifier(); + const collection = this.tokenizer.readValue(); + if (!variable.size() || inStr.content !== 'in' || !collection) { + throw new Error(`illegal tag: ${token.getText()}`); + } + this.variable = variable.content; + this.collection = collection; + this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = []; + this.elseTemplates = []; + let p; + const stream = parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; }) + .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); }); + stream.start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + let collection = toEnumerable(yield evalToken(this.collection, ctx)); + if (!collection.length) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + return; + } + const continueKey = 'continue-' + this.variable + '-' + this.collection.getText(); + ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) })); + const hash = (yield this.hash.render(ctx)); + ctx.pop(); + const modifiers = this.liquid.options.orderedFilterParameters + ? Object.keys(hash).filter(x => MODIFIERS.includes(x)) + : MODIFIERS.filter(x => hash[x] !== undefined); + collection = modifiers.reduce((collection, modifier) => { + if (modifier === 'offset') + return offset(collection, hash['offset']); + if (modifier === 'limit') + return limit(collection, hash['limit']); + return reversed(collection); + }, collection); + ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length); + const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) }); + ctx.push(scope); + for (const item of collection) { + scope[this.variable] = item; + ctx.continueCalled = ctx.breakCalled = false; + yield r.renderTemplates(this.templates, ctx, emitter); + if (ctx.breakCalled) + break; + scope.forloop.next(); + } + ctx.continueCalled = ctx.breakCalled = false; + ctx.pop(); + } + *children() { + const templates = this.templates.slice(); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } + *arguments() { + yield this.collection; + for (const v of Object.values(this.hash.hash)) { + if (isValueToken(v)) { + yield v; + } + } + } + blockScope() { + return [this.variable, 'forloop']; + } +} +function reversed(arr) { + return [...arr].reverse(); +} +function offset(arr, count) { + return arr.slice(count); +} +function limit(arr, count) { + return arr.slice(0, count); +} + +class CaptureTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.templates = []; + this.identifier = this.readVariable(); + this.variable = this.identifier.content; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcapture') + return; + this.templates.push(parser.parseToken(token, remainTokens)); + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + readVariable() { + let ident = this.tokenizer.readIdentifier(); + if (ident.content) + return ident; + ident = this.tokenizer.readQuoted(); + if (ident) + return ident; + throw this.tokenizer.error('invalid capture name'); + } + *render(ctx) { + const r = this.liquid.renderer; + const html = yield r.renderTemplates(this.templates, ctx); + ctx.bottom()[this.variable] = html; + } + *children() { + return this.templates; + } + *localScope() { + yield this.identifier; + } +} + +class CaseTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + this.elseTemplates = []; + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + this.elseTemplates = []; + let p = []; + let elseCount = 0; + const stream = parser.parseStream(remainTokens) + .on('tag:when', (token) => { + if (elseCount > 0) { + return; + } + p = []; + const values = []; + while (!token.tokenizer.end()) { + values.push(token.tokenizer.readValueOrThrow()); + token.tokenizer.skipBlank(); + if (token.tokenizer.peek() === ',') { + token.tokenizer.readTo(','); + } + else { + token.tokenizer.readTo('or'); + } + } + this.branches.push({ + values, + templates: p + }); + }) + .on('tag:else', () => { + elseCount++; + p = this.elseTemplates; + }) + .on('tag:endcase', () => stream.stop()) + .on('template', (tpl) => { + if (p !== this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf)); + let branchHit = false; + for (const branch of this.branches) { + for (const valueToken of branch.values) { + const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf); + if (equals(target, value)) { + yield r.renderTemplates(branch.templates, ctx, emitter); + branchHit = true; + break; + } + } + } + if (!branchHit) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } + } + *arguments() { + yield this.value; + yield* this.branches.flatMap(b => b.values); + } + *children() { + const templates = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } +} + +class CommentTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcomment') + return; + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + render() { } +} + +class RenderTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const tokenizer = this.tokenizer; + this.file = parseFilePath(tokenizer, this.liquid, parser); + this.currentFile = token.file; + while (!tokenizer.end()) { + tokenizer.skipBlank(); + const begin = tokenizer.p; + const keyword = tokenizer.readIdentifier(); + if (keyword.content === 'with' || keyword.content === 'for') { + tokenizer.skipBlank(); + // can be normal key/value pair, like "with: true" + if (tokenizer.peek() !== ':') { + const value = tokenizer.readValue(); + // can be normal key, like "with," + if (value) { + const beforeAs = tokenizer.p; + const asStr = tokenizer.readIdentifier(); + let alias; + if (asStr.content === 'as') + alias = tokenizer.readIdentifier(); + else + tokenizer.p = beforeAs; + const binding = { value, alias: alias && alias.content }; + if (keyword.content === 'with') + this.with = binding; + else + this.forBinding = binding; + tokenizer.skipBlank(); + if (tokenizer.peek() === ',') + tokenizer.advance(); + continue; // matched! + } + } + } + /** + * restore cursor if with/for not matched + */ + tokenizer.p = begin; + break; + } + this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator); + } + *render(ctx, emitter) { + const { liquid, hash } = this; + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const childCtx = ctx.spawn(); + const scope = childCtx.bottom(); + __assign(scope, yield hash.render(ctx)); + if (this.with) { + const { value, alias } = this.with; + scope[alias || filepath] = yield evalToken(value, ctx); + } + if (this.forBinding) { + const { value, alias } = this.forBinding; + const collection = toEnumerable(yield evalToken(value, ctx)); + scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias); + for (const item of collection) { + scope[alias] = item; + const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + scope['forloop'].next(); + } + } + else { + const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + } + } + *children(partials, sync) { + if (partials && isString(this.file)) { + return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)); + } + return []; + } + partialScope() { + if (isString(this.file)) { + const names = Object.keys(this.hash.hash); + if (this.with) { + const { value, alias } = this.with; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + if (this.forBinding) { + const { value, alias } = this.forBinding; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + return { name: this.file, isolated: true, scope: names }; + } + } + *arguments() { + for (const v of Object.values(this.hash.hash)) { + if (isValueToken(v)) { + yield v; + } + } + if (this.with) { + const { value } = this.with; + if (isValueToken(value)) { + yield value; + } + } + if (this.forBinding) { + const { value } = this.forBinding; + if (isValueToken(value)) { + yield value; + } + } + } +} +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +function parseFilePath(tokenizer, liquid, parser) { + if (liquid.options.dynamicPartials) { + const file = tokenizer.readValue(); + tokenizer.assert(file, 'illegal file path'); + if (file.getText() === 'none') + return; + if (isQuotedToken(file)) { + // for filenames like "files/{{file}}", eval as liquid template + const templates = parser.parse(evalQuotedToken(file)); + return optimize(templates); + } + return file; + } + const tokens = [...tokenizer.readFileNameTemplate(liquid.options)]; + const templates = optimize(parser.parseTokens(tokens)); + return templates === 'none' ? undefined : templates; +} +function optimize(templates) { + // for filenames like "files/file.liquid", extract the string directly + if (templates.length === 1 && isHTMLToken(templates[0].token)) + return templates[0].token.getContent(); + return templates; +} +function* renderFilePath(file, ctx, liquid) { + if (typeof file === 'string') + return file; + if (Array.isArray(file)) + return liquid.renderer.renderTemplates(file, ctx); + return yield evalToken(file, ctx); +} + +class IncludeTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const { tokenizer } = token; + this.file = parseFilePath(tokenizer, this.liquid, parser); + this.currentFile = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator); + } + *render(ctx, emitter) { + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + const scope = createScope((yield hash.render(ctx))); + if (withVar) + scope[filepath] = yield evalToken(withVar, ctx); + const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile)); + ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + ctx.restoreRegister(saved); + } + *children(partials, sync) { + if (partials && isString(this.file)) { + return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)); + } + return []; + } + partialScope() { + if (isString(this.file)) { + let names; + if (this.liquid.options.jekyllInclude) { + names = ['include']; + } + else { + names = Object.keys(this.hash.hash); + if (this.withVar) { + names.push([this.file, this.withVar]); + } + } + return { name: this.file, isolated: false, scope: names }; + } + } + *arguments() { + yield* Object.values(this.hash.hash).filter(isValueToken); + if (isValueToken(this.file)) { + yield this.file; + } + if (isValueToken(this.withVar)) { + yield this.withVar; + } + } +} + +class DecrementTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.variable = this.identifier.content; + } + render(context, emitter) { + const scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + emitter.write(stringify(--scope[this.variable])); + } + *localScope() { + yield this.identifier; + } +} + +class CycleTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.candidates = []; + const group = this.tokenizer.readValue(); + this.tokenizer.skipBlank(); + if (group) { + if (this.tokenizer.peek() === ':') { + this.group = group; + this.tokenizer.advance(); + } + else + this.candidates.push(group); + } + while (!this.tokenizer.end()) { + const value = this.tokenizer.readValue(); + if (value) + this.candidates.push(value); + this.tokenizer.readTo(','); + } + this.tokenizer.assert(this.candidates.length, () => `empty candidates: "${token.getText()}"`); + } + *render(ctx, emitter) { + const group = (yield evalToken(this.group, ctx)); + const fingerprint = `cycle:${group}:` + this.candidates.join(','); + const groups = ctx.getRegister('cycle', {}); + let idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + const candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return yield evalToken(candidate, ctx); + } + *arguments() { + yield* this.candidates; + if (this.group) { + yield this.group; + } + } +} + +class IfTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + let p = []; + parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid), + templates: (p = []) + })) + .on('tag:elsif', (token) => { + assert(!this.elseTemplates, 'unexpected elsif after else'); + this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), this.liquid), + templates: (p = []) + }); + }) + .on('tag:else', tag => { + assertEmpty(tag.args); + assert(!this.elseTemplates, 'duplicated else'); + p = this.elseTemplates = []; + }) + .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + for (const { value, templates } of this.branches) { + const v = yield value.value(ctx, ctx.opts.lenientIf); + if (isTruthy(v, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates || [], ctx, emitter); + } + *children() { + const templates = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } + arguments() { + return this.branches.map(b => b.value); + } +} + +class IncrementTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.variable = this.identifier.content; + } + render(context, emitter) { + const scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + const val = scope[this.variable]; + scope[this.variable]++; + emitter.write(stringify(val)); + } + *localScope() { + yield this.identifier; + } +} + +class LayoutTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + this.file = parseFilePath(this.tokenizer, this.liquid, parser); + this.currentFile = token.file; + this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = parser.parseTokens(remainTokens); + } + *render(ctx, emitter) { + const { liquid, args, file } = this; + const { renderer } = liquid; + if (file === undefined) { + ctx.setRegister('blockMode', BlockMode.OUTPUT); + yield renderer.renderTemplates(this.templates, ctx, emitter); + return; + } + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile)); + // render remaining contents and store rendered results + ctx.setRegister('blockMode', BlockMode.STORE); + const html = yield renderer.renderTemplates(this.templates, ctx); + const blocks = ctx.getRegister('blocks', {}); + // set whole content to anonymous block if anonymous doesn't specified + if (blocks[''] === undefined) + blocks[''] = (parent, emitter) => emitter.write(html); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + // render the layout file use stored blocks + ctx.push(createScope((yield args.render(ctx)))); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + } + *children(partials) { + const templates = this.templates.slice(); + if (partials && isString(this.file)) { + templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile))); + } + return templates; + } + *arguments() { + for (const v of Object.values(this.args.hash)) { + if (isValueToken(v)) { + yield v; + } + } + if (isValueToken(this.file)) { + yield this.file; + } + } + partialScope() { + if (isString(this.file)) { + return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) }; + } + } +} + +class BlockTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + this.templates = []; + const match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endblock') + return; + const template = parser.parseToken(token, remainTokens); + this.templates.push(template); + } + throw new Error(`tag ${token.getText()} not closed`); + } + *render(ctx, emitter) { + const blockRender = this.getBlockRender(ctx); + if (ctx.getRegister('blockMode') === BlockMode.STORE) { + ctx.getRegister('blocks', {})[this.block] = blockRender; + } + else { + yield blockRender(new BlockDrop(), emitter); + } + } + getBlockRender(ctx) { + const self = this; + const { liquid, templates } = this; + const renderChild = ctx.getRegister('blocks', {})[this.block]; + const renderCurrent = function* (superBlock, emitter) { + const stack = ctx.getRegister('blockStack', []); + if (stack.includes(self)) + throw new Error('block tag cannot be nested'); + stack.push(self); + ctx.push(createScope({ block: superBlock })); + yield liquid.renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + stack.pop(); + }; + return renderChild + ? (superBlock, emitter) => renderChild(new BlockDrop((emitter) => renderCurrent(superBlock, emitter)), emitter) + : renderCurrent; + } + *children() { + return this.templates; + } + blockScope() { + return ['block']; + } +} + +class RawTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + this.tokens = []; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endraw') + return; + this.tokens.push(token); + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + render() { + return this.tokens.map((token) => token.getText()).join(''); + } +} + +class TablerowloopDrop extends ForloopDrop { + constructor(length, cols, collection, variable) { + super(length, collection, variable); + this.length = length; + this.cols = cols; + } + row() { + return Math.floor(this.i / this.cols) + 1; + } + col0() { + return (this.i % this.cols); + } + col() { + return this.col0() + 1; + } + col_first() { + return this.col0() === 0; + } + col_last() { + return this.col() === this.cols; + } +} + +class TablerowTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + const variable = this.tokenizer.readIdentifier(); + this.tokenizer.skipBlank(); + const predicate = this.tokenizer.readIdentifier(); + const collectionToken = this.tokenizer.readValue(); + if (predicate.content !== 'in' || !collectionToken) { + throw new Error(`illegal tag: ${tagToken.getText()}`); + } + this.variable = variable.content; + this.collection = collectionToken; + this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = []; + let p; + const stream = parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:endtablerow', () => stream.stop()) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } + *render(ctx, emitter) { + let collection = toEnumerable(yield evalToken(this.collection, ctx)); + const args = (yield this.args.render(ctx)); + const offset = args.offset || 0; + const limit = (args.limit === undefined) ? collection.length : args.limit; + collection = collection.slice(offset, offset + limit); + const cols = args.cols || collection.length; + const r = this.liquid.renderer; + const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable); + const scope = createScope({ tablerowloop }); + ctx.push(scope); + for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) { + scope[this.variable] = collection[idx]; + if (tablerowloop.col0() === 0) { + if (tablerowloop.row() !== 1) + emitter.write(''); + emitter.write(``); + } + emitter.write(``); + yield r.renderTemplates(this.templates, ctx, emitter); + emitter.write(''); + } + if (collection.length) + emitter.write(''); + ctx.pop(); + } + *children() { + return this.templates; + } + *arguments() { + yield this.collection; + for (const v of Object.values(this.args.hash)) { + if (isValueToken(v)) { + yield v; + } + } + } + blockScope() { + return [this.variable, 'tablerowloop']; + } +} + +class UnlessTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + this.elseTemplates = []; + let p = []; + let elseCount = 0; + parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid), + test: isFalsy, + templates: (p = []) + })) + .on('tag:elsif', (token) => { + if (elseCount > 0) { + p = []; + return; + } + this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), this.liquid), + test: isTruthy, + templates: (p = []) + }); + }) + .on('tag:else', () => { + elseCount++; + p = this.elseTemplates; + }) + .on('tag:endunless', function () { this.stop(); }) + .on('template', (tpl) => { + if (p !== this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + for (const { value, test, templates } of this.branches) { + const v = yield value.value(ctx, ctx.opts.lenientIf); + if (test(v, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } + *children() { + const children = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + children.push(...this.elseTemplates); + } + return children; + } + arguments() { + return this.branches.map(b => b.value); + } +} + +class BreakTag extends Tag { + render(ctx, _emitter) { + ctx.breakCalled = true; + } +} + +class ContinueTag extends Tag { + render(ctx, _emitter) { + ctx.continueCalled = true; + } +} + +class EchoTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.tokenizer.skipBlank(); + if (!this.tokenizer.end()) { + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + } + } + *render(ctx, emitter) { + if (!this.value) + return; + const val = yield this.value.value(ctx, false); + emitter.write(val); + } + *arguments() { + if (this.value) { + yield this.value; + } + } +} + +class LiquidTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options); + this.templates = parser.parseTokens(tokens); + } + *render(ctx, emitter) { + yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter); + } + *children() { + return this.templates; + } +} + +class InlineCommentTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + if (tagToken.args.search(/\n\s*[^#\s]/g) !== -1) { + throw new Error('every line of an inline comment must start with a \'#\' character'); + } + } + render() { } +} + +const tags = { + assign: AssignTag, + 'for': ForTag, + capture: CaptureTag, + 'case': CaseTag, + comment: CommentTag, + include: IncludeTag, + render: RenderTag, + decrement: DecrementTag, + increment: IncrementTag, + cycle: CycleTag, + 'if': IfTag, + layout: LayoutTag, + block: BlockTag, + raw: RawTag, + tablerow: TablerowTag, + unless: UnlessTag, + 'break': BreakTag, + 'continue': ContinueTag, + echo: EchoTag, + liquid: LiquidTag, + '#': InlineCommentTag +}; + +class Liquid { + constructor(opts = {}) { + this.renderer = new Render(); + this.filters = Object.create(null); + this.tags = Object.create(null); + this.options = normalize(opts); + // eslint-disable-next-line deprecation/deprecation + this.parser = new Parser(this); + forOwn(tags, (conf, name) => this.registerTag(name, conf)); + forOwn(filters, (handler, name) => this.registerFilter(name, handler)); + } + parse(html, filepath) { + const parser = new Parser(this); + return parser.parse(html, filepath); + } + _render(tpl, scope, renderOptions) { + const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplates(tpl, ctx); + } + render(tpl, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false }))); + }); + } + renderSync(tpl, scope, renderOptions) { + return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true }))); + } + renderToNodeStream(tpl, scope, renderOptions = {}) { + const ctx = new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplatesToNodeStream(tpl, ctx); + } + _parseAndRender(html, scope, renderOptions) { + const tpl = this.parse(html); + return this._render(tpl, scope, renderOptions); + } + parseAndRender(html, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false }))); + }); + } + parseAndRenderSync(html, scope, renderOptions) { + return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true }))); + } + _parsePartialFile(file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile); + } + _parseLayoutFile(file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile); + } + _parseFile(file, sync, lookupType, currentFile) { + return new Parser(this).parseFile(file, sync, lookupType, currentFile); + } + parseFile(file, lookupType) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(new Parser(this).parseFile(file, false, lookupType)); + }); + } + parseFileSync(file, lookupType) { + return toValueSync(new Parser(this).parseFile(file, true, lookupType)); + } + *_renderFile(file, ctx, renderFileOptions) { + const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType)); + return yield this._render(templates, ctx, renderFileOptions); + } + renderFile(file, ctx, renderFileOptions) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false }))); + }); + } + renderFileSync(file, ctx, renderFileOptions) { + return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true }))); + } + renderFileToNodeStream(file, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + const templates = yield this.parseFile(file); + return this.renderToNodeStream(templates, scope, renderOptions); + }); + } + _evalValue(str, scope) { + const value = new Value(str, this); + const ctx = scope instanceof Context ? scope : new Context(scope, this.options, {}, { liquid: this }); + return value.value(ctx); + } + evalValue(str, scope) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._evalValue(str, scope)); + }); + } + evalValueSync(str, scope) { + return toValueSync(this._evalValue(str, scope)); + } + registerFilter(name, filter) { + this.filters[name] = filter; + } + registerTag(name, tag) { + this.tags[name] = isFunction(tag) ? tag : createTagClass(tag); + } + plugin(plugin) { + return plugin.call(this, Liquid); + } + express() { + const self = this; // eslint-disable-line + let firstCall = true; + return function (filePath, ctx, callback) { + if (firstCall) { + firstCall = false; + const dirs = normalizeDirectoryList(this.root); + self.options.root.unshift(...dirs); + self.options.layouts.unshift(...dirs); + self.options.partials.unshift(...dirs); + } + self.renderFile(filePath, ctx).then(html => callback(null, html), callback); + }; + } + analyze(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + return analyze(template, options); + }); + } + analyzeSync(template, options = {}) { + return analyzeSync(template, options); + } + parseAndAnalyze(html, filename, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + return analyze(this.parse(html, filename), options); + }); + } + parseAndAnalyzeSync(html, filename, options = {}) { + return analyzeSync(this.parse(html, filename), options); + } + /** Return an array of all variables without their properties. */ + variables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + }); + } + /** Return an array of all variables without their properties. */ + variablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + } + /** Return an array of all variables including their properties/paths. */ + fullVariables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v))))); + }); + } + /** Return an array of all variables including their properties/paths. */ + fullVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegments(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray())))); + }); + } + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegmentsSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray())))); + } + /** Return an array of all expected context variables without their properties. */ + globalVariables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + }); + } + /** Return an array of all expected context variables without their properties. */ + globalVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + } + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v))))); + }); + } + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegments(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray())))); + }); + } + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegmentsSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray())))); + } +} + +/* istanbul ignore file */ +const version = '[VI]{version}[/VI]'; + +export { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, LookupType, Output, ParseError, ParseStream, Parser, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, Variable, analyze, analyzeSync, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version }; diff --git a/node_modules/liquidjs/dist/liquid.browser.umd.js b/node_modules/liquidjs/dist/liquid.browser.umd.js new file mode 100644 index 00000000..64a45cdc --- /dev/null +++ b/node_modules/liquidjs/dist/liquid.browser.umd.js @@ -0,0 +1,7732 @@ +/* + * liquidjs@10.28.0, https://github.com/harttle/liquidjs + * (c) 2016-2026 harttle + * Released under the MIT License. + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.liquidjs = {})); +}(this, (function (exports) { 'use strict'; + + /****************************************************************************** + 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 */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + 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; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + } + + function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + } + + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + } + + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + } + + var Token = /** @class */ (function () { + function Token(kind, input, begin, end, file) { + this.kind = kind; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } + Token.prototype.getText = function () { + return this.input.slice(this.begin, this.end); + }; + Token.prototype.getPosition = function () { + var _a = __read([1, 1], 2), row = _a[0], col = _a[1]; + for (var i = 0; i < this.begin; i++) { + if (this.input[i] === '\n') { + row++; + col = 1; + } + else + col++; + } + return [row, col]; + }; + Token.prototype.size = function () { + return this.end - this.begin; + }; + return Token; + }()); + + var Drop = /** @class */ (function () { + function Drop() { + } + Drop.prototype.liquidMethodMissing = function (key, context) { + return undefined; + }; + return Drop; + }()); + + var toString$1 = Object.prototype.toString; + var toLowerCase = String.prototype.toLowerCase; + var hasOwnProperty = Object.hasOwnProperty; + function isString(value) { + return typeof value === 'string'; + } + // eslint-disable-next-line @typescript-eslint/ban-types + function isFunction(value) { + return typeof value === 'function'; + } + function isPromise(val) { + return val && isFunction(val.then); + } + function isIterator(val) { + return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return); + } + function stringify(value) { + value = toValue(value); + if (isString(value)) + return value; + if (isNil(value)) + return ''; + if (isArray(value)) + return value.map(function (x) { return stringify(x); }).join(''); + return String(value); + } + function readArrayElement(arr, index, ownPropertyOnly) { + if (index < 0) + index = arr.length + index; + if (ownPropertyOnly && !hasOwnProperty.call(arr, index)) + return undefined; + return arr[index]; + } + function toEnumerable(val) { + val = toValue(val); + if (isArray(val)) + return val; + if (isString(val) && val.length > 0) + return [val]; + if (isIterable(val)) + return Array.from(val); + if (isObject(val)) + return Object.keys(val).map(function (key) { return [key, val[key]]; }); + return []; + } + function toArray(val) { + val = toValue(val); + if (isNil(val)) + return []; + if (isArray(val)) + return val; + return [val]; + } + function toValue(value) { + return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value; + } + function toNumber(value) { + return +toValue(value) || 0; + } + function isNumber(value) { + return typeof value === 'number'; + } + function toLiquid(value) { + if (value && isFunction(value.toLiquid)) + return toLiquid(value.toLiquid()); + return value; + } + function isNil(value) { + return value == null; + } + function isUndefined(value) { + return value === undefined; + } + function isArray(value) { + // be compatible with IE 8 + return toString$1.call(value) === '[object Array]'; + } + function isArrayLike(value) { + return value && isNumber(value.length); + } + function isIterable(value) { + return isObject(value) && Symbol.iterator in value; + } + /* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ + function forOwn(obj, iteratee) { + obj = obj || {}; + for (var k in obj) { + if (hasOwnProperty.call(obj, k)) { + if (iteratee(obj[k], k, obj) === false) + break; + } + } + return obj; + } + function last(arr) { + return arr[arr.length - 1]; + } + /* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ + function isObject(value) { + var type = typeof value; + return value !== null && (type === 'object' || type === 'function'); + } + function range(start, stop, step) { + if (step === void 0) { step = 1; } + var arr = []; + for (var i = start; i < stop; i += step) { + arr.push(i); + } + return arr; + } + function padStart(str, length, ch) { + if (ch === void 0) { ch = ' '; } + return pad(str, length, ch, function (str, ch) { return ch + str; }); + } + function padEnd(str, length, ch) { + if (ch === void 0) { ch = ' '; } + return pad(str, length, ch, function (str, ch) { return str + ch; }); + } + function pad(str, length, ch, add) { + str = String(str); + var n = length - str.length; + if (n <= 0) + return str; + return add(str, ch.repeat(n)); + } + function identify(val) { + return val; + } + function changeCase(str) { + var hasLowerCase = __spreadArray([], __read(str), false).some(function (ch) { return ch >= 'a' && ch <= 'z'; }); + return hasLowerCase ? str.toUpperCase() : str.toLowerCase(); + } + function ellipsis(str, N) { + return str.length > N ? str.slice(0, N - 3) + '...' : str; + } + function orderedCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + if (a < b) + return -1; + if (a > b) + return 1; + return 0; + } + // compare string in case-insensitive way, undefined values to the tail + function caseInsensitiveCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + a = toLowerCase.call(a); + b = toLowerCase.call(b); + if (a < b) + return -1; + if (a > b) + return 1; + return 0; + } + function argumentsToValue(fn) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return fn.call.apply(fn, __spreadArray([this], __read(args.map(toValue)), false)); + }; + } + function argumentsToNumber(fn) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return fn.call.apply(fn, __spreadArray([this], __read(args.map(toNumber)), false)); + }; + } + /** Return an array containing unique elements from _array_. Works with nested arrays and objects. */ + function strictUniq(array) { + var seen, array_1, array_1_1, element, key, e_1_1; + var e_1, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + seen = new Set(); + _b.label = 1; + case 1: + _b.trys.push([1, 6, 7, 8]); + array_1 = __values(array), array_1_1 = array_1.next(); + _b.label = 2; + case 2: + if (!!array_1_1.done) return [3 /*break*/, 5]; + element = array_1_1.value; + key = JSON.stringify(element); + if (!!seen.has(key)) return [3 /*break*/, 4]; + seen.add(key); + return [4 /*yield*/, element]; + case 3: + _b.sent(); + _b.label = 4; + case 4: + array_1_1 = array_1.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_1_1 = _b.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 8: return [2 /*return*/]; + } + }); + } + + /** + * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes + */ + var TRAIT = '__liquidClass__'; + var LiquidError = /** @class */ (function (_super) { + __extends(LiquidError, _super); + function LiquidError(err, token) { + var _this = + /** + * note: for ES5 targeting, `this` will be replaced by return value of Error(), + * thus everything on `this` will be lost, avoid calling `LiquidError` methods here + */ + _super.call(this, typeof err === 'string' ? err : err.message) || this; + _this.context = ''; + if (typeof err !== 'string') + Object.defineProperty(_this, 'originalError', { value: err, enumerable: false }); + Object.defineProperty(_this, 'token', { value: token, enumerable: false }); + Object.defineProperty(_this, TRAIT, { value: 'LiquidError', enumerable: false }); + return _this; + } + LiquidError.prototype.update = function () { + Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false }); + this.message = mkMessage(this.message, this.token); + this.stack = this.message + '\n' + this.context + + '\n' + this.stack; + if (this.originalError) + this.stack += '\nFrom ' + this.originalError.stack; + }; + LiquidError.is = function (obj) { + return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError'; + }; + return LiquidError; + }(Error)); + var TokenizationError = /** @class */ (function (_super) { + __extends(TokenizationError, _super); + function TokenizationError(message, token) { + var _this = _super.call(this, message, token) || this; + _this.name = 'TokenizationError'; + _super.prototype.update.call(_this); + return _this; + } + return TokenizationError; + }(LiquidError)); + var ParseError = /** @class */ (function (_super) { + __extends(ParseError, _super); + function ParseError(err, token) { + var _this = _super.call(this, err, token) || this; + _this.name = 'ParseError'; + _this.message = err.message; + _super.prototype.update.call(_this); + return _this; + } + return ParseError; + }(LiquidError)); + var RenderError = /** @class */ (function (_super) { + __extends(RenderError, _super); + function RenderError(err, tpl) { + var _this = _super.call(this, err, tpl.token) || this; + _this.name = 'RenderError'; + _this.message = err.message; + _super.prototype.update.call(_this); + return _this; + } + RenderError.is = function (obj) { + return obj.name === 'RenderError'; + }; + return RenderError; + }(LiquidError)); + var LiquidErrors = /** @class */ (function (_super) { + __extends(LiquidErrors, _super); + function LiquidErrors(errors) { + var _this = _super.call(this, errors[0], errors[0].token) || this; + _this.errors = errors; + _this.name = 'LiquidErrors'; + var s = errors.length > 1 ? 's' : ''; + _this.message = "".concat(errors.length, " error").concat(s, " found"); + _super.prototype.update.call(_this); + return _this; + } + LiquidErrors.is = function (obj) { + return obj.name === 'LiquidErrors'; + }; + return LiquidErrors; + }(LiquidError)); + var UndefinedVariableError = /** @class */ (function (_super) { + __extends(UndefinedVariableError, _super); + function UndefinedVariableError(err, token) { + var _this = _super.call(this, err, token) || this; + _this.name = 'UndefinedVariableError'; + _this.message = err.message; + _super.prototype.update.call(_this); + return _this; + } + return UndefinedVariableError; + }(LiquidError)); + // only used internally; raised where we don't have token information, + // so it can't be an UndefinedVariableError. + var InternalUndefinedVariableError = /** @class */ (function (_super) { + __extends(InternalUndefinedVariableError, _super); + function InternalUndefinedVariableError(variableName) { + var _this = _super.call(this, "undefined variable: ".concat(variableName)) || this; + _this.name = 'InternalUndefinedVariableError'; + _this.variableName = variableName; + return _this; + } + return InternalUndefinedVariableError; + }(Error)); + var AssertionError = /** @class */ (function (_super) { + __extends(AssertionError, _super); + function AssertionError(message) { + var _this = _super.call(this, message) || this; + _this.name = 'AssertionError'; + _this.message = message + ''; + return _this; + } + return AssertionError; + }(Error)); + function mkContext(token) { + var _a = __read(token.getPosition(), 2), line = _a[0], col = _a[1]; + var lines = token.input.split('\n'); + var begin = Math.max(line - 2, 1); + var end = Math.min(line + 3, lines.length); + var context = range(begin, end + 1) + .map(function (lineNumber) { + var rowIndicator = (lineNumber === line) ? '>> ' : ' '; + var num = padStart(String(lineNumber), String(end).length); + var text = "".concat(rowIndicator).concat(num, "| "); + var colIndicator = lineNumber === line + ? '\n' + padStart('^', col + text.length) + : ''; + text += lines[lineNumber - 1]; + text += colIndicator; + return text; + }) + .join('\n'); + return context; + } + function mkMessage(msg, token) { + if (token.file) + msg += ", file:".concat(token.file); + var _a = __read(token.getPosition(), 2), line = _a[0], col = _a[1]; + msg += ", line:".concat(line, ", col:").concat(col); + return msg; + } + + // **DO NOT CHANGE THIS FILE** + // + // This file is generated by bin/character-gen.js + // bitmask character types to boost performance + var TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; + var WORD = 1; + var BLANK = 4; + var QUOTE = 8; + var INLINE_BLANK = 16; + var NUMBER = 32; + var SIGN = 64; + var PUNCTUATION = 128; + function isWord(char) { + var code = char.charCodeAt(0); + return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD); + } + TYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK; + TYPES[8220] = TYPES[8221] = PUNCTUATION; + + function assert(predicate, message) { + if (!predicate) { + var msg = typeof message === 'function' + ? message() + : (message || "expect ".concat(predicate, " to be true")); + throw new AssertionError(msg); + } + } + function assertEmpty(predicate, message) { + if (message === void 0) { message = "unexpected ".concat(JSON.stringify(predicate)); } + assert(!predicate, message); + } + + var NullDrop = /** @class */ (function (_super) { + __extends(NullDrop, _super); + function NullDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + NullDrop.prototype.equals = function (value) { + return isNil(toValue(value)); + }; + NullDrop.prototype.gt = function () { + return false; + }; + NullDrop.prototype.geq = function () { + return false; + }; + NullDrop.prototype.lt = function () { + return false; + }; + NullDrop.prototype.leq = function () { + return false; + }; + NullDrop.prototype.valueOf = function () { + return null; + }; + return NullDrop; + }(Drop)); + + var EmptyDrop = /** @class */ (function (_super) { + __extends(EmptyDrop, _super); + function EmptyDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + EmptyDrop.prototype.equals = function (value) { + if (value instanceof EmptyDrop) + return false; + value = toValue(value); + if (isString(value) || isArray(value)) + return value.length === 0; + if (isObject(value)) + return Object.keys(value).length === 0; + return false; + }; + EmptyDrop.prototype.gt = function () { + return false; + }; + EmptyDrop.prototype.geq = function () { + return false; + }; + EmptyDrop.prototype.lt = function () { + return false; + }; + EmptyDrop.prototype.leq = function () { + return false; + }; + EmptyDrop.prototype.valueOf = function () { + return ''; + }; + EmptyDrop.is = function (value) { + return value instanceof EmptyDrop; + }; + return EmptyDrop; + }(Drop)); + + var BlankDrop = /** @class */ (function (_super) { + __extends(BlankDrop, _super); + function BlankDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + BlankDrop.prototype.equals = function (value) { + if (value === false) + return true; + if (isNil(toValue(value))) + return true; + if (isString(value)) + return /^\s*$/.test(value); + return _super.prototype.equals.call(this, value); + }; + BlankDrop.is = function (value) { + return value instanceof BlankDrop; + }; + return BlankDrop; + }(EmptyDrop)); + + var ForloopDrop = /** @class */ (function (_super) { + __extends(ForloopDrop, _super); + function ForloopDrop(length, collection, variable) { + var _this = _super.call(this) || this; + _this.i = 0; + _this.length = length; + _this.name = "".concat(variable, "-").concat(collection); + return _this; + } + ForloopDrop.prototype.next = function () { + this.i++; + }; + ForloopDrop.prototype.index0 = function () { + return this.i; + }; + ForloopDrop.prototype.index = function () { + return this.i + 1; + }; + ForloopDrop.prototype.first = function () { + return this.i === 0; + }; + ForloopDrop.prototype.last = function () { + return this.i === this.length - 1; + }; + ForloopDrop.prototype.rindex = function () { + return this.length - this.i; + }; + ForloopDrop.prototype.rindex0 = function () { + return this.length - this.i - 1; + }; + ForloopDrop.prototype.valueOf = function () { + return JSON.stringify(this); + }; + return ForloopDrop; + }(Drop)); + + var SimpleEmitter = /** @class */ (function () { + function SimpleEmitter() { + this.buffer = ''; + } + SimpleEmitter.prototype.write = function (html) { + this.buffer += stringify(html); + }; + return SimpleEmitter; + }()); + + var StreamedEmitter = /** @class */ (function () { + function StreamedEmitter() { + this.buffer = ''; + this.stream = null; + throw new Error('streaming not supported in browser'); + } + return StreamedEmitter; + }()); + + var KeepingTypeEmitter = /** @class */ (function () { + function KeepingTypeEmitter() { + this.buffer = ''; + } + KeepingTypeEmitter.prototype.write = function (html) { + html = toValue(html); + // This will only preserve the type if the value is isolated. + // I.E: + // {{ my-port }} -> 42 + // {{ my-host }}:{{ my-port }} -> 'host:42' + if (typeof html !== 'string' && this.buffer === '') { + this.buffer = html; + } + else { + this.buffer = stringify(this.buffer) + stringify(html); + } + }; + return KeepingTypeEmitter; + }()); + + var BlockDrop = /** @class */ (function (_super) { + __extends(BlockDrop, _super); + function BlockDrop( + // the block render from layout template + superBlockRender) { + if (superBlockRender === void 0) { superBlockRender = function () { return ''; }; } + var _this = _super.call(this) || this; + _this.superBlockRender = superBlockRender; + return _this; + } + /** + * Provide parent access in child block by + * {{ block.super }} + */ + BlockDrop.prototype.super = function () { + var emitter; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + emitter = new SimpleEmitter(); + return [4 /*yield*/, this.superBlockRender(emitter)]; + case 1: + _a.sent(); + return [2 /*return*/, emitter.buffer]; + } + }); + }; + return BlockDrop; + }(Drop)); + + function isComparable(arg) { + return (arg && + isFunction(arg.equals) && + isFunction(arg.gt) && + isFunction(arg.geq) && + isFunction(arg.lt) && + isFunction(arg.leq)); + } + + var nil = new NullDrop(); + var literalValues = { + 'true': true, + 'false': false, + 'nil': nil, + 'null': nil, + 'empty': new EmptyDrop(), + 'blank': new BlankDrop() + }; + + // Tries are built once per input object and reused: the Tokenizer rebuilds them + // on every instantiation, but `input` (operators/literalValues) is a stable + // reference. WeakMap-keying by `input` lets short-lived operator objects (and + // their tries) be garbage collected. The returned trie is treated as read-only + // by callers (matchTrie only reads it); do not mutate it. + var trieCache = new WeakMap(); + function createTrie(input) { + var e_1, _a; + var cached = trieCache.get(input); + if (cached) + return cached; + var trie = {}; + try { + for (var _b = __values(Object.entries(input)), _c = _b.next(); !_c.done; _c = _b.next()) { + var _d = __read(_c.value, 2), name_1 = _d[0], data = _d[1]; + var node = trie; + for (var i = 0; i < name_1.length; i++) { + var c = name_1[i]; + node[c] = node[c] || {}; + if (i === name_1.length - 1 && isWord(name_1[i])) { + node[c].needBoundary = true; + } + node = node[c]; + } + node.data = data; + node.end = true; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + trieCache.set(input, trie); + return trie; + } + + function toLiquidAsync(asyncFn, syncFn) { + var syncImpl = syncFn || asyncFn; + return function (sync) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return sync ? syncImpl.apply(void 0, __spreadArray([], __read(args), false)) : asyncFn.apply(void 0, __spreadArray([], __read(args), false)); + }; + } + // convert an async iterator to a Promise + function toPromise(val) { + return __awaiter(this, void 0, void 0, function () { + var value, done, next, state, err_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!isIterator(val)) + return [2 /*return*/, val]; + done = false; + next = 'next'; + _a.label = 1; + case 1: + state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + _a.label = 2; + case 2: + _a.trys.push([2, 5, , 6]); + if (isIterator(value)) + value = toPromise(value); + if (!isPromise(value)) return [3 /*break*/, 4]; + return [4 /*yield*/, value]; + case 3: + value = _a.sent(); + _a.label = 4; + case 4: return [3 /*break*/, 6]; + case 5: + err_1 = _a.sent(); + next = 'throw'; + value = err_1; + return [3 /*break*/, 6]; + case 6: + if (!done) return [3 /*break*/, 1]; + _a.label = 7; + case 7: return [2 /*return*/, value]; + } + }); + }); + } + // convert an async iterator to a value in a synchronous manner + function toValueSync(val) { + if (!isIterator(val)) + return val; + var value; + var done = false; + var next = 'next'; + do { + var state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + if (isIterator(value)) { + try { + value = toValueSync(value); + } + catch (err) { + next = 'throw'; + value = err; + } + } + } while (!done); + return value; + } + + var rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/; + // prototype extensions + function daysInMonth(d) { + var feb = isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + } + function getDayOfYear(d) { + var num = 0; + for (var i = 0; i < d.getMonth(); ++i) { + num += daysInMonth(d)[i]; + } + return num + d.getDate(); + } + function getWeekOfYear(d, startDay) { + // Skip to startDay of this week + var now = getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + var jan1 = new Date(d.getFullYear(), 0, 1); + var then = (7 - jan1.getDay() + startDay); + return String(Math.floor((now - then) / 7) + 1); + } + function isLeapYear(d) { + var year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); + } + function ordinal(d) { + var date = d.getDate(); + if ([11, 12, 13].includes(date)) + return 'th'; + switch (date % 10) { + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; + } + } + function century(d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); + } + // default to 0 + var padWidths = { + d: 2, + e: 2, + H: 2, + I: 2, + j: 3, + k: 2, + l: 2, + L: 3, + m: 2, + M: 2, + S: 2, + U: 2, + W: 2 + }; + var padSpaceChars = new Set('aAbBceklpP'); + function getTimezoneOffset(d, opts) { + var nOffset = Math.abs(d.getTimezoneOffset()); + var h = Math.floor(nOffset / 60); + var m = nOffset % 60; + return (d.getTimezoneOffset() > 0 ? '-' : '+') + + padStart(h, 2, '0') + + (opts.flags[':'] ? ':' : '') + + padStart(m, 2, '0'); + } + var formatCodes = { + a: function (d) { return d.getShortWeekdayName(); }, + A: function (d) { return d.getLongWeekdayName(); }, + b: function (d) { return d.getShortMonthName(); }, + B: function (d) { return d.getLongMonthName(); }, + c: function (d) { return d.toLocaleString(); }, + C: function (d) { return century(d); }, + d: function (d) { return d.getDate(); }, + e: function (d) { return d.getDate(); }, + H: function (d) { return d.getHours(); }, + I: function (d) { return String(d.getHours() % 12 || 12); }, + j: function (d) { return getDayOfYear(d); }, + k: function (d) { return d.getHours(); }, + l: function (d) { return String(d.getHours() % 12 || 12); }, + L: function (d) { return d.getMilliseconds(); }, + m: function (d) { return d.getMonth() + 1; }, + M: function (d) { return d.getMinutes(); }, + N: function (d, opts) { + var _a; + var width = Number(opts.width) || 9; + var str = padStart(String(d.getMilliseconds()), 3, '0').slice(0, width); + (_a = opts.memoryLimit) === null || _a === void 0 ? void 0 : _a.use(width - str.length); + return padEnd(str, width, '0'); + }, + p: function (d) { return (d.getHours() < 12 ? 'AM' : 'PM'); }, + P: function (d) { return (d.getHours() < 12 ? 'am' : 'pm'); }, + q: function (d) { return ordinal(d); }, + s: function (d) { return Math.floor(d.dateValue() / 1000); }, + S: function (d) { return d.getSeconds(); }, + u: function (d) { return d.getDay() || 7; }, + U: function (d) { return getWeekOfYear(d, 0); }, + w: function (d) { return d.getDay(); }, + W: function (d) { return getWeekOfYear(d, 1); }, + x: function (d) { return d.toLocaleDateString(); }, + X: function (d) { return d.toLocaleTimeString(); }, + y: function (d) { return d.getFullYear().toString().slice(2, 4); }, + Y: function (d) { return d.getFullYear(); }, + z: getTimezoneOffset, + Z: function (d, opts) { return d.getTimeZoneName() || getTimezoneOffset(d, opts); }, + 't': function () { return '\t'; }, + 'n': function () { return '\n'; }, + '%': function () { return '%'; } + }; + formatCodes.h = formatCodes.b; + function strftime(d, formatStr, memoryLimit) { + var output = ''; + var remaining = formatStr; + var match; + while ((match = rFormat.exec(remaining))) { + output += remaining.slice(0, match.index); + remaining = remaining.slice(match.index + match[0].length); + output += format(d, match, memoryLimit); + } + return output + remaining; + } + function format(d, match, memoryLimit) { + var e_1, _a; + var _b = __read(match, 5), input = _b[0], _c = _b[1], flagStr = _c === void 0 ? '' : _c, width = _b[2], modifier = _b[3], conversion = _b[4]; + var convert = formatCodes[conversion]; + if (!convert) + return input; + var flags = {}; + try { + for (var flagStr_1 = __values(flagStr), flagStr_1_1 = flagStr_1.next(); !flagStr_1_1.done; flagStr_1_1 = flagStr_1.next()) { + var flag = flagStr_1_1.value; + flags[flag] = true; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (flagStr_1_1 && !flagStr_1_1.done && (_a = flagStr_1.return)) _a.call(flagStr_1); + } + finally { if (e_1) throw e_1.error; } + } + var ret = String(convert(d, { flags: flags, width: width, modifier: modifier, memoryLimit: memoryLimit })); + var padChar = padSpaceChars.has(conversion) ? ' ' : '0'; + var padWidth = Number(width) || padWidths[conversion] || 0; + if (flags['^']) + ret = ret.toUpperCase(); + else if (flags['#']) + ret = changeCase(ret); + if (flags['_']) + padChar = ' '; + else if (flags['0']) + padChar = '0'; + if (flags['-']) + padWidth = 0; + memoryLimit === null || memoryLimit === void 0 ? void 0 : memoryLimit.use(Number(padWidth) - ret.length); + return padStart(ret, padWidth, padChar); + } + + function getDateTimeFormat() { + return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined); + } + + // one minute in milliseconds + var OneMinute = 60000; + /** + * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS + * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3 + */ + var TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):?(\d{2}))$/; + var monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' + ]; + var monthNamesShort = monthNames.map(function (name) { return name.slice(0, 3); }); + var dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' + ]; + var dayNamesShort = dayNames.map(function (name) { return name.slice(0, 3); }); + /** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ + var LiquidDate = /** @class */ (function () { + function LiquidDate(init, locale, timezone) { + this.locale = locale; + this.DateTimeFormat = getDateTimeFormat(); + this.date = new Date(init); + this.timezoneFixed = timezone !== undefined; + if (timezone === undefined) { + timezone = this.date.getTimezoneOffset(); + } + this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone; + this.timezoneName = isString(timezone) ? timezone : ''; + var diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute; + var time = this.date.getTime() + diff; + this.displayDate = new Date(time); + } + LiquidDate.prototype.getTime = function () { + return this.displayDate.getTime(); + }; + /** + * The underlying UTC timestamp in milliseconds, unaffected by the display + * timezone. Use this (not `getTime()`) for timezone-invariant values like + * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by + * the display timezone offset so wall-clock getters can delegate to Date. + */ + LiquidDate.prototype.dateValue = function () { + return this.date.getTime(); + }; + LiquidDate.prototype.getMilliseconds = function () { + return this.displayDate.getMilliseconds(); + }; + LiquidDate.prototype.getSeconds = function () { + return this.displayDate.getSeconds(); + }; + LiquidDate.prototype.getMinutes = function () { + return this.displayDate.getMinutes(); + }; + LiquidDate.prototype.getHours = function () { + return this.displayDate.getHours(); + }; + LiquidDate.prototype.getDay = function () { + return this.displayDate.getDay(); + }; + LiquidDate.prototype.getDate = function () { + return this.displayDate.getDate(); + }; + LiquidDate.prototype.getMonth = function () { + return this.displayDate.getMonth(); + }; + LiquidDate.prototype.getFullYear = function () { + return this.displayDate.getFullYear(); + }; + LiquidDate.prototype.toLocaleString = function (locale, init) { + if (init === null || init === void 0 ? void 0 : init.timeZone) { + return this.date.toLocaleString(locale, init); + } + return this.displayDate.toLocaleString(locale, init); + }; + LiquidDate.prototype.toLocaleTimeString = function (locale) { + return this.displayDate.toLocaleTimeString(locale); + }; + LiquidDate.prototype.toLocaleDateString = function (locale) { + return this.displayDate.toLocaleDateString(locale); + }; + LiquidDate.prototype.getTimezoneOffset = function () { + return this.timezoneOffset; + }; + LiquidDate.prototype.getTimeZoneName = function () { + if (this.timezoneFixed) + return this.timezoneName; + if (!this.DateTimeFormat) + return; + return this.DateTimeFormat().resolvedOptions().timeZone; + }; + LiquidDate.prototype.getLongMonthName = function () { + var _a; + return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()]; + }; + LiquidDate.prototype.getShortMonthName = function () { + var _a; + return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()]; + }; + LiquidDate.prototype.getLongWeekdayName = function () { + var _a; + return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()]; + }; + LiquidDate.prototype.getShortWeekdayName = function () { + var _a; + return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()]; + }; + LiquidDate.prototype.valid = function () { + return !isNaN(this.getTime()); + }; + LiquidDate.prototype.format = function (options) { + return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate); + }; + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + LiquidDate.createDateFixedToTimezone = function (dateString, locale) { + var m = dateString.match(TIMEZONE_PATTERN); + // representing a UTC timestamp + if (m && m[1] === 'Z') { + return new LiquidDate(+new Date(dateString), locale, 0); + } + // has a timezone specified + if (m && m[2] && m[3] && m[4]) { + var _a = __read(m, 5), sign = _a[2], hours = _a[3], minutes = _a[4]; + var offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10)); + return new LiquidDate(+new Date(dateString), locale, offset); + } + return new LiquidDate(dateString, locale); + }; + LiquidDate.getTimezoneOffset = function (timezoneName, date) { + var localDateString = date.toLocaleString('en-US', { timeZone: timezoneName }); + var utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' }); + var localDate = new Date(localDateString); + var utcDate = new Date(utcDateString); + return (+utcDate - +localDate) / (60 * 1000); + }; + return LiquidDate; + }()); + + var Limiter = /** @class */ (function () { + function Limiter(resource, limit) { + this.base = 0; + this.message = "".concat(resource, " limit exceeded"); + this.limit = limit; + } + Limiter.prototype.use = function (count) { + if (+count > 0) { + assert(this.base + +count <= this.limit, this.message); + this.base += +count; + } + }; + Limiter.prototype.check = function (count) { + if (+count > 0) { + assert(+count <= this.limit, this.message); + } + }; + return Limiter; + }()); + + var DelimitedToken = /** @class */ (function (_super) { + __extends(DelimitedToken, _super); + function DelimitedToken(kind, _a, input, begin, end, trimLeft, trimRight, file) { + var _b = __read(_a, 2), contentBegin = _b[0], contentEnd = _b[1]; + var _this = _super.call(this, kind, input, begin, end, file) || this; + _this.trimLeft = false; + _this.trimRight = false; + var tl = input[contentBegin] === '-'; + var tr = input[contentEnd - 1] === '-'; + var l = tl ? contentBegin + 1 : contentBegin; + var r = tr ? contentEnd - 1 : contentEnd; + while (l < r && (TYPES[input.charCodeAt(l)] & BLANK)) + l++; + while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK)) + r--; + _this.contentRange = [l, r]; + _this.trimLeft = tl || trimLeft; + _this.trimRight = tr || trimRight; + return _this; + } + Object.defineProperty(DelimitedToken.prototype, "content", { + get: function () { + return this.input.slice(this.contentRange[0], this.contentRange[1]); + }, + enumerable: false, + configurable: true + }); + return DelimitedToken; + }(Token)); + + var TagToken = /** @class */ (function (_super) { + __extends(TagToken, _super); + function TagToken(input, begin, end, options, file) { + var _this = this; + var trimTagLeft = options.trimTagLeft, trimTagRight = options.trimTagRight, tagDelimiterLeft = options.tagDelimiterLeft, tagDelimiterRight = options.tagDelimiterRight; + var _a = __read([begin + tagDelimiterLeft.length, end - tagDelimiterRight.length], 2), valueBegin = _a[0], valueEnd = _a[1]; + _this = _super.call(this, exports.TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file) || this; + _this.tokenizer = new Tokenizer(input, options.operators, file, _this.contentRange, options.groupedExpressions); + _this.name = _this.tokenizer.readTagName(); + _this.tokenizer.assert(_this.name, "illegal tag syntax, tag name expected"); + _this.tokenizer.skipBlank(); + _this.args = _this.tokenizer.input.slice(_this.tokenizer.p, _this.contentRange[1]); + return _this; + } + return TagToken; + }(DelimitedToken)); + + var OutputToken = /** @class */ (function (_super) { + __extends(OutputToken, _super); + function OutputToken(input, begin, end, options, file) { + var trimOutputLeft = options.trimOutputLeft, trimOutputRight = options.trimOutputRight, outputDelimiterLeft = options.outputDelimiterLeft, outputDelimiterRight = options.outputDelimiterRight; + var valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length]; + return _super.call(this, exports.TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file) || this; + } + return OutputToken; + }(DelimitedToken)); + + var HTMLToken = /** @class */ (function (_super) { + __extends(HTMLToken, _super); + function HTMLToken(input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.HTML, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + _this.trimLeft = 0; + _this.trimRight = 0; + return _this; + } + HTMLToken.prototype.getContent = function () { + return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight); + }; + return HTMLToken; + }(Token)); + + var NumberToken = /** @class */ (function (_super) { + __extends(NumberToken, _super); + function NumberToken(input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.Number, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + _this.content = Number(_this.getText()); + return _this; + } + return NumberToken; + }(Token)); + + var IdentifierToken = /** @class */ (function (_super) { + __extends(IdentifierToken, _super); + function IdentifierToken(input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.Word, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + _this.content = _this.getText(); + return _this; + } + return IdentifierToken; + }(Token)); + + var LiteralToken = /** @class */ (function (_super) { + __extends(LiteralToken, _super); + function LiteralToken(input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.Literal, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + _this.literal = _this.getText(); + _this.content = literalValues[_this.literal]; + return _this; + } + return LiteralToken; + }(Token)); + + var operatorPrecedences = { + '==': 2, + '!=': 2, + '>': 2, + '<': 2, + '>=': 2, + '<=': 2, + 'contains': 2, + 'not': 1, + 'and': 0, + 'or': 0 + }; + var operatorTypes = { + '==': 0 /* OperatorType.Binary */, + '!=': 0 /* OperatorType.Binary */, + '>': 0 /* OperatorType.Binary */, + '<': 0 /* OperatorType.Binary */, + '>=': 0 /* OperatorType.Binary */, + '<=': 0 /* OperatorType.Binary */, + 'contains': 0 /* OperatorType.Binary */, + 'not': 1 /* OperatorType.Unary */, + 'and': 0 /* OperatorType.Binary */, + 'or': 0 /* OperatorType.Binary */ + }; + var OperatorToken = /** @class */ (function (_super) { + __extends(OperatorToken, _super); + function OperatorToken(input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.Operator, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + _this.operator = _this.getText(); + return _this; + } + OperatorToken.prototype.getPrecedence = function () { + return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1; + }; + return OperatorToken; + }(Token)); + + var PropertyAccessToken = /** @class */ (function (_super) { + __extends(PropertyAccessToken, _super); + function PropertyAccessToken(variable, props, input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.PropertyAccess, input, begin, end, file) || this; + _this.variable = variable; + _this.props = props; + return _this; + } + return PropertyAccessToken; + }(Token)); + + var FilterToken = /** @class */ (function (_super) { + __extends(FilterToken, _super); + function FilterToken(name, args, input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.Filter, input, begin, end, file) || this; + _this.name = name; + _this.args = args; + return _this; + } + return FilterToken; + }(Token)); + + var HashToken = /** @class */ (function (_super) { + __extends(HashToken, _super); + function HashToken(input, begin, end, name, value, file) { + var _this = _super.call(this, exports.TokenKind.Hash, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.name = name; + _this.value = value; + _this.file = file; + return _this; + } + return HashToken; + }(Token)); + + var rHex = /[\da-fA-F]/; + var rOct = /[0-7]/; + var escapeChar = { + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t', + v: '\x0B' + }; + function hexVal(c) { + var code = c.charCodeAt(0); + if (code >= 97) + return code - 87; + if (code >= 65) + return code - 55; + return code - 48; + } + function parseStringLiteral(str) { + var ret = ''; + for (var i = 1; i < str.length - 1; i++) { + if (str[i] !== '\\') { + ret += str[i]; + continue; + } + if (escapeChar[str[i + 1]] !== undefined) { + ret += escapeChar[str[++i]]; + } + else if (str[i + 1] === 'u') { + var val = 0; + var j = i + 2; + while (j <= i + 5 && rHex.test(str[j])) { + val = val * 16 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + else if (!rOct.test(str[i + 1])) { + ret += str[++i]; + } + else { + var j = i + 1; + var val = 0; + while (j <= i + 3 && rOct.test(str[j])) { + val = val * 8 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + } + return ret; + } + + var QuotedToken = /** @class */ (function (_super) { + __extends(QuotedToken, _super); + function QuotedToken(input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.Quoted, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + _this.content = parseStringLiteral(_this.getText()); + return _this; + } + return QuotedToken; + }(Token)); + + var RangeToken = /** @class */ (function (_super) { + __extends(RangeToken, _super); + function RangeToken(input, begin, end, lhs, rhs, file) { + var _this = _super.call(this, exports.TokenKind.Range, input, begin, end, file) || this; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.lhs = lhs; + _this.rhs = rhs; + _this.file = file; + return _this; + } + return RangeToken; + }(Token)); + + /** + * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}` + */ + var LiquidTagToken = /** @class */ (function (_super) { + __extends(LiquidTagToken, _super); + function LiquidTagToken(input, begin, end, options, file) { + var _this = _super.call(this, exports.TokenKind.Tag, [begin, end], input, begin, end, false, false, file) || this; + _this.tokenizer = new Tokenizer(input, options.operators, file, _this.contentRange, options.groupedExpressions); + _this.name = _this.tokenizer.readTagName(); + _this.tokenizer.assert(_this.name, 'illegal liquid tag syntax'); + _this.tokenizer.skipBlank(); + return _this; + } + Object.defineProperty(LiquidTagToken.prototype, "args", { + get: function () { + return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + }, + enumerable: false, + configurable: true + }); + return LiquidTagToken; + }(DelimitedToken)); + + /** + * value expression with optional filters + * e.g. + * {% assign foo="bar" | append: "coo" %} + */ + var FilteredValueToken = /** @class */ (function (_super) { + __extends(FilteredValueToken, _super); + function FilteredValueToken(initial, filters, input, begin, end, file) { + var _this = _super.call(this, exports.TokenKind.FilteredValue, input, begin, end, file) || this; + _this.initial = initial; + _this.filters = filters; + _this.input = input; + _this.begin = begin; + _this.end = end; + _this.file = file; + return _this; + } + return FilteredValueToken; + }(Token)); + + var polyfill = { + now: function () { return Date.now(); } + }; + function getPerformance() { + return (typeof global === 'object' && global.performance) || + (typeof window === 'object' && window.performance) || + polyfill; + } + + var Render = /** @class */ (function () { + function Render() { + } + Render.prototype.renderTemplatesToNodeStream = function (templates, ctx) { + var _this = this; + var emitter = new StreamedEmitter(); + Promise.resolve().then(function () { return toPromise(_this.renderTemplates(templates, ctx, emitter)); }) + .then(function () { return emitter.end(); }, function (err) { return emitter.error(err); }); + return emitter.stream; + }; + Render.prototype.renderTemplates = function (templates, ctx, emitter) { + var errors, templates_1, templates_1_1, tpl, html, e_1, err, e_2_1; + var e_2, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!emitter) { + emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter(); + } + ctx.renderLimit.check(getPerformance().now()); + errors = []; + _b.label = 1; + case 1: + _b.trys.push([1, 8, 9, 10]); + templates_1 = __values(templates), templates_1_1 = templates_1.next(); + _b.label = 2; + case 2: + if (!!templates_1_1.done) return [3 /*break*/, 7]; + tpl = templates_1_1.value; + ctx.renderLimit.check(getPerformance().now()); + _b.label = 3; + case 3: + _b.trys.push([3, 5, , 6]); + return [4 /*yield*/, tpl.render(ctx, emitter) + // if not, it'll return an `html`, write to the emitter for it + ]; + case 4: + html = _b.sent(); + // if not, it'll return an `html`, write to the emitter for it + html && emitter.write(html); + if (ctx.breakCalled || ctx.continueCalled) + return [3 /*break*/, 7]; + return [3 /*break*/, 6]; + case 5: + e_1 = _b.sent(); + err = LiquidError.is(e_1) ? e_1 : new RenderError(e_1, tpl); + if (ctx.opts.catchAllErrors) + errors.push(err); + else + throw err; + return [3 /*break*/, 6]; + case 6: + templates_1_1 = templates_1.next(); + return [3 /*break*/, 2]; + case 7: return [3 /*break*/, 10]; + case 8: + e_2_1 = _b.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 10]; + case 9: + try { + if (templates_1_1 && !templates_1_1.done && (_a = templates_1.return)) _a.call(templates_1); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 10: + if (errors.length) { + throw new LiquidErrors(errors); + } + return [2 /*return*/, emitter.buffer]; + } + }); + }; + return Render; + }()); + + function isKeyValuePair(arr) { + return isArray(arr); + } + + var Filter = /** @class */ (function () { + function Filter(token, options, liquid) { + this.token = token; + this.name = token.name; + this.handler = isFunction(options) + ? options + : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify); + this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw); + this.args = token.args; + this.liquid = liquid; + } + Filter.prototype.render = function (value, context) { + var argv, _a, _b, arg, _c, _d, _e, _f, _g, e_1_1; + var e_1, _h; + return __generator(this, function (_j) { + switch (_j.label) { + case 0: + argv = []; + _j.label = 1; + case 1: + _j.trys.push([1, 8, 9, 10]); + _a = __values(this.args), _b = _a.next(); + _j.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 7]; + arg = _b.value; + if (!isKeyValuePair(arg)) return [3 /*break*/, 4]; + _d = (_c = argv).push; + _e = [arg[0]]; + return [4 /*yield*/, evalToken(arg[1], context)]; + case 3: + _d.apply(_c, [_e.concat([_j.sent()])]); + return [3 /*break*/, 6]; + case 4: + _g = (_f = argv).push; + return [4 /*yield*/, evalToken(arg, context)]; + case 5: + _g.apply(_f, [_j.sent()]); + _j.label = 6; + case 6: + _b = _a.next(); + return [3 /*break*/, 2]; + case 7: return [3 /*break*/, 10]; + case 8: + e_1_1 = _j.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 10]; + case 9: + try { + if (_b && !_b.done && (_h = _a.return)) _h.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 10: return [4 /*yield*/, this.handler.apply({ context: context, token: this.token, liquid: this.liquid }, __spreadArray([value], __read(argv), false))]; + case 11: return [2 /*return*/, _j.sent()]; + } + }); + }; + return Filter; + }()); + + var Expression = /** @class */ (function () { + function Expression(tokens) { + this.postfix = __spreadArray([], __read(toPostfix(tokens)), false); + } + Expression.prototype.evaluate = function (ctx, lenient) { + var operands, _a, _b, token, r, result, l, _c, _d, e_1_1; + var e_1, _e; + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + assert(ctx, 'unable to evaluate: context not defined'); + operands = []; + _f.label = 1; + case 1: + _f.trys.push([1, 11, 12, 13]); + _a = __values(this.postfix), _b = _a.next(); + _f.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 10]; + token = _b.value; + if (!isOperatorToken(token)) return [3 /*break*/, 7]; + r = operands.pop(); + result = void 0; + if (!(operatorTypes[token.operator] === 1 /* OperatorType.Unary */)) return [3 /*break*/, 4]; + return [4 /*yield*/, ctx.opts.operators[token.operator](r, ctx)]; + case 3: + result = _f.sent(); + return [3 /*break*/, 6]; + case 4: + l = operands.pop(); + return [4 /*yield*/, ctx.opts.operators[token.operator](l, r, ctx)]; + case 5: + result = _f.sent(); + _f.label = 6; + case 6: + operands.push(result); + return [3 /*break*/, 9]; + case 7: + _d = (_c = operands).push; + return [4 /*yield*/, evalToken(token, ctx, lenient)]; + case 8: + _d.apply(_c, [_f.sent()]); + _f.label = 9; + case 9: + _b = _a.next(); + return [3 /*break*/, 2]; + case 10: return [3 /*break*/, 13]; + case 11: + e_1_1 = _f.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 13]; + case 12: + try { + if (_b && !_b.done && (_e = _a.return)) _e.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 13: return [2 /*return*/, operands[0]]; + } + }); + }; + Expression.prototype.valid = function () { + return !!this.postfix.length; + }; + return Expression; + }()); + function evalToken(token, ctx, lenient) { + if (lenient === void 0) { lenient = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!token) + return [2 /*return*/]; + if ('content' in token) + return [2 /*return*/, token.content]; + if (!isPropertyAccessToken(token)) return [3 /*break*/, 2]; + return [4 /*yield*/, evalPropertyAccessToken(token, ctx, lenient)]; + case 1: return [2 /*return*/, _a.sent()]; + case 2: + if (!isRangeToken(token)) return [3 /*break*/, 4]; + return [4 /*yield*/, evalRangeToken(token, ctx)]; + case 3: return [2 /*return*/, _a.sent()]; + case 4: + if (!isFilteredValueToken(token)) return [3 /*break*/, 6]; + return [4 /*yield*/, evalFilteredValueToken(token, ctx, lenient)]; + case 5: return [2 /*return*/, _a.sent()]; + case 6: return [2 /*return*/]; + } + }); + } + function evalFilteredValueToken(token, ctx, lenient) { + var val, _loop_1, _a, _b, filterToken, e_2_1; + var e_2, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + assert(ctx.liquid, 'FilteredValueToken evaluation requires liquid instance in context'); + lenient = lenient || (ctx.opts.lenientIf && token.filters.length > 0 && token.filters[0].name === 'default'); + return [4 /*yield*/, token.initial.evaluate(ctx, lenient)]; + case 1: + val = _d.sent(); + _loop_1 = function (filterToken) { + var filterImpl, filter; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + filterImpl = ctx.liquid.filters[filterToken.name]; + assert(filterImpl || !ctx.liquid.options.strictFilters, function () { return "undefined filter: ".concat(filterToken.name); }); + filter = new Filter(filterToken, filterImpl, ctx.liquid); + return [4 /*yield*/, filter.render(val, ctx)]; + case 1: + val = _e.sent(); + return [2 /*return*/]; + } + }); + }; + _d.label = 2; + case 2: + _d.trys.push([2, 7, 8, 9]); + _a = __values(token.filters), _b = _a.next(); + _d.label = 3; + case 3: + if (!!_b.done) return [3 /*break*/, 6]; + filterToken = _b.value; + return [5 /*yield**/, _loop_1(filterToken)]; + case 4: + _d.sent(); + _d.label = 5; + case 5: + _b = _a.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_2_1 = _d.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/, val]; + } + }); + } + function evalPropertyAccessToken(token, ctx, lenient) { + var props, _a, _b, prop, _c, _d, e_3_1, variable, e_4; + var e_3, _e; + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + props = []; + _f.label = 1; + case 1: + _f.trys.push([1, 6, 7, 8]); + _a = __values(token.props), _b = _a.next(); + _f.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 5]; + prop = _b.value; + _d = (_c = props).push; + return [4 /*yield*/, evalToken(prop, ctx, false)]; + case 3: + _d.apply(_c, [(_f.sent())]); + _f.label = 4; + case 4: + _b = _a.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_3_1 = _f.sent(); + e_3 = { error: e_3_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (_b && !_b.done && (_e = _a.return)) _e.call(_a); + } + finally { if (e_3) throw e_3.error; } + return [7 /*endfinally*/]; + case 8: + _f.trys.push([8, 14, , 15]); + if (!token.variable) return [3 /*break*/, 11]; + return [4 /*yield*/, evalToken(token.variable, ctx, lenient)]; + case 9: + variable = _f.sent(); + return [4 /*yield*/, ctx._getFromScope(variable, props)]; + case 10: return [2 /*return*/, _f.sent()]; + case 11: return [4 /*yield*/, ctx._get(props)]; + case 12: return [2 /*return*/, _f.sent()]; + case 13: return [3 /*break*/, 15]; + case 14: + e_4 = _f.sent(); + if (lenient && e_4.name === 'InternalUndefinedVariableError') + return [2 /*return*/, null]; + throw (new UndefinedVariableError(e_4, token)); + case 15: return [2 /*return*/]; + } + }); + } + function evalQuotedToken(token) { + return token.content; + } + function evalRangeToken(token, ctx) { + var low, high; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, evalToken(token.lhs, ctx)]; + case 1: + low = _a.sent(); + return [4 /*yield*/, evalToken(token.rhs, ctx)]; + case 2: + high = _a.sent(); + ctx.memoryLimit.use(high - low + 1); + return [2 /*return*/, range(+low, +high + 1)]; + } + }); + } + function toPostfix(tokens) { + var ops, tokens_1, tokens_1_1, token, e_5_1; + var e_5, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + ops = []; + _b.label = 1; + case 1: + _b.trys.push([1, 10, 11, 12]); + tokens_1 = __values(tokens), tokens_1_1 = tokens_1.next(); + _b.label = 2; + case 2: + if (!!tokens_1_1.done) return [3 /*break*/, 9]; + token = tokens_1_1.value; + if (!isOperatorToken(token)) return [3 /*break*/, 6]; + _b.label = 3; + case 3: + if (!(ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence())) return [3 /*break*/, 5]; + return [4 /*yield*/, ops.pop()]; + case 4: + _b.sent(); + return [3 /*break*/, 3]; + case 5: + ops.push(token); + return [3 /*break*/, 8]; + case 6: return [4 /*yield*/, token]; + case 7: + _b.sent(); + _b.label = 8; + case 8: + tokens_1_1 = tokens_1.next(); + return [3 /*break*/, 2]; + case 9: return [3 /*break*/, 12]; + case 10: + e_5_1 = _b.sent(); + e_5 = { error: e_5_1 }; + return [3 /*break*/, 12]; + case 11: + try { + if (tokens_1_1 && !tokens_1_1.done && (_a = tokens_1.return)) _a.call(tokens_1); + } + finally { if (e_5) throw e_5.error; } + return [7 /*endfinally*/]; + case 12: + if (!ops.length) return [3 /*break*/, 14]; + return [4 /*yield*/, ops.pop()]; + case 13: + _b.sent(); + return [3 /*break*/, 12]; + case 14: return [2 /*return*/]; + } + }); + } + + function isTruthy(val, ctx) { + return !isFalsy(val, ctx); + } + function isFalsy(val, ctx) { + val = toValue(val); + if (ctx.opts.jsTruthy) { + return !val; + } + else { + return val === false || undefined === val || val === null; + } + } + + var defaultOperators = { + '==': equals, + '!=': function (l, r) { return !equals(l, r); }, + '>': function (l, r) { + if (isComparable(l)) + return l.gt(r); + if (isComparable(r)) + return r.lt(l); + return toValue(l) > toValue(r); + }, + '<': function (l, r) { + if (isComparable(l)) + return l.lt(r); + if (isComparable(r)) + return r.gt(l); + return toValue(l) < toValue(r); + }, + '>=': function (l, r) { + if (isComparable(l)) + return l.geq(r); + if (isComparable(r)) + return r.leq(l); + return toValue(l) >= toValue(r); + }, + '<=': function (l, r) { + if (isComparable(l)) + return l.leq(r); + if (isComparable(r)) + return r.geq(l); + return toValue(l) <= toValue(r); + }, + 'contains': function (l, r) { + l = toValue(l); + if (isArray(l)) + return l.some(function (i) { return equals(i, r); }); + if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf)) + return l.indexOf(toValue(r)) > -1; + return false; + }, + 'not': function (v, ctx) { return isFalsy(toValue(v), ctx); }, + 'and': function (l, r, ctx) { return isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx); }, + 'or': function (l, r, ctx) { return isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx); } + }; + function equals(lhs, rhs) { + if (isComparable(lhs)) + return lhs.equals(rhs); + if (isComparable(rhs)) + return rhs.equals(lhs); + lhs = toValue(lhs); + rhs = toValue(rhs); + if (isArray(lhs)) { + return isArray(rhs) && arrayEquals(lhs, rhs); + } + return lhs === rhs; + } + function arrayEquals(lhs, rhs) { + if (lhs.length !== rhs.length) + return false; + return !lhs.some(function (value, i) { return !equals(value, rhs[i]); }); + } + function arrayIncludes(arr, item) { + return arr.some(function (value) { return equals(value, item); }); + } + + var Node = /** @class */ (function () { + function Node(key, value, next, prev) { + this.key = key; + this.value = value; + this.next = next; + this.prev = prev; + } + return Node; + }()); + var LRU = /** @class */ (function () { + function LRU(limit, size) { + if (size === void 0) { size = 0; } + this.limit = limit; + this.size = size; + this.cache = {}; + this.head = new Node('HEAD', null, null, null); + this.tail = new Node('TAIL', null, null, null); + this.head.next = this.tail; + this.tail.prev = this.head; + } + LRU.prototype.write = function (key, value) { + if (this.cache[key]) { + this.cache[key].value = value; + } + else { + var node = new Node(key, value, this.head.next, this.head); + this.head.next.prev = node; + this.head.next = node; + this.cache[key] = node; + this.size++; + this.ensureLimit(); + } + }; + LRU.prototype.read = function (key) { + if (!this.cache[key]) + return; + var value = this.cache[key].value; + this.remove(key); + this.write(key, value); + return value; + }; + LRU.prototype.remove = function (key) { + var node = this.cache[key]; + node.prev.next = node.next; + node.next.prev = node.prev; + delete this.cache[key]; + this.size--; + }; + LRU.prototype.clear = function () { + this.head.next = this.tail; + this.tail.prev = this.head; + this.size = 0; + this.cache = {}; + }; + LRU.prototype.ensureLimit = function () { + if (this.size > this.limit) + this.remove(this.tail.prev.key); + }; + return LRU; + }()); + + function domResolve(root, path) { + var base = document.createElement('base'); + base.href = root; + var head = document.getElementsByTagName('head')[0]; + head.insertBefore(base, head.firstChild); + var a = document.createElement('a'); + a.href = path; + var resolved = a.href; + head.removeChild(base); + return resolved; + } + function resolve(root, filepath, ext) { + if (root.length && last(root) !== '/') + root += '/'; + var url = domResolve(root, filepath); + return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, function (str, origin, path) { + var last = path.split('/').pop(); + if (/\.\w+$/.test(last)) + return str; + return origin + path + ext; + }); + } + function readFile(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + if (xhr.status >= 200 && xhr.status < 300) { + resolve(xhr.responseText); + } + else { + reject(new Error(xhr.statusText)); + } + }; + xhr.onerror = function () { + reject(new Error('An error occurred whilst receiving the response.')); + }; + xhr.open('GET', url); + xhr.send(); + })]; + }); + }); + } + function readFileSync(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(); + if (xhr.status < 200 || xhr.status >= 300) { + throw new Error(xhr.statusText); + } + return xhr.responseText; + } + function exists(filepath) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, true]; + }); + }); + } + function existsSync(filepath) { + return true; + } + function dirname(filepath) { + return domResolve(filepath, '.'); + } + var sep = '/'; + + var fs = /*#__PURE__*/Object.freeze({ + __proto__: null, + resolve: resolve, + readFile: readFile, + readFileSync: readFileSync, + exists: exists, + existsSync: existsSync, + dirname: dirname, + sep: sep + }); + + function chargeJsonReplacerValue(memoryLimit, val) { + if (typeof val === 'string') { + memoryLimit.use(val.length); + } + else if (val === null || typeof val === 'number' || typeof val === 'boolean') { + memoryLimit.use(JSON.stringify(val).length); + } + else if (Array.isArray(val)) { + memoryLimit.use(val.length + 1); + } + else if (typeof val === 'object') { + memoryLimit.use(2); + } + } + function defaultFilter(value, defaultValue) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + value = toValue(value); + if (isArray(value) || isString(value)) + return value.length ? value : defaultValue; + if (value === false && (new Map(args)).get('allow_false')) + return false; + return isFalsy(value, this.context) ? defaultValue : value; + } + function json(value, space) { + if (space === void 0) { space = 0; } + var memoryLimit = this.context.memoryLimit; + return JSON.stringify(value, function (_key, val) { + chargeJsonReplacerValue(memoryLimit, val); + return val; + }, space); + } + function inspect(value, space) { + if (space === void 0) { space = 0; } + var memoryLimit = this.context.memoryLimit; + var ancestors = []; + return JSON.stringify(value, function (_key, value) { + if (typeof value !== 'object' || value === null) { + chargeJsonReplacerValue(memoryLimit, value); + return value; + } + // `this` is the object that value is contained in, i.e., its direct parent. + while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) + ancestors.pop(); + if (ancestors.includes(value)) { + memoryLimit.use('[Circular]'.length); + return '[Circular]'; + } + ancestors.push(value); + chargeJsonReplacerValue(memoryLimit, value); + return value; + }, space); + } + function to_integer(value) { + return Number(value); + } + var raw = { + raw: true, + handler: identify + }; + var misc = { + default: defaultFilter, + raw: raw, + jsonify: json, + to_integer: to_integer, + json: json, + inspect: inspect + }; + + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + function escape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); + } + function xml_escape(str) { + return escape.call(this, str); + } + function unescape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); + } + function escape_once(str) { + return escape.call(this, unescape.call(this, str)); + } + function newline_to_br(v) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, '
\n'); + } + // Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex + // equivalent is O(n^2) in V8 on unclosed openers. + function strip_html(v) { + var e_1, _a; + var str = stringify(v); + this.context.memoryLimit.use(str.length); + var blocks = new Map([[''], [''], [''], ['<', '>']]); + var out = ''; + var i = 0; + while (i < str.length) { + var lt = str.indexOf('<', i); + if (lt < 0) + return out + str.slice(i); + out += str.slice(i, lt); + try { + for (var blocks_1 = (e_1 = void 0, __values(blocks)), blocks_1_1 = blocks_1.next(); !blocks_1_1.done; blocks_1_1 = blocks_1.next()) { + var _b = __read(blocks_1_1.value, 2), opener_1 = _b[0], closer = _b[1]; + if (!str.startsWith(opener_1, lt)) + continue; + var e = str.indexOf(closer, lt + opener_1.length); + if (e >= 0) { + i = e + closer.length; + break; + } + blocks.delete(opener_1); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (blocks_1_1 && !blocks_1_1.done && (_a = blocks_1.return)) _a.call(blocks_1); + } + finally { if (e_1) throw e_1.error; } + } + if (i <= lt) + return out + str.slice(lt); + } + return out; + } + + var htmlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + escape: escape, + xml_escape: xml_escape, + escape_once: escape_once, + newline_to_br: newline_to_br, + strip_html: strip_html + }); + + var MapFS = /** @class */ (function () { + function MapFS(mapping) { + this.mapping = mapping; + this.sep = '/'; + } + MapFS.prototype.exists = function (filepath) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.existsSync(filepath)]; + }); + }); + }; + MapFS.prototype.existsSync = function (filepath) { + return !isNil(this.mapping[filepath]); + }; + MapFS.prototype.readFile = function (filepath) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.readFileSync(filepath)]; + }); + }); + }; + MapFS.prototype.readFileSync = function (filepath) { + var content = this.mapping[filepath]; + if (isNil(content)) + throw new Error("ENOENT: ".concat(filepath)); + return content; + }; + MapFS.prototype.dirname = function (filepath) { + var segments = filepath.split(this.sep); + segments.pop(); + return segments.join(this.sep); + }; + MapFS.prototype.resolve = function (dir, file, ext) { + var e_1, _a; + file += ext; + if (dir === '.') + return file; + var segments = dir.split(/\/+/); + try { + for (var _b = __values(file.split(this.sep)), _c = _b.next(); !_c.done; _c = _b.next()) { + var segment = _c.value; + if (segment === '.' || segment === '') + continue; + else if (segment === '..') { + if (segments.length > 1 || segments[0] !== '') + segments.pop(); + } + else + segments.push(segment); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + return segments.join(this.sep); + }; + return MapFS; + }()); + + var defaultOptions = { + root: ['.'], + layouts: ['.'], + partials: ['.'], + relativeReference: true, + jekyllInclude: false, + keyValueSeparator: ':', + cache: undefined, + extname: '', + fs: fs, + dynamicPartials: true, + jsTruthy: false, + dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z', + locale: '', + trimTagRight: false, + trimTagLeft: false, + trimOutputRight: false, + trimOutputLeft: false, + greedy: true, + tagDelimiterLeft: '{%', + tagDelimiterRight: '%}', + outputDelimiterLeft: '{{', + outputDelimiterRight: '}}', + preserveTimezones: false, + strictFilters: false, + strictVariables: false, + ownPropertyOnly: true, + lenientIf: false, + globals: {}, + keepOutputType: false, + operators: defaultOperators, + groupedExpressions: false, + memoryLimit: Infinity, + parseLimit: Infinity, + renderLimit: Infinity + }; + function normalize(options) { + var _a, _b; + if (options.hasOwnProperty('root')) { + if (!options.hasOwnProperty('partials')) + options.partials = options.root; + if (!options.hasOwnProperty('layouts')) + options.layouts = options.root; + } + if (options.hasOwnProperty('cache')) { + var cache = void 0; + if (typeof options.cache === 'number') + cache = options.cache > 0 ? new LRU(options.cache) : undefined; + else if (typeof options.cache === 'object') + cache = options.cache; + else + cache = options.cache ? new LRU(1024) : undefined; + options.cache = cache; + } + options = __assign(__assign(__assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options); + if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) { + console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning'); + options.relativeReference = false; + } + options.root = normalizeDirectoryList(options.root); + options.partials = normalizeDirectoryList(options.partials); + options.layouts = normalizeDirectoryList(options.layouts); + options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape); + if (!options.locale) { + options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US'; + } + if (options.templates) { + options.fs = new MapFS(options.templates); + options.relativeReference = true; + options.root = options.partials = options.layouts = '.'; + } + return options; + } + function getOutputEscapeFunction(nameOrFunction) { + if (nameOrFunction === 'escape') + return escape; + if (nameOrFunction === 'json') + return misc.json; + assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function'); + return nameOrFunction; + } + function normalizeDirectoryList(value) { + var list = []; + if (isArray(value)) + list = value; + if (isString(value)) + list = [value]; + return list; + } + + function whiteSpaceCtrl(tokens, options) { + var inRaw = false; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (!isDelimitedToken(token)) + continue; + if (!inRaw && token.trimLeft) { + trimLeft(tokens[i - 1], options.greedy); + } + if (isTagToken(token)) { + if (token.name === 'raw') + inRaw = true; + else if (token.name === 'endraw') + inRaw = false; + } + if (!inRaw && token.trimRight) { + trimRight(tokens[i + 1], options.greedy); + } + } + } + function trimLeft(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + var mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) + token.trimRight++; + } + function trimRight(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + var mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) + token.trimLeft++; + if (token.input.charAt(token.begin + token.trimLeft) === '\n') + token.trimLeft++; + } + + var Tokenizer = /** @class */ (function () { + function Tokenizer(input, operators, file, range, groupedExpressions) { + if (operators === void 0) { operators = defaultOptions.operators; } + if (groupedExpressions === void 0) { groupedExpressions = false; } + this.input = input; + this.file = file; + this.rawBeginAt = -1; + this.p = range ? range[0] : 0; + this.N = range ? range[1] : input.length; + this.opTrie = createTrie(operators); + this.literalTrie = createTrie(literalValues); + this.groupedExpressions = groupedExpressions; + } + Tokenizer.prototype.readExpression = function () { + return new Expression(this.readExpressionTokens()); + }; + Tokenizer.prototype.readExpressionTokens = function () { + var operator, operand; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(this.p < this.N)) return [3 /*break*/, 5]; + operator = this.readOperator(); + if (!operator) return [3 /*break*/, 2]; + return [4 /*yield*/, operator]; + case 1: + _a.sent(); + return [3 /*break*/, 0]; + case 2: + operand = this.readValue(); + if (!operand) return [3 /*break*/, 4]; + return [4 /*yield*/, operand]; + case 3: + _a.sent(); + return [3 /*break*/, 0]; + case 4: return [2 /*return*/]; + case 5: return [2 /*return*/]; + } + }); + }; + Tokenizer.prototype.readOperator = function () { + this.skipBlank(); + var end = this.matchTrie(this.opTrie); + if (end === -1) + return; + return new OperatorToken(this.input, this.p, (this.p = end), this.file); + }; + Tokenizer.prototype.matchTrie = function (trie) { + var node = trie; + var i = this.p; + var info; + while (node[this.input[i]] && i < this.N) { + node = node[this.input[i++]]; + if (node['end']) + info = node; + } + if (!info) + return -1; + if (info['needBoundary'] && isWord(this.peek(i - this.p))) + return -1; + return i; + }; + Tokenizer.prototype.readFilteredValue = function () { + var begin = this.p; + var initial = this.readExpression(); + this.assert(initial.valid(), "invalid value expression: ".concat(this.snapshot())); + var filters = this.readFilters(); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + }; + Tokenizer.prototype.readFilters = function () { + var filters = []; + while (true) { + var filter = this.readFilter(); + if (!filter) + return filters; + filters.push(filter); + } + }; + Tokenizer.prototype.readFilter = function () { + var _this = this; + this.skipBlank(); + if (this.end()) + return null; + if (this.peek() === ')') + return null; + this.assert(this.read() === '|', "expected \"|\" before filter"); + var name = this.readIdentifier(); + if (!name.size()) { + this.assert(this.end(), "expected filter name"); + return null; + } + var args = []; + this.skipBlank(); + if (this.peek() === ':') { + do { + ++this.p; + var arg = this.readFilterArg(); + arg && args.push(arg); + this.skipBlank(); + this.assert(this.end() || this.peek() === ',' || this.peek() === '|' || this.peek() === ')', function () { return "unexpected character ".concat(_this.snapshot()); }); + } while (this.peek() === ','); + } + else if (this.peek() === '|' || this.peek() === ')' || this.end()) ; + else { + throw this.error('expected ":" after filter name'); + } + return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file); + }; + Tokenizer.prototype.readFilterArg = function () { + var key = this.readValue(); + if (!key) + return; + this.skipBlank(); + if (this.peek() !== ':') + return key; + ++this.p; + var value = this.readValue(); + return [key.getText(), value]; + }; + Tokenizer.prototype.readTopLevelTokens = function (options) { + if (options === void 0) { options = defaultOptions; } + var tokens = []; + while (this.p < this.N) { + var token = this.readTopLevelToken(options); + tokens.push(token); + } + whiteSpaceCtrl(tokens, options); + return tokens; + }; + Tokenizer.prototype.readTopLevelToken = function (options) { + var tagDelimiterLeft = options.tagDelimiterLeft, outputDelimiterLeft = options.outputDelimiterLeft; + if (this.rawBeginAt > -1) + return this.readEndrawOrRawContent(options); + if (this.match(tagDelimiterLeft)) + return this.readTagToken(options); + if (this.match(outputDelimiterLeft)) + return this.readOutputToken(options); + return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]); + }; + Tokenizer.prototype.readHTMLToken = function (stopStrings) { + var _this = this; + var begin = this.p; + while (this.p < this.N) { + if (stopStrings.some(function (str) { return _this.match(str); })) + break; + ++this.p; + } + return new HTMLToken(this.input, begin, this.p, this.file); + }; + Tokenizer.prototype.readTagToken = function (options) { + var _a = this, file = _a.file, input = _a.input; + var begin = this.p; + if (this.readToDelimiter(options.tagDelimiterRight) === -1) { + throw this.error("tag ".concat(this.snapshot(begin), " not closed"), begin); + } + var token = new TagToken(input, begin, this.p, options, file); + if (token.name === 'raw') + this.rawBeginAt = begin; + return token; + }; + Tokenizer.prototype.readToDelimiter = function (delimiter, respectQuoted) { + if (respectQuoted === void 0) { respectQuoted = false; } + this.skipBlank(); + while (this.p < this.N) { + if (respectQuoted && (this.peekType() & QUOTE)) { + this.readQuoted(); + continue; + } + ++this.p; + if (this.rmatch(delimiter)) + return this.p; + } + return -1; + }; + Tokenizer.prototype.readOutputToken = function (options) { + if (options === void 0) { options = defaultOptions; } + var _a = this, file = _a.file, input = _a.input; + var outputDelimiterRight = options.outputDelimiterRight; + var begin = this.p; + if (this.readToDelimiter(outputDelimiterRight, true) === -1) { + throw this.error("output ".concat(this.snapshot(begin), " not closed"), begin); + } + return new OutputToken(input, begin, this.p, options, file); + }; + Tokenizer.prototype.readEndrawOrRawContent = function (options) { + var tagDelimiterLeft = options.tagDelimiterLeft, tagDelimiterRight = options.tagDelimiterRight; + var begin = this.p; + var leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + while (this.p < this.N) { + if (this.readIdentifier().getText() !== 'endraw') { + leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + continue; + } + while (this.p <= this.N) { + if (this.rmatch(tagDelimiterRight)) { + var end = this.p; + if (begin === leftPos) { + this.rawBeginAt = -1; + return new TagToken(this.input, begin, end, options, this.file); + } + else { + this.p = leftPos; + return new HTMLToken(this.input, begin, leftPos, this.file); + } + } + if (this.rmatch(tagDelimiterLeft)) + break; + this.p++; + } + } + throw this.error("raw ".concat(this.snapshot(this.rawBeginAt), " not closed"), begin); + }; + Tokenizer.prototype.readLiquidTagTokens = function (options) { + if (options === void 0) { options = defaultOptions; } + var tokens = []; + while (this.p < this.N) { + var token = this.readLiquidTagToken(options); + token && tokens.push(token); + } + return tokens; + }; + Tokenizer.prototype.readLiquidTagToken = function (options) { + this.skipBlank(); + if (this.end()) + return; + var begin = this.p; + this.readToDelimiter('\n'); + var end = this.p; + return new LiquidTagToken(this.input, begin, end, options, this.file); + }; + Tokenizer.prototype.error = function (msg, pos) { + if (pos === void 0) { pos = this.p; } + return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file)); + }; + Tokenizer.prototype.assert = function (pred, msg, pos) { + if (!pred) + throw this.error(typeof msg === 'function' ? msg() : msg, pos); + }; + Tokenizer.prototype.snapshot = function (begin) { + if (begin === void 0) { begin = this.p; } + return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32)); + }; + /** + * @deprecated use #readIdentifier instead + */ + Tokenizer.prototype.readWord = function () { + return this.readIdentifier(); + }; + Tokenizer.prototype.readIdentifier = function () { + this.skipBlank(); + var begin = this.p; + while (!this.end() && isWord(this.peek())) + ++this.p; + return new IdentifierToken(this.input, begin, this.p, this.file); + }; + Tokenizer.prototype.readNonEmptyIdentifier = function () { + var id = this.readIdentifier(); + return id.size() ? id : undefined; + }; + Tokenizer.prototype.readTagName = function () { + this.skipBlank(); + // Handle inline comment tags + if (this.input[this.p] === '#') + return this.input.slice(this.p, ++this.p); + return this.readIdentifier().getText(); + }; + Tokenizer.prototype.readHashes = function (jekyllStyle) { + var hashes = []; + while (true) { + var hash = this.readHash(jekyllStyle); + if (!hash) + return hashes; + hashes.push(hash); + } + }; + Tokenizer.prototype.readHash = function (jekyllStyle) { + this.skipBlank(); + if (this.peek() === ',') + ++this.p; + var begin = this.p; + var name = this.readNonEmptyIdentifier(); + if (!name) + return; + var value; + this.skipBlank(); + var sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':'); + if (this.peek() === sep) { + ++this.p; + value = this.readValue(); + } + return new HashToken(this.input, begin, this.p, name, value, this.file); + }; + Tokenizer.prototype.remaining = function () { + return this.input.slice(this.p, this.N); + }; + Tokenizer.prototype.advance = function (step) { + if (step === void 0) { step = 1; } + this.p += step; + }; + Tokenizer.prototype.end = function () { + return this.p >= this.N; + }; + Tokenizer.prototype.read = function () { + return this.input[this.p++]; + }; + Tokenizer.prototype.readTo = function (end) { + while (this.p < this.N) { + ++this.p; + if (this.rmatch(end)) + return this.p; + } + return -1; + }; + Tokenizer.prototype.readValue = function () { + this.skipBlank(); + var begin = this.p; + var variable = this.readLiteral() || this.readQuoted() || this.readNumber(); + if (!variable && this.peek() === '(') { + variable = this.readGroupOrRange(); + } + var props = this.readProperties(!variable); + if (!props.length) + return variable; + return new PropertyAccessToken(variable, props, this.input, begin, this.p); + }; + Tokenizer.prototype.readScopeValue = function () { + this.skipBlank(); + var begin = this.p; + var props = this.readProperties(); + if (!props.length) + return undefined; + return new PropertyAccessToken(undefined, props, this.input, begin, this.p); + }; + Tokenizer.prototype.readProperties = function (isBegin) { + if (isBegin === void 0) { isBegin = true; } + var props = []; + while (true) { + if (this.peek() === '[') { + this.p++; + var prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file); + this.assert(this.readTo(']') !== -1, '[ not closed'); + props.push(prop); + continue; + } + if (isBegin && !props.length) { + var prop = this.readNonEmptyIdentifier(); + if (prop) { + props.push(prop); + continue; + } + } + if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax + this.p++; + var prop = this.readNonEmptyIdentifier(); + if (!prop) + break; + props.push(prop); + continue; + } + break; + } + return props; + }; + Tokenizer.prototype.readNumber = function () { + this.skipBlank(); + var decimalFound = false; + var digitFound = false; + var n = 0; + if (this.peekType() & SIGN) + n++; + while (this.p + n <= this.N) { + if (this.peekType(n) & NUMBER) { + digitFound = true; + n++; + } + else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') { + if (decimalFound || !digitFound) + return; + decimalFound = true; + n++; + } + else + break; + } + if (digitFound && !isWord(this.peek(n))) { + var num = new NumberToken(this.input, this.p, this.p + n, this.file); + this.advance(n); + return num; + } + }; + Tokenizer.prototype.readLiteral = function () { + this.skipBlank(); + var end = this.matchTrie(this.literalTrie); + if (end === -1) + return; + var literal = new LiteralToken(this.input, this.p, end, this.file); + this.p = end; + return literal; + }; + Tokenizer.prototype.readGroupOrRange = function () { + var _this = this; + this.skipBlank(); + var begin = this.p; + if (this.peek() !== '(') + return; + ++this.p; + var lhs = this.readValueOrThrow(); + this.skipBlank(); + if (this.peek() === '.' && this.peek(1) === '.') { + this.p += 2; + var rhs = this.readValueOrThrow(); + this.skipBlank(); + this.assert(this.read() === ')', 'invalid range syntax'); + return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file); + } + if (this.groupedExpressions) { + var initial = new Expression(__spreadArray([lhs], __read(this.readExpressionTokens()), false)); + this.assert(initial.valid(), function () { return "invalid value expression: ".concat(_this.snapshot()); }); + var filters = this.readFilters(); + this.skipBlank(); + this.assert(this.read() === ')', 'unbalanced parentheses'); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + throw this.error('invalid range syntax'); + }; + Tokenizer.prototype.readValueOrThrow = function () { + var _this = this; + var value = this.readValue(); + this.assert(value, function () { return "unexpected token ".concat(_this.snapshot(), ", value expected"); }); + return value; + }; + Tokenizer.prototype.readQuoted = function () { + this.skipBlank(); + var begin = this.p; + if (!(this.peekType() & QUOTE)) + return; + ++this.p; + var escaped = false; + while (this.p < this.N) { + ++this.p; + if (this.input[this.p - 1] === this.input[begin] && !escaped) + break; + if (escaped) + escaped = false; + else if (this.input[this.p - 1] === '\\') + escaped = true; + } + return new QuotedToken(this.input, begin, this.p, this.file); + }; + Tokenizer.prototype.readFileNameTemplate = function (options) { + var outputDelimiterLeft, htmlStopStrings, htmlStopStringSet; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + outputDelimiterLeft = options.outputDelimiterLeft; + htmlStopStrings = [',', ' ', '\r', '\n', '\t', outputDelimiterLeft]; + htmlStopStringSet = new Set(htmlStopStrings); + _a.label = 1; + case 1: + if (!(this.p < this.N && !htmlStopStringSet.has(this.peek()))) return [3 /*break*/, 3]; + return [4 /*yield*/, this.match(outputDelimiterLeft) + ? this.readOutputToken(options) + : this.readHTMLToken(htmlStopStrings)]; + case 2: + _a.sent(); + return [3 /*break*/, 1]; + case 3: return [2 /*return*/]; + } + }); + }; + Tokenizer.prototype.match = function (word) { + for (var i = 0; i < word.length; i++) { + if (word[i] !== this.input[this.p + i]) + return false; + } + return true; + }; + Tokenizer.prototype.rmatch = function (pattern) { + for (var i = 0; i < pattern.length; i++) { + if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) + return false; + } + return true; + }; + Tokenizer.prototype.peekType = function (n) { + if (n === void 0) { n = 0; } + return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)]; + }; + Tokenizer.prototype.peek = function (n) { + if (n === void 0) { n = 0; } + return this.p + n >= this.N ? '' : this.input[this.p + n]; + }; + Tokenizer.prototype.skipBlank = function () { + while (this.peekType() & BLANK) + ++this.p; + }; + return Tokenizer; + }()); + + var ParseStream = /** @class */ (function () { + function ParseStream(tokens, parseToken) { + this.handlers = {}; + this.stopRequested = false; + this.tokens = tokens; + this.parseToken = parseToken; + } + ParseStream.prototype.on = function (name, cb) { + this.handlers[name] = cb; + return this; + }; + ParseStream.prototype.trigger = function (event, arg) { + var h = this.handlers[event]; + return h ? (h.call(this, arg), true) : false; + }; + ParseStream.prototype.start = function () { + this.trigger('start'); + var token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (isTagToken(token) && this.trigger("tag:".concat(token.name), token)) { + continue; + } + var template = this.parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + }; + ParseStream.prototype.stop = function () { + this.stopRequested = true; + return this; + }; + return ParseStream; + }()); + + var TemplateImpl = /** @class */ (function () { + function TemplateImpl(token) { + this.token = token; + } + return TemplateImpl; + }()); + + var Tag = /** @class */ (function (_super) { + __extends(Tag, _super); + function Tag(token, remainTokens, liquid) { + var _this = _super.call(this, token) || this; + _this.name = token.name; + _this.liquid = liquid; + _this.tokenizer = token.tokenizer; + return _this; + } + return Tag; + }(TemplateImpl)); + + /** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ + var Hash = /** @class */ (function () { + function Hash(input, jekyllStyle) { + var e_1, _a; + this.hash = {}; + var tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {}); + try { + for (var _b = __values(tokenizer.readHashes(jekyllStyle)), _c = _b.next(); !_c.done; _c = _b.next()) { + var hash = _c.value; + this.hash[hash.name.content] = hash.value; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + } + Hash.prototype.render = function (ctx) { + var hash, _a, _b, key, _c, _d, _e, e_2_1; + var e_2, _f; + return __generator(this, function (_g) { + switch (_g.label) { + case 0: + hash = {}; + _g.label = 1; + case 1: + _g.trys.push([1, 8, 9, 10]); + _a = __values(Object.keys(this.hash)), _b = _a.next(); + _g.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 7]; + key = _b.value; + _c = hash; + _d = key; + if (!(this.hash[key] === undefined)) return [3 /*break*/, 3]; + _e = true; + return [3 /*break*/, 5]; + case 3: return [4 /*yield*/, evalToken(this.hash[key], ctx)]; + case 4: + _e = _g.sent(); + _g.label = 5; + case 5: + _c[_d] = _e; + _g.label = 6; + case 6: + _b = _a.next(); + return [3 /*break*/, 2]; + case 7: return [3 /*break*/, 10]; + case 8: + e_2_1 = _g.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 10]; + case 9: + try { + if (_b && !_b.done && (_f = _a.return)) _f.call(_a); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 10: return [2 /*return*/, hash]; + } + }); + }; + return Hash; + }()); + + function createTagClass(options) { + return /** @class */ (function (_super) { + __extends(class_1, _super); + function class_1(token, tokens, liquid) { + var _this = _super.call(this, token, tokens, liquid) || this; + if (isFunction(options.parse)) { + options.parse.call(_this, token, tokens); + } + return _this; + } + class_1.prototype.render = function (ctx, emitter) { + var hash; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx)]; + case 1: + hash = (_a.sent()); + return [4 /*yield*/, options.render.call(this, ctx, emitter, hash)]; + case 2: return [2 /*return*/, _a.sent()]; + } + }); + }; + return class_1; + }(Tag)); + } + + var Value = /** @class */ (function () { + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + function Value(input, liquid) { + var _this = this; + this.filters = []; + var token = typeof input === 'string' + ? new Tokenizer(input, liquid.options.operators, undefined, undefined, liquid.options.groupedExpressions).readFilteredValue() + : input; + this.initial = token.initial; + this.filters = token.filters.map(function (token) { return new Filter(token, _this.getFilter(liquid, token.name), liquid); }); + } + Value.prototype.value = function (ctx, lenient) { + var val, _a, _b, filter, e_1_1; + var e_1, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default'); + return [4 /*yield*/, this.initial.evaluate(ctx, lenient)]; + case 1: + val = _d.sent(); + _d.label = 2; + case 2: + _d.trys.push([2, 7, 8, 9]); + _a = __values(this.filters), _b = _a.next(); + _d.label = 3; + case 3: + if (!!_b.done) return [3 /*break*/, 6]; + filter = _b.value; + return [4 /*yield*/, filter.render(val, ctx)]; + case 4: + val = _d.sent(); + _d.label = 5; + case 5: + _b = _a.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _d.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/, val]; + } + }); + }; + Value.prototype.getFilter = function (liquid, name) { + var impl = liquid.filters[name]; + assert(impl || !liquid.options.strictFilters, function () { return "undefined filter: ".concat(name); }); + return impl; + }; + return Value; + }()); + + var Output = /** @class */ (function (_super) { + __extends(Output, _super); + function Output(token, liquid) { + var _this = this; + var _a; + _this = _super.call(this, token) || this; + var tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange, liquid.options.groupedExpressions); + _this.value = new Value(tokenizer.readFilteredValue(), liquid); + var filters = _this.value.filters; + var outputEscape = liquid.options.outputEscape; + if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) { + var token_1 = new FilterToken(toString.call(outputEscape), [], '', 0, 0); + filters.push(new Filter(token_1, outputEscape, liquid)); + } + return _this; + } + Output.prototype.render = function (ctx, emitter) { + var val; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.value.value(ctx, false)]; + case 1: + val = _a.sent(); + emitter.write(val); + return [2 /*return*/]; + } + }); + }; + Output.prototype.arguments = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.value]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + return Output; + }(TemplateImpl)); + + var HTML = /** @class */ (function (_super) { + __extends(HTML, _super); + function HTML(token) { + var _this = _super.call(this, token) || this; + _this.str = token.getContent(); + return _this; + } + HTML.prototype.render = function (ctx, emitter) { + return __generator(this, function (_a) { + emitter.write(this.str); + return [2 /*return*/]; + }); + }; + return HTML; + }(TemplateImpl)); + + /** + * A variable's segments and location, which can be coerced to a string. + */ + var Variable = /** @class */ (function () { + function Variable(segments, location) { + this.segments = segments; + this.location = location; + } + Variable.prototype.toString = function () { + return segmentsString(this.segments, true); + }; + /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */ + Variable.prototype.toArray = function () { + function _visit() { + var _i, segments_1, segments_1_1, segment, e_1_1; + var e_1, _a; + var segments = []; + for (_i = 0; _i < arguments.length; _i++) { + segments[_i] = arguments[_i]; + } + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 7, 8, 9]); + segments_1 = __values(segments), segments_1_1 = segments_1.next(); + _b.label = 1; + case 1: + if (!!segments_1_1.done) return [3 /*break*/, 6]; + segment = segments_1_1.value; + if (!(segment instanceof Variable)) return [3 /*break*/, 3]; + return [4 /*yield*/, Array.from(_visit.apply(void 0, __spreadArray([], __read(segment.segments), false)))]; + case 2: + _b.sent(); + return [3 /*break*/, 5]; + case 3: return [4 /*yield*/, segment]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + segments_1_1 = segments_1.next(); + return [3 /*break*/, 1]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _b.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (segments_1_1 && !segments_1_1.done && (_a = segments_1.return)) _a.call(segments_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); + } + return Array.from(_visit.apply(void 0, __spreadArray([], __read(this.segments), false))); + }; + return Variable; + }()); + /** + * Group variables by the string representation of their root segment. + */ + var VariableMap = /** @class */ (function () { + function VariableMap() { + this.map = new Map(); + } + VariableMap.prototype.get = function (key) { + var k = segmentsString([key.segments[0]]); + if (!this.map.has(k)) { + this.map.set(k, []); + } + return this.map.get(k); + }; + VariableMap.prototype.has = function (key) { + return this.map.has(segmentsString([key.segments[0]])); + }; + VariableMap.prototype.push = function (variable) { + this.get(variable).push(variable); + }; + VariableMap.prototype.asObject = function () { + return Object.fromEntries(this.map); + }; + return VariableMap; + }()); + var defaultStaticAnalysisOptions = { + partials: true + }; + function _analyze(templates, partials, sync) { + function updateVariables(variable, scope) { + var e_3, _a; + variables.push(variable); + var aliased = scope.alias(variable); + if (aliased !== undefined) { + var root = aliased.segments[0]; + // TODO: What if a a template renders a rendered template? Do we need scope.parent? + if (isString(root) && !rootScope.has(root)) { + globals.push(aliased); + } + } + else { + var root = variable.segments[0]; + if (isString(root) && !scope.has(root)) { + globals.push(variable); + } + } + try { + // Recurse for nested Variables + for (var _b = __values(variable.segments), _c = _b.next(); !_c.done; _c = _b.next()) { + var segment = _c.value; + if (segment instanceof Variable) { + updateVariables(segment, scope); + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_3) throw e_3.error; } + } + } + function visit(template, scope) { + var _a, _b, arg, _c, _d, variable, _e, _f, ident, _g, row, col, partial, _h, _j, child, e_4_1, partialScopeNames, partialScope, _k, _l, name_1, _m, alias, argument, variables_1, _o, _p, child, e_5_1, _q, _r, child, e_6_1; + var e_7, _s, e_8, _t, e_9, _u, e_4, _v, e_10, _w, e_5, _x, e_6, _y; + return __generator(this, function (_z) { + switch (_z.label) { + case 0: + if (template.arguments) { + try { + for (_a = __values(template.arguments()), _b = _a.next(); !_b.done; _b = _a.next()) { + arg = _b.value; + try { + for (_c = (e_8 = void 0, __values(extractVariables(arg))), _d = _c.next(); !_d.done; _d = _c.next()) { + variable = _d.value; + updateVariables(variable, scope); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_d && !_d.done && (_t = _c.return)) _t.call(_c); + } + finally { if (e_8) throw e_8.error; } + } + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_b && !_b.done && (_s = _a.return)) _s.call(_a); + } + finally { if (e_7) throw e_7.error; } + } + } + if (template.localScope) { + try { + for (_e = __values(template.localScope()), _f = _e.next(); !_f.done; _f = _e.next()) { + ident = _f.value; + scope.add(ident.content); + scope.deleteAlias(ident.content); + _g = __read(ident.getPosition(), 2), row = _g[0], col = _g[1]; + locals.push(new Variable([ident.content], { row: row, col: col, file: ident.file })); + } + } + catch (e_9_1) { e_9 = { error: e_9_1 }; } + finally { + try { + if (_f && !_f.done && (_u = _e.return)) _u.call(_e); + } + finally { if (e_9) throw e_9.error; } + } + } + if (!template.children) return [3 /*break*/, 30]; + if (!template.partialScope) return [3 /*break*/, 20]; + partial = template.partialScope(); + if (!(partial === undefined)) return [3 /*break*/, 10]; + _z.label = 1; + case 1: + _z.trys.push([1, 7, 8, 9]); + return [4 /*yield*/, template.children(partials, sync)]; + case 2: + _h = __values.apply(void 0, [(_z.sent())]), _j = _h.next(); + _z.label = 3; + case 3: + if (!!_j.done) return [3 /*break*/, 6]; + child = _j.value; + return [4 /*yield*/, visit(child, scope)]; + case 4: + _z.sent(); + _z.label = 5; + case 5: + _j = _h.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_4_1 = _z.sent(); + e_4 = { error: e_4_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_j && !_j.done && (_v = _h.return)) _v.call(_h); + } + finally { if (e_4) throw e_4.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + case 10: + if (seen.has(partial.name)) + return [2 /*return*/]; + partialScopeNames = new Set(); + partialScope = partial.isolated + ? new DummyScope(partialScopeNames) + : scope.push(partialScopeNames); + try { + for (_k = __values(partial.scope), _l = _k.next(); !_l.done; _l = _k.next()) { + name_1 = _l.value; + if (isString(name_1)) { + partialScopeNames.add(name_1); + } + else { + _m = __read(name_1, 2), alias = _m[0], argument = _m[1]; + partialScopeNames.add(alias); + variables_1 = Array.from(extractVariables(argument)); + if (variables_1.length) { + partialScope.setAlias(alias, variables_1[0].segments); + } + } + } + } + catch (e_10_1) { e_10 = { error: e_10_1 }; } + finally { + try { + if (_l && !_l.done && (_w = _k.return)) _w.call(_k); + } + finally { if (e_10) throw e_10.error; } + } + _z.label = 11; + case 11: + _z.trys.push([11, 17, 18, 19]); + return [4 /*yield*/, template.children(partials, sync)]; + case 12: + _o = __values.apply(void 0, [(_z.sent())]), _p = _o.next(); + _z.label = 13; + case 13: + if (!!_p.done) return [3 /*break*/, 16]; + child = _p.value; + return [4 /*yield*/, visit(child, partialScope)]; + case 14: + _z.sent(); + seen.add(partial.name); + _z.label = 15; + case 15: + _p = _o.next(); + return [3 /*break*/, 13]; + case 16: return [3 /*break*/, 19]; + case 17: + e_5_1 = _z.sent(); + e_5 = { error: e_5_1 }; + return [3 /*break*/, 19]; + case 18: + try { + if (_p && !_p.done && (_x = _o.return)) _x.call(_o); + } + finally { if (e_5) throw e_5.error; } + return [7 /*endfinally*/]; + case 19: + partialScope.pop(); + return [3 /*break*/, 30]; + case 20: + if (template.blockScope) { + scope.push(new Set(template.blockScope())); + } + _z.label = 21; + case 21: + _z.trys.push([21, 27, 28, 29]); + return [4 /*yield*/, template.children(partials, sync)]; + case 22: + _q = __values.apply(void 0, [(_z.sent())]), _r = _q.next(); + _z.label = 23; + case 23: + if (!!_r.done) return [3 /*break*/, 26]; + child = _r.value; + return [4 /*yield*/, visit(child, scope)]; + case 24: + _z.sent(); + _z.label = 25; + case 25: + _r = _q.next(); + return [3 /*break*/, 23]; + case 26: return [3 /*break*/, 29]; + case 27: + e_6_1 = _z.sent(); + e_6 = { error: e_6_1 }; + return [3 /*break*/, 29]; + case 28: + try { + if (_r && !_r.done && (_y = _q.return)) _y.call(_q); + } + finally { if (e_6) throw e_6.error; } + return [7 /*endfinally*/]; + case 29: + if (template.blockScope) { + scope.pop(); + } + _z.label = 30; + case 30: return [2 /*return*/]; + } + }); + } + var variables, globals, locals, rootScope, seen, templates_1, templates_1_1, template, e_2_1; + var e_2, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + variables = new VariableMap(); + globals = new VariableMap(); + locals = new VariableMap(); + rootScope = new DummyScope(new Set()); + seen = new Set(); + _b.label = 1; + case 1: + _b.trys.push([1, 6, 7, 8]); + templates_1 = __values(templates), templates_1_1 = templates_1.next(); + _b.label = 2; + case 2: + if (!!templates_1_1.done) return [3 /*break*/, 5]; + template = templates_1_1.value; + return [4 /*yield*/, visit(template, rootScope)]; + case 3: + _b.sent(); + _b.label = 4; + case 4: + templates_1_1 = templates_1.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_2_1 = _b.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (templates_1_1 && !templates_1_1.done && (_a = templates_1.return)) _a.call(templates_1); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 8: return [2 /*return*/, { + variables: variables.asObject(), + globals: globals.asObject(), + locals: locals.asObject() + }]; + } + }); + } + /** + * Statically analyze a template and report variable usage. + */ + function analyze(template, options) { + if (options === void 0) { options = {}; } + var opts = __assign(__assign({}, defaultStaticAnalysisOptions), options); + return toPromise(_analyze(template, opts.partials, false)); + } + /** + * Statically analyze a template and report variable usage. + */ + function analyzeSync(template, options) { + if (options === void 0) { options = {}; } + var opts = __assign(__assign({}, defaultStaticAnalysisOptions), options); + return toValueSync(_analyze(template, opts.partials, true)); + } + /** + * A stack to manage scopes while traversing templates during static analysis. + */ + var DummyScope = /** @class */ (function () { + function DummyScope(globals) { + this.stack = [{ names: globals, aliases: new Map() }]; + } + /** Return true if `name` is in scope. */ + DummyScope.prototype.has = function (name) { + var e_11, _a; + try { + for (var _b = __values(this.stack), _c = _b.next(); !_c.done; _c = _b.next()) { + var scope = _c.value; + if (scope.names.has(name)) { + return true; + } + } + } + catch (e_11_1) { e_11 = { error: e_11_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_11) throw e_11.error; } + } + return false; + }; + DummyScope.prototype.push = function (scope) { + this.stack.push({ names: scope, aliases: new Map() }); + return this; + }; + DummyScope.prototype.pop = function () { + var _a; + return (_a = this.stack.pop()) === null || _a === void 0 ? void 0 : _a.names; + }; + // Add a name to the template scope. + DummyScope.prototype.add = function (name) { + this.stack[0].names.add(name); + }; + /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */ + DummyScope.prototype.alias = function (variable) { + var root = variable.segments[0]; + if (!isString(root)) + return undefined; + var alias = this.getAlias(root); + if (alias === undefined) + return undefined; + return new Variable(__spreadArray(__spreadArray([], __read(alias), false), __read(variable.segments.slice(1)), false), variable.location); + }; + // TODO: `from` could be a path with multiple segments, like `include.x`. + DummyScope.prototype.setAlias = function (from, to) { + this.stack[this.stack.length - 1].aliases.set(from, to); + }; + DummyScope.prototype.deleteAlias = function (name) { + this.stack[this.stack.length - 1].aliases.delete(name); + }; + DummyScope.prototype.getAlias = function (name) { + var e_12, _a; + try { + for (var _b = __values(this.stack), _c = _b.next(); !_c.done; _c = _b.next()) { + var scope = _c.value; + if (scope.aliases.has(name)) { + return scope.aliases.get(name); + } + // If a scope has defined `name`, then it masks aliases in parent scopes. + if (scope.names.has(name)) { + return undefined; + } + } + } + catch (e_12_1) { e_12 = { error: e_12_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_12) throw e_12.error; } + } + return undefined; + }; + return DummyScope; + }()); + function extractVariables(value) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!isValueToken(value)) return [3 /*break*/, 2]; + return [5 /*yield**/, __values(extractValueTokenVariables(value))]; + case 1: + _a.sent(); + return [3 /*break*/, 4]; + case 2: + if (!(value instanceof Value)) return [3 /*break*/, 4]; + return [5 /*yield**/, __values(extractFilteredValueVariables(value))]; + case 3: + _a.sent(); + _a.label = 4; + case 4: return [2 /*return*/]; + } + }); + } + function extractFilteredValueVariables(value) { + var _a, _b, token, e_13_1, _c, _d, filter, _e, _f, arg, e_14_1, e_15_1; + var e_13, _g, e_15, _h, e_14, _j; + return __generator(this, function (_k) { + switch (_k.label) { + case 0: + _k.trys.push([0, 5, 6, 7]); + _a = __values(value.initial.postfix), _b = _a.next(); + _k.label = 1; + case 1: + if (!!_b.done) return [3 /*break*/, 4]; + token = _b.value; + if (!isValueToken(token)) return [3 /*break*/, 3]; + return [5 /*yield**/, __values(extractValueTokenVariables(token))]; + case 2: + _k.sent(); + _k.label = 3; + case 3: + _b = _a.next(); + return [3 /*break*/, 1]; + case 4: return [3 /*break*/, 7]; + case 5: + e_13_1 = _k.sent(); + e_13 = { error: e_13_1 }; + return [3 /*break*/, 7]; + case 6: + try { + if (_b && !_b.done && (_g = _a.return)) _g.call(_a); + } + finally { if (e_13) throw e_13.error; } + return [7 /*endfinally*/]; + case 7: + _k.trys.push([7, 20, 21, 22]); + _c = __values(value.filters), _d = _c.next(); + _k.label = 8; + case 8: + if (!!_d.done) return [3 /*break*/, 19]; + filter = _d.value; + _k.label = 9; + case 9: + _k.trys.push([9, 16, 17, 18]); + _e = (e_14 = void 0, __values(filter.args)), _f = _e.next(); + _k.label = 10; + case 10: + if (!!_f.done) return [3 /*break*/, 15]; + arg = _f.value; + if (!(isKeyValuePair(arg) && arg[1])) return [3 /*break*/, 12]; + return [5 /*yield**/, __values(extractValueTokenVariables(arg[1]))]; + case 11: + _k.sent(); + return [3 /*break*/, 14]; + case 12: + if (!isValueToken(arg)) return [3 /*break*/, 14]; + return [5 /*yield**/, __values(extractValueTokenVariables(arg))]; + case 13: + _k.sent(); + _k.label = 14; + case 14: + _f = _e.next(); + return [3 /*break*/, 10]; + case 15: return [3 /*break*/, 18]; + case 16: + e_14_1 = _k.sent(); + e_14 = { error: e_14_1 }; + return [3 /*break*/, 18]; + case 17: + try { + if (_f && !_f.done && (_j = _e.return)) _j.call(_e); + } + finally { if (e_14) throw e_14.error; } + return [7 /*endfinally*/]; + case 18: + _d = _c.next(); + return [3 /*break*/, 8]; + case 19: return [3 /*break*/, 22]; + case 20: + e_15_1 = _k.sent(); + e_15 = { error: e_15_1 }; + return [3 /*break*/, 22]; + case 21: + try { + if (_d && !_d.done && (_h = _c.return)) _h.call(_c); + } + finally { if (e_15) throw e_15.error; } + return [7 /*endfinally*/]; + case 22: return [2 /*return*/]; + } + }); + } + function extractValueTokenVariables(token) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!isRangeToken(token)) return [3 /*break*/, 3]; + return [5 /*yield**/, __values(extractValueTokenVariables(token.lhs))]; + case 1: + _a.sent(); + return [5 /*yield**/, __values(extractValueTokenVariables(token.rhs))]; + case 2: + _a.sent(); + return [3 /*break*/, 7]; + case 3: + if (!isFilteredValueToken(token)) return [3 /*break*/, 5]; + return [5 /*yield**/, __values(extractGroupedExpressionTokenVariables(token))]; + case 4: + _a.sent(); + return [3 /*break*/, 7]; + case 5: + if (!isPropertyAccessToken(token)) return [3 /*break*/, 7]; + return [4 /*yield*/, extractPropertyAccessVariable(token)]; + case 6: + _a.sent(); + _a.label = 7; + case 7: return [2 /*return*/]; + } + }); + } + function extractGroupedExpressionTokenVariables(token) { + var _a, _b, t, e_16_1, _c, _d, filter, _e, _f, arg, e_17_1, e_18_1; + var e_16, _g, e_18, _h, e_17, _j; + return __generator(this, function (_k) { + switch (_k.label) { + case 0: + if (!isFilteredValueToken(token)) + return [2 /*return*/]; + _k.label = 1; + case 1: + _k.trys.push([1, 6, 7, 8]); + _a = __values(token.initial.postfix), _b = _a.next(); + _k.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 5]; + t = _b.value; + if (!isValueToken(t)) return [3 /*break*/, 4]; + return [5 /*yield**/, __values(extractValueTokenVariables(t))]; + case 3: + _k.sent(); + _k.label = 4; + case 4: + _b = _a.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_16_1 = _k.sent(); + e_16 = { error: e_16_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (_b && !_b.done && (_g = _a.return)) _g.call(_a); + } + finally { if (e_16) throw e_16.error; } + return [7 /*endfinally*/]; + case 8: + _k.trys.push([8, 21, 22, 23]); + _c = __values(token.filters), _d = _c.next(); + _k.label = 9; + case 9: + if (!!_d.done) return [3 /*break*/, 20]; + filter = _d.value; + _k.label = 10; + case 10: + _k.trys.push([10, 17, 18, 19]); + _e = (e_17 = void 0, __values(filter.args)), _f = _e.next(); + _k.label = 11; + case 11: + if (!!_f.done) return [3 /*break*/, 16]; + arg = _f.value; + if (!(isKeyValuePair(arg) && arg[1])) return [3 /*break*/, 13]; + return [5 /*yield**/, __values(extractValueTokenVariables(arg[1]))]; + case 12: + _k.sent(); + return [3 /*break*/, 15]; + case 13: + if (!isValueToken(arg)) return [3 /*break*/, 15]; + return [5 /*yield**/, __values(extractValueTokenVariables(arg))]; + case 14: + _k.sent(); + _k.label = 15; + case 15: + _f = _e.next(); + return [3 /*break*/, 11]; + case 16: return [3 /*break*/, 19]; + case 17: + e_17_1 = _k.sent(); + e_17 = { error: e_17_1 }; + return [3 /*break*/, 19]; + case 18: + try { + if (_f && !_f.done && (_j = _e.return)) _j.call(_e); + } + finally { if (e_17) throw e_17.error; } + return [7 /*endfinally*/]; + case 19: + _d = _c.next(); + return [3 /*break*/, 9]; + case 20: return [3 /*break*/, 23]; + case 21: + e_18_1 = _k.sent(); + e_18 = { error: e_18_1 }; + return [3 /*break*/, 23]; + case 22: + try { + if (_d && !_d.done && (_h = _c.return)) _h.call(_c); + } + finally { if (e_18) throw e_18.error; } + return [7 /*endfinally*/]; + case 23: return [2 /*return*/]; + } + }); + } + function extractPropertyAccessVariable(token) { + var e_19, _a; + var segments = []; + // token is not guaranteed to have `file` set. We'll try to get it from a prop if not. + var file = token.file; + // Here we're flattening the first segment of a path if it is a nested path. + var root = token.props[0]; + file = file || root.file; + if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) { + segments.push(root.content); + } + else if (isPropertyAccessToken(root)) { + // Flatten paths that start with a nested path. + segments.push.apply(segments, __spreadArray([], __read(extractPropertyAccessVariable(root).segments), false)); + } + try { + for (var _b = __values(token.props.slice(1)), _c = _b.next(); !_c.done; _c = _b.next()) { + var prop = _c.value; + file = file || prop.file; + if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) { + segments.push(prop.content); + } + else if (isPropertyAccessToken(prop)) { + segments.push(extractPropertyAccessVariable(prop)); + } + } + } + catch (e_19_1) { e_19 = { error: e_19_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_19) throw e_19.error; } + } + var _d = __read(token.getPosition(), 2), row = _d[0], col = _d[1]; + return new Variable(segments, { + row: row, + col: col, + file: file + }); + } + // This is used to detect segments that can be represented with dot notation + // when creating a string representation of VariableSegments. + var RE_PROPERTY = /^[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*$/; + /** + * Return a string representation of segments using dot notation where possible. + * @param segments - The property names and array indices that make up a path to a variable. + * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets. + */ + function segmentsString(segments, bracketedRoot) { + var e_20, _a; + if (bracketedRoot === void 0) { bracketedRoot = false; } + var buf = []; + var root = segments[0]; + if (isString(root)) { + if (!bracketedRoot || root.match(RE_PROPERTY)) { + buf.push("".concat(root)); + } + else { + buf.push("['".concat(root, "']")); + } + } + try { + for (var _b = __values(segments.slice(1)), _c = _b.next(); !_c.done; _c = _b.next()) { + var segment = _c.value; + if (segment instanceof Variable) { + buf.push("[".concat(segmentsString(segment.segments), "]")); + } + else if (isString(segment)) { + if (segment.match(RE_PROPERTY)) { + buf.push(".".concat(segment)); + } + else { + buf.push("['".concat(segment, "']")); + } + } + else { + buf.push("[".concat(segment, "]")); + } + } + } + catch (e_20_1) { e_20 = { error: e_20_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_20) throw e_20.error; } + } + return buf.join(''); + } + + (function (LookupType) { + LookupType["Partials"] = "partials"; + LookupType["Layouts"] = "layouts"; + LookupType["Root"] = "root"; + })(exports.LookupType || (exports.LookupType = {})); + var Loader = /** @class */ (function () { + function Loader(options) { + var _this = this; + var _a, _b, _c, _d; + this.options = options; + if (options.relativeReference) { + var sep = options.fs.sep; + assert(sep, '`fs.sep` is required for relative reference'); + var prefixes_1 = ['.' + sep, '..' + sep, './', '../']; + this.shouldLoadRelative = function (referencedFile) { return prefixes_1.some(function (prefix) { return referencedFile.startsWith(prefix); }); }; + } + else { + this.shouldLoadRelative = function (_referencedFile) { return false; }; + } + var fs = options.fs; + this.contains = toLiquidAsync(((_a = fs.contains) === null || _a === void 0 ? void 0 : _a.bind(fs)) || (function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, true]; + }); }); }), ((_b = fs.containsSync) === null || _b === void 0 ? void 0 : _b.bind(fs)) || (function () { return true; })); + this.exists = toLiquidAsync(((_c = fs.exists) === null || _c === void 0 ? void 0 : _c.bind(fs)) || (function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, false]; + }); }); }), (_d = fs.existsSync) === null || _d === void 0 ? void 0 : _d.bind(fs)); + } + Loader.prototype.lookup = function (file, type, sync, currentFile) { + var dirs, _a, _b, filepath, allowed, dirs_1, dirs_1_1, dir, e_1_1, e_2_1; + var e_2, _c, e_1, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + dirs = this.options[type]; + _e.label = 1; + case 1: + _e.trys.push([1, 14, 15, 16]); + _a = __values(this.candidates(file, dirs, currentFile)), _b = _a.next(); + _e.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 13]; + filepath = _b.value; + allowed = false; + _e.label = 3; + case 3: + _e.trys.push([3, 8, 9, 10]); + dirs_1 = (e_1 = void 0, __values(dirs)), dirs_1_1 = dirs_1.next(); + _e.label = 4; + case 4: + if (!!dirs_1_1.done) return [3 /*break*/, 7]; + dir = dirs_1_1.value; + return [4 /*yield*/, this.contains(!!sync, dir, filepath)]; + case 5: + if (_e.sent()) { + allowed = true; + return [3 /*break*/, 7]; + } + _e.label = 6; + case 6: + dirs_1_1 = dirs_1.next(); + return [3 /*break*/, 4]; + case 7: return [3 /*break*/, 10]; + case 8: + e_1_1 = _e.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 10]; + case 9: + try { + if (dirs_1_1 && !dirs_1_1.done && (_d = dirs_1.return)) _d.call(dirs_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 10: + if (!allowed) + return [3 /*break*/, 12]; + return [4 /*yield*/, this.exists(!!sync, filepath)]; + case 11: + if (_e.sent()) + return [2 /*return*/, filepath]; + _e.label = 12; + case 12: + _b = _a.next(); + return [3 /*break*/, 2]; + case 13: return [3 /*break*/, 16]; + case 14: + e_2_1 = _e.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 16]; + case 15: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 16: throw this.lookupError(file, dirs); + } + }); + }; + Loader.prototype.candidates = function (file, dirs, currentFile) { + var _a, fs, extname, referenced, dirs_2, dirs_2_1, dir, referenced, e_3_1, filepath; + var e_3, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _a = this.options, fs = _a.fs, extname = _a.extname; + if (!(this.shouldLoadRelative(file) && currentFile)) return [3 /*break*/, 2]; + referenced = fs.resolve(this.dirname(currentFile), file, extname); + return [4 /*yield*/, referenced]; + case 1: + _c.sent(); + _c.label = 2; + case 2: + _c.trys.push([2, 7, 8, 9]); + dirs_2 = __values(dirs), dirs_2_1 = dirs_2.next(); + _c.label = 3; + case 3: + if (!!dirs_2_1.done) return [3 /*break*/, 6]; + dir = dirs_2_1.value; + referenced = fs.resolve(dir, file, extname); + return [4 /*yield*/, referenced]; + case 4: + _c.sent(); + _c.label = 5; + case 5: + dirs_2_1 = dirs_2.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_3_1 = _c.sent(); + e_3 = { error: e_3_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (dirs_2_1 && !dirs_2_1.done && (_b = dirs_2.return)) _b.call(dirs_2); + } + finally { if (e_3) throw e_3.error; } + return [7 /*endfinally*/]; + case 9: + if (!(fs.fallback !== undefined)) return [3 /*break*/, 11]; + filepath = fs.fallback(file); + if (!(filepath !== undefined)) return [3 /*break*/, 11]; + return [4 /*yield*/, filepath]; + case 10: + _c.sent(); + _c.label = 11; + case 11: return [2 /*return*/]; + } + }); + }; + Loader.prototype.dirname = function (path) { + var fs = this.options.fs; + assert(fs.dirname, '`fs.dirname` is required for relative reference'); + return fs.dirname(path); + }; + Loader.prototype.lookupError = function (file, roots) { + var err = new Error('ENOENT'); + err.message = "ENOENT: Failed to lookup \"".concat(file, "\" in \"").concat(roots, "\""); + err.code = 'ENOENT'; + return err; + }; + return Loader; + }()); + + var Parser = /** @class */ (function () { + function Parser(liquid) { + var _this = this; + var _a, _b; + this.liquid = liquid; + this.cache = this.liquid.options.cache; + this.fs = this.liquid.options.fs; + this.parseFile = this.cache ? this._parseFileCached : this._parseFile; + this.loader = new Loader(this.liquid.options); + this.parseLimit = new Limiter('parse length', liquid.options.parseLimit); + this.readFile = toLiquidAsync(((_a = this.fs.readFile) === null || _a === void 0 ? void 0 : _a.bind(this.fs)) || (function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + throw new Error('readFile not implemented'); + }); }); }), (_b = this.fs.readFileSync) === null || _b === void 0 ? void 0 : _b.bind(this.fs)); + } + Parser.prototype.parse = function (html, filepath) { + html = String(html); + this.parseLimit.use(html.length); + var tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath, undefined, this.liquid.options.groupedExpressions); + var tokens = tokenizer.readTopLevelTokens(this.liquid.options); + return this.parseTokens(tokens); + }; + Parser.prototype.parseTokens = function (tokens) { + var token; + var templates = []; + var errors = []; + while ((token = tokens.shift())) { + try { + templates.push(this.parseToken(token, tokens)); + } + catch (err) { + if (this.liquid.options.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) + throw new LiquidErrors(errors); + return templates; + }; + Parser.prototype.parseToken = function (token, remainTokens) { + try { + if (isTagToken(token)) { + var TagClass = this.liquid.tags[token.name]; + assert(TagClass, "tag \"".concat(token.name, "\" not found")); + return new TagClass(token, remainTokens, this.liquid, this); + } + if (isOutputToken(token)) { + return new Output(token, this.liquid); + } + return new HTML(token); + } + catch (e) { + if (LiquidError.is(e)) + throw e; + throw new ParseError(e, token); + } + }; + Parser.prototype.parseStream = function (tokens) { + var _this = this; + return new ParseStream(tokens, function (token, tokens) { return _this.parseToken(token, tokens); }); + }; + Parser.prototype._parseFileCached = function (file, sync, type, currentFile) { + var cache, key, tpls, task, taskOrTpl, _a, err_1; + if (type === void 0) { type = exports.LookupType.Root; } + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cache = this.cache; + key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file; + return [4 /*yield*/, cache.read(key)]; + case 1: + tpls = _b.sent(); + if (tpls) + return [2 /*return*/, tpls]; + task = this._parseFile(file, sync, type, currentFile); + if (!sync) return [3 /*break*/, 3]; + return [4 /*yield*/, task]; + case 2: + _a = _b.sent(); + return [3 /*break*/, 4]; + case 3: + _a = toPromise(task); + _b.label = 4; + case 4: + taskOrTpl = _a; + cache.write(key, taskOrTpl); + _b.label = 5; + case 5: + _b.trys.push([5, 7, , 8]); + return [4 /*yield*/, taskOrTpl]; + case 6: return [2 /*return*/, _b.sent()]; + case 7: + err_1 = _b.sent(); + cache.remove(key); + throw err_1; + case 8: return [2 /*return*/]; + } + }); + }; + Parser.prototype._parseFile = function (file, sync, type, currentFile) { + var filepath, _a; + if (type === void 0) { type = exports.LookupType.Root; } + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.loader.lookup(file, type, sync, currentFile)]; + case 1: + filepath = _b.sent(); + _a = this.parse; + return [4 /*yield*/, this.readFile(!!sync, filepath)]; + case 2: return [2 /*return*/, _a.apply(this, [_b.sent(), filepath])]; + } + }); + }; + return Parser; + }()); + + (function (TokenKind) { + TokenKind[TokenKind["Number"] = 1] = "Number"; + TokenKind[TokenKind["Literal"] = 2] = "Literal"; + TokenKind[TokenKind["Tag"] = 4] = "Tag"; + TokenKind[TokenKind["Output"] = 8] = "Output"; + TokenKind[TokenKind["HTML"] = 16] = "HTML"; + TokenKind[TokenKind["Filter"] = 32] = "Filter"; + TokenKind[TokenKind["Hash"] = 64] = "Hash"; + TokenKind[TokenKind["PropertyAccess"] = 128] = "PropertyAccess"; + TokenKind[TokenKind["Word"] = 256] = "Word"; + TokenKind[TokenKind["Range"] = 512] = "Range"; + TokenKind[TokenKind["Quoted"] = 1024] = "Quoted"; + TokenKind[TokenKind["Operator"] = 2048] = "Operator"; + TokenKind[TokenKind["FilteredValue"] = 4096] = "FilteredValue"; + TokenKind[TokenKind["GroupedExpression"] = 8192] = "GroupedExpression"; + TokenKind[TokenKind["Delimited"] = 12] = "Delimited"; + })(exports.TokenKind || (exports.TokenKind = {})); + + function isDelimitedToken(val) { + return !!(getKind(val) & exports.TokenKind.Delimited); + } + function isOperatorToken(val) { + return getKind(val) === exports.TokenKind.Operator; + } + function isHTMLToken(val) { + return getKind(val) === exports.TokenKind.HTML; + } + function isOutputToken(val) { + return getKind(val) === exports.TokenKind.Output; + } + function isTagToken(val) { + return getKind(val) === exports.TokenKind.Tag; + } + function isQuotedToken(val) { + return getKind(val) === exports.TokenKind.Quoted; + } + function isLiteralToken(val) { + return getKind(val) === exports.TokenKind.Literal; + } + function isNumberToken(val) { + return getKind(val) === exports.TokenKind.Number; + } + function isPropertyAccessToken(val) { + return getKind(val) === exports.TokenKind.PropertyAccess; + } + function isWordToken(val) { + return getKind(val) === exports.TokenKind.Word; + } + function isRangeToken(val) { + return getKind(val) === exports.TokenKind.Range; + } + function isFilteredValueToken(val) { + return getKind(val) === exports.TokenKind.FilteredValue; + } + function isValueToken(val) { + // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range | TokenKind.FilteredValue + return (getKind(val) & 5763) > 0; + } + function getKind(val) { + return val ? val.kind : -1; + } + + var typeGuards = /*#__PURE__*/Object.freeze({ + __proto__: null, + isDelimitedToken: isDelimitedToken, + isOperatorToken: isOperatorToken, + isHTMLToken: isHTMLToken, + isOutputToken: isOutputToken, + isTagToken: isTagToken, + isQuotedToken: isQuotedToken, + isLiteralToken: isLiteralToken, + isNumberToken: isNumberToken, + isPropertyAccessToken: isPropertyAccessToken, + isWordToken: isWordToken, + isRangeToken: isRangeToken, + isFilteredValueToken: isFilteredValueToken, + isValueToken: isValueToken + }); + + function createScope(from) { + var scope = Object.create(null); + if (from) + Object.assign(scope, from); + return scope; + } + + var Context = /** @class */ (function () { + function Context(env, opts, renderOptions, _a) { + if (env === void 0) { env = {}; } + if (opts === void 0) { opts = defaultOptions; } + if (renderOptions === void 0) { renderOptions = {}; } + var _b = _a === void 0 ? {} : _a, memoryLimit = _b.memoryLimit, renderLimit = _b.renderLimit, liquid = _b.liquid; + var _c, _d, _e, _f, _g; + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + this.scopes = [createScope()]; + this.registers = {}; + this.breakCalled = false; + this.continueCalled = false; + this.sync = !!renderOptions.sync; + this.opts = opts; + this.globals = (_c = renderOptions.globals) !== null && _c !== void 0 ? _c : opts.globals; + this.environments = isObject(env) ? env : Object(env); + this.strictVariables = (_d = renderOptions.strictVariables) !== null && _d !== void 0 ? _d : this.opts.strictVariables; + this.ownPropertyOnly = (_e = renderOptions.ownPropertyOnly) !== null && _e !== void 0 ? _e : opts.ownPropertyOnly; + this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_f = renderOptions.memoryLimit) !== null && _f !== void 0 ? _f : opts.memoryLimit); + this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_g = renderOptions.renderLimit) !== null && _g !== void 0 ? _g : opts.renderLimit)); + this.liquid = liquid; + } + Context.prototype.getRegister = function (key, defaultValue) { + if (defaultValue === void 0) { defaultValue = undefined; } + return (this.registers[key] = this.registers[key] || defaultValue); + }; + Context.prototype.setRegister = function (key, value) { + return (this.registers[key] = value); + }; + Context.prototype.saveRegister = function () { + var _this = this; + var keys = []; + for (var _i = 0; _i < arguments.length; _i++) { + keys[_i] = arguments[_i]; + } + return keys.map(function (key) { return [key, _this.getRegister(key)]; }); + }; + Context.prototype.restoreRegister = function (keyValues) { + var _this = this; + return keyValues.forEach(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return _this.setRegister(key, value); + }); + }; + Context.prototype.getAll = function () { + return __spreadArray([this.globals, this.environments], __read(this.scopes), false).reduce(function (ctx, val) { return __assign(ctx, val); }, {}); + }; + /** + * @deprecated use `_get()` or `getSync()` instead + */ + Context.prototype.get = function (paths) { + return this.getSync(paths); + }; + Context.prototype.getSync = function (paths) { + return toValueSync(this._get(paths)); + }; + Context.prototype._get = function (paths) { + var scope; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + scope = this.findScope(paths[0]) // first prop should always be a string + ; + return [4 /*yield*/, this._getFromScope(scope, paths)]; + case 1: // first prop should always be a string + return [2 /*return*/, _a.sent()]; + } + }); + }; + /** + * @deprecated use `_get()` instead + */ + Context.prototype.getFromScope = function (scope, paths) { + return toValueSync(this._getFromScope(scope, paths)); + }; + Context.prototype._getFromScope = function (scope, paths, strictVariables) { + var i; + if (strictVariables === void 0) { strictVariables = this.strictVariables; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (isString(paths)) + paths = paths.split('.'); + i = 0; + _a.label = 1; + case 1: + if (!(i < paths.length)) return [3 /*break*/, 4]; + return [4 /*yield*/, this.readProperty(scope, paths[i])]; + case 2: + scope = _a.sent(); + if (strictVariables && isUndefined(scope)) { + throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.')); + } + _a.label = 3; + case 3: + i++; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/, scope]; + } + }); + }; + Context.prototype.push = function (ctx) { + return this.scopes.push(ctx); + }; + Context.prototype.pop = function () { + return this.scopes.pop(); + }; + Context.prototype.bottom = function () { + return this.scopes[0]; + }; + Context.prototype.spawn = function (scope) { + if (scope === void 0) { scope = {}; } + return new Context(scope, this.opts, { + sync: this.sync, + globals: this.globals, + strictVariables: this.strictVariables, + ownPropertyOnly: this.ownPropertyOnly + }, { + renderLimit: this.renderLimit, + memoryLimit: this.memoryLimit, + liquid: this.liquid + }); + }; + Context.prototype.findScope = function (key) { + for (var i = this.scopes.length - 1; i >= 0; i--) { + var candidate = this.scopes[i]; + if (key in candidate) + return candidate; + } + if (key in this.environments) + return this.environments; + return this.globals; + }; + Context.prototype.readProperty = function (obj, key) { + obj = toLiquid(obj); + key = toValue(key); + if (isNil(obj)) + return obj; + if (isArray(obj) && isNumber(key)) + return readArrayElement(obj, key, this.ownPropertyOnly); + var value = readJSProperty(obj, key, this.ownPropertyOnly); + if (value === undefined && obj instanceof Drop) + return obj.liquidMethodMissing(key, this); + if (isFunction(value)) + return value.call(obj); + if (key === 'size') + return readSize(obj); + else if (key === 'first') + return readFirst(obj, this.ownPropertyOnly); + else if (key === 'last') + return readLast(obj, this.ownPropertyOnly); + return value; + }; + return Context; + }()); + function readJSProperty(obj, key, ownPropertyOnly) { + if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop)) + return undefined; + return obj[key]; + } + function readFirst(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, 0, ownPropertyOnly); + return readJSProperty(obj, 'first', ownPropertyOnly); + } + function readLast(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, -1, ownPropertyOnly); + return readJSProperty(obj, 'last', ownPropertyOnly); + } + function readSize(obj) { + if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined) + return obj['size']; + if (isArray(obj) || isString(obj)) + return obj.length; + if (typeof obj === 'object') + return Object.keys(obj).length; + } + + var BlockMode; + (function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; + })(BlockMode || (BlockMode = {})); + + var abs = argumentsToNumber(Math.abs); + var at_least = argumentsToNumber(Math.max); + var at_most = argumentsToNumber(Math.min); + var ceil = argumentsToNumber(Math.ceil); + var divided_by = argumentsToNumber(function (dividend, divisor, integerArithmetic) { + if (integerArithmetic === void 0) { integerArithmetic = false; } + return integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor; + }); + var floor = argumentsToNumber(Math.floor); + var minus = argumentsToNumber(function (v, arg) { return v - arg; }); + var plus = argumentsToNumber(function (lhs, rhs) { return lhs + rhs; }); + var modulo = argumentsToNumber(function (v, arg) { return ((v % arg) + arg) % arg; }); + var times = argumentsToNumber(function (v, arg) { return v * arg; }); + function round(v, arg) { + if (arg === void 0) { arg = 0; } + v = toNumber(v); + arg = toNumber(arg); + var amp = Math.pow(10, arg); + var scaled = (v * amp) * (1 + Number.EPSILON); + return Math.round(scaled) / amp; + } + + var mathFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + abs: abs, + at_least: at_least, + at_most: at_most, + ceil: ceil, + divided_by: divided_by, + floor: floor, + minus: minus, + plus: plus, + modulo: modulo, + times: times, + round: round + }); + + var url_decode = function (x) { return decodeURIComponent(stringify(x)).replace(/\+/g, ' '); }; + var url_encode = function (x) { return encodeURIComponent(stringify(x)).replace(/%20/g, '+'); }; + var cgi_escape = function (x) { return encodeURIComponent(stringify(x)) + .replace(/%20/g, '+') + .replace(/[!'()*]/g, function (c) { return '%' + c.charCodeAt(0).toString(16).toUpperCase(); }); }; + var uri_escape = function (x) { return encodeURI(stringify(x)) + .replace(/%5B/g, '[') + .replace(/%5D/g, ']'); }; + var rSlugifyDefault = /[^\p{M}\p{L}\p{Nd}]+/ug; + var rSlugifyReplacers = { + 'raw': /\s+/g, + 'default': rSlugifyDefault, + 'pretty': /[^\p{M}\p{L}\p{Nd}._~!$&'()+,;=@]+/ug, + 'ascii': /[^A-Za-z0-9]+/g, + 'latin': rSlugifyDefault, + 'none': null + }; + function slugify(str, mode, cased) { + if (mode === void 0) { mode = 'default'; } + if (cased === void 0) { cased = false; } + str = stringify(str); + var replacer = rSlugifyReplacers[mode]; + if (replacer) { + if (mode === 'latin') + str = removeAccents(str); + str = str.replace(replacer, '-').replace(/^-|-$/g, ''); + } + return cased ? str : str.toLowerCase(); + } + function removeAccents(str) { + return str.replace(/[àáâãäå]/g, 'a') + .replace(/[æ]/g, 'ae') + .replace(/[ç]/g, 'c') + .replace(/[èéêë]/g, 'e') + .replace(/[ìíîï]/g, 'i') + .replace(/[ð]/g, 'd') + .replace(/[ñ]/g, 'n') + .replace(/[òóôõöø]/g, 'o') + .replace(/[ùúûü]/g, 'u') + .replace(/[ýÿ]/g, 'y') + .replace(/[ß]/g, 'ss') + .replace(/[œ]/g, 'oe') + .replace(/[þ]/g, 'th') + .replace(/[ẞ]/g, 'SS') + .replace(/[Œ]/g, 'OE') + .replace(/[Þ]/g, 'TH'); + } + + var urlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + url_decode: url_decode, + url_encode: url_encode, + cgi_escape: cgi_escape, + uri_escape: uri_escape, + slugify: slugify + }); + + var join = argumentsToValue(function (v, arg) { + var array = toArray(v); + var sep = isNil(arg) ? ' ' : stringify(arg); + var outputSize = sep.length * Math.max(array.length - 1, 0); + for (var i = 0; i < array.length; i++) + outputSize += String(array[i]).length; + this.context.memoryLimit.use(outputSize); + return Array.prototype.join.call(array, sep); + }); + var last$1 = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, -1, this.context.ownPropertyOnly) : ''; + }); + var first = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, 0, this.context.ownPropertyOnly) : ''; + }); + var reverse = argumentsToValue(function (v) { + var array = toArray(v); + this.context.memoryLimit.use(array.length); + return __spreadArray([], __read(array), false).reverse(); + }); + function sortBy(arr, property, comparator) { + var values, array, array_1, array_1_1, item, _a, _b, _c, _d, e_1_1; + var e_1, _e; + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + values = []; + array = toArray(arr); + this.context.memoryLimit.use(array.length); + _f.label = 1; + case 1: + _f.trys.push([1, 8, 9, 10]); + array_1 = __values(array), array_1_1 = array_1.next(); + _f.label = 2; + case 2: + if (!!array_1_1.done) return [3 /*break*/, 7]; + item = array_1_1.value; + _b = (_a = values).push; + _c = [item]; + if (!property) return [3 /*break*/, 4]; + return [4 /*yield*/, this.context._getFromScope(item, stringify(property).split('.'), false)]; + case 3: + _d = _f.sent(); + return [3 /*break*/, 5]; + case 4: + _d = item; + _f.label = 5; + case 5: + _b.apply(_a, [_c.concat([ + _d + ])]); + _f.label = 6; + case 6: + array_1_1 = array_1.next(); + return [3 /*break*/, 2]; + case 7: return [3 /*break*/, 10]; + case 8: + e_1_1 = _f.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 10]; + case 9: + try { + if (array_1_1 && !array_1_1.done && (_e = array_1.return)) _e.call(array_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 10: return [2 /*return*/, values.sort(function (lhs, rhs) { return comparator(lhs[1], rhs[1]); }).map(function (tuple) { return tuple[0]; })]; + } + }); + } + function sort(arr, property) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(sortBy.call(this, arr, property, orderedCompare))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + function sort_natural(arr, property) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(sortBy.call(this, arr, property, caseInsensitiveCompare))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + var size = function (v) { return (v && v.length) || 0; }; + function map(arr, property) { + var results, array, array_2, array_2_1, item, _a, _b, e_2_1; + var e_2, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + results = []; + array = toArray(arr); + this.context.memoryLimit.use(array.length); + _d.label = 1; + case 1: + _d.trys.push([1, 6, 7, 8]); + array_2 = __values(array), array_2_1 = array_2.next(); + _d.label = 2; + case 2: + if (!!array_2_1.done) return [3 /*break*/, 5]; + item = array_2_1.value; + _b = (_a = results).push; + return [4 /*yield*/, this.context._getFromScope(item, stringify(property), false)]; + case 3: + _b.apply(_a, [_d.sent()]); + _d.label = 4; + case 4: + array_2_1 = array_2.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_2_1 = _d.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (array_2_1 && !array_2_1.done && (_c = array_2.return)) _c.call(array_2); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 8: return [2 /*return*/, results]; + } + }); + } + function sum(arr, property) { + var sum, array, array_3, array_3_1, item, data, _a, _b, e_3_1; + var e_3, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + sum = 0; + array = toArray(arr); + _d.label = 1; + case 1: + _d.trys.push([1, 8, 9, 10]); + array_3 = __values(array), array_3_1 = array_3.next(); + _d.label = 2; + case 2: + if (!!array_3_1.done) return [3 /*break*/, 7]; + item = array_3_1.value; + _a = Number; + if (!property) return [3 /*break*/, 4]; + return [4 /*yield*/, this.context._getFromScope(item, stringify(property), false)]; + case 3: + _b = _d.sent(); + return [3 /*break*/, 5]; + case 4: + _b = item; + _d.label = 5; + case 5: + data = _a.apply(void 0, [_b]); + sum += Number.isNaN(data) ? 0 : data; + _d.label = 6; + case 6: + array_3_1 = array_3.next(); + return [3 /*break*/, 2]; + case 7: return [3 /*break*/, 10]; + case 8: + e_3_1 = _d.sent(); + e_3 = { error: e_3_1 }; + return [3 /*break*/, 10]; + case 9: + try { + if (array_3_1 && !array_3_1.done && (_c = array_3.return)) _c.call(array_3); + } + finally { if (e_3) throw e_3.error; } + return [7 /*endfinally*/]; + case 10: return [2 /*return*/, sum]; + } + }); + } + function compact(arr) { + var array = toArray(arr); + this.context.memoryLimit.use(array.length); + return Array.prototype.filter.call(array, function (x) { return !isNil(toValue(x)); }); + } + function concat(v, arg) { + if (arg === void 0) { arg = []; } + var lhs = toArray(v); + var rhs = toArray(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return Array.prototype.concat.call(lhs, rhs); + } + function push(v, arg) { + return concat.call(this, v, [arg]); + } + function unshift(v, arg) { + var array = toArray(v); + this.context.memoryLimit.use(array.length); + var clone = __spreadArray([], __read(array), false); + clone.unshift(arg); + return clone; + } + function pop(v) { + var array = toArray(v); + this.context.memoryLimit.use(array.length); + var clone = __spreadArray([], __read(array), false); + clone.pop(); + return clone; + } + function shift(v) { + var array = toArray(v); + this.context.memoryLimit.use(array.length); + var clone = __spreadArray([], __read(array), false); + clone.shift(); + return clone; + } + function slice(v, begin, length) { + if (length === void 0) { length = 1; } + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + begin = begin < 0 ? v.length + begin : begin; + if (begin < 0 || length < 0) + return isArray(v) ? [] : ''; + this.context.memoryLimit.use(length); + return isArray(v) + ? Array.prototype.slice.call(v, begin, begin + length) + : String.prototype.slice.call(v, begin, begin + length); + } + function expectedMatcher(expected) { + var _this = this; + if (this.context.opts.jekyllWhere) { + return function (v) { return EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected)); }; + } + else if (expected === undefined) { + return function (v) { return isTruthy(v, _this.context); }; + } + else { + return function (v) { return equals(v, expected); }; + } + } + function filter(include, arr, property, expected) { + var values, token, arr_1, arr_1_1, item, _a, _b, e_4_1, matcher; + var e_4, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + values = []; + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + token = new Tokenizer(stringify(property)).readScopeValue(); + _d.label = 1; + case 1: + _d.trys.push([1, 6, 7, 8]); + arr_1 = __values(arr), arr_1_1 = arr_1.next(); + _d.label = 2; + case 2: + if (!!arr_1_1.done) return [3 /*break*/, 5]; + item = arr_1_1.value; + _b = (_a = values).push; + return [4 /*yield*/, evalToken(token, this.context.spawn(item))]; + case 3: + _b.apply(_a, [_d.sent()]); + _d.label = 4; + case 4: + arr_1_1 = arr_1.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_4_1 = _d.sent(); + e_4 = { error: e_4_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (arr_1_1 && !arr_1_1.done && (_c = arr_1.return)) _c.call(arr_1); + } + finally { if (e_4) throw e_4.error; } + return [7 /*endfinally*/]; + case 8: + matcher = expectedMatcher.call(this, expected); + return [2 /*return*/, Array.prototype.filter.call(arr, function (_, i) { return matcher(values[i]) === include; })]; + } + }); + } + function filter_exp(include, arr, itemName, exp) { + var filtered, keyTemplate, array, array_4, array_4_1, item, value, e_5_1; + var e_5, _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + filtered = []; + keyTemplate = new Value(stringify(exp), this.liquid); + array = toArray(arr); + this.context.memoryLimit.use(array.length); + _c.label = 1; + case 1: + _c.trys.push([1, 6, 7, 8]); + array_4 = __values(array), array_4_1 = array_4.next(); + _c.label = 2; + case 2: + if (!!array_4_1.done) return [3 /*break*/, 5]; + item = array_4_1.value; + this.context.push((_b = {}, _b[itemName] = item, _b)); + return [4 /*yield*/, keyTemplate.value(this.context)]; + case 3: + value = _c.sent(); + this.context.pop(); + if (value === include) + filtered.push(item); + _c.label = 4; + case 4: + array_4_1 = array_4.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_5_1 = _c.sent(); + e_5 = { error: e_5_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (array_4_1 && !array_4_1.done && (_a = array_4.return)) _a.call(array_4); + } + finally { if (e_5) throw e_5.error; } + return [7 /*endfinally*/]; + case 8: return [2 /*return*/, filtered]; + } + }); + } + function where(arr, property, expected) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(filter.call(this, true, arr, property, expected))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + function reject(arr, property, expected) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(filter.call(this, false, arr, property, expected))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + function where_exp(arr, itemName, exp) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(filter_exp.call(this, true, arr, itemName, exp))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + function reject_exp(arr, itemName, exp) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(filter_exp.call(this, false, arr, itemName, exp))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + function group_by(arr, property) { + var map, token, arr_2, arr_2_1, item, key, e_6_1; + var e_6, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + map = new Map(); + arr = toEnumerable(arr); + token = new Tokenizer(stringify(property)).readScopeValue(); + this.context.memoryLimit.use(arr.length); + _b.label = 1; + case 1: + _b.trys.push([1, 6, 7, 8]); + arr_2 = __values(arr), arr_2_1 = arr_2.next(); + _b.label = 2; + case 2: + if (!!arr_2_1.done) return [3 /*break*/, 5]; + item = arr_2_1.value; + return [4 /*yield*/, evalToken(token, this.context.spawn(item))]; + case 3: + key = _b.sent(); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + _b.label = 4; + case 4: + arr_2_1 = arr_2.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_6_1 = _b.sent(); + e_6 = { error: e_6_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (arr_2_1 && !arr_2_1.done && (_a = arr_2.return)) _a.call(arr_2); + } + finally { if (e_6) throw e_6.error; } + return [7 /*endfinally*/]; + case 8: return [2 /*return*/, __spreadArray([], __read(map.entries()), false).map(function (_a) { + var _b = __read(_a, 2), name = _b[0], items = _b[1]; + return ({ name: name, items: items }); + })]; + } + }); + } + function group_by_exp(arr, itemName, exp) { + var map, keyTemplate, arr_3, arr_3_1, item, key, e_7_1; + var e_7, _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + map = new Map(); + keyTemplate = new Value(stringify(exp), this.liquid); + arr = toEnumerable(arr); + this.context.memoryLimit.use(arr.length); + _c.label = 1; + case 1: + _c.trys.push([1, 6, 7, 8]); + arr_3 = __values(arr), arr_3_1 = arr_3.next(); + _c.label = 2; + case 2: + if (!!arr_3_1.done) return [3 /*break*/, 5]; + item = arr_3_1.value; + this.context.push((_b = {}, _b[itemName] = item, _b)); + return [4 /*yield*/, keyTemplate.value(this.context)]; + case 3: + key = _c.sent(); + this.context.pop(); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + _c.label = 4; + case 4: + arr_3_1 = arr_3.next(); + return [3 /*break*/, 2]; + case 5: return [3 /*break*/, 8]; + case 6: + e_7_1 = _c.sent(); + e_7 = { error: e_7_1 }; + return [3 /*break*/, 8]; + case 7: + try { + if (arr_3_1 && !arr_3_1.done && (_a = arr_3.return)) _a.call(arr_3); + } + finally { if (e_7) throw e_7.error; } + return [7 /*endfinally*/]; + case 8: return [2 /*return*/, __spreadArray([], __read(map.entries()), false).map(function (_a) { + var _b = __read(_a, 2), name = _b[0], items = _b[1]; + return ({ name: name, items: items }); + })]; + } + }); + } + function search(arr, property, expected) { + var token, array, matcher, index, value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + token = new Tokenizer(stringify(property)).readScopeValue(); + array = toArray(arr); + matcher = expectedMatcher.call(this, expected); + index = 0; + _a.label = 1; + case 1: + if (!(index < array.length)) return [3 /*break*/, 4]; + return [4 /*yield*/, evalToken(token, this.context.spawn(array[index]))]; + case 2: + value = _a.sent(); + if (matcher(value)) + return [2 /*return*/, [index, array[index]]]; + _a.label = 3; + case 3: + index++; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + } + function search_exp(arr, itemName, exp) { + var predicate, array, index, value; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + predicate = new Value(stringify(exp), this.liquid); + array = toArray(arr); + index = 0; + _b.label = 1; + case 1: + if (!(index < array.length)) return [3 /*break*/, 4]; + this.context.push((_a = {}, _a[itemName] = array[index], _a)); + return [4 /*yield*/, predicate.value(this.context)]; + case 2: + value = _b.sent(); + this.context.pop(); + if (value) + return [2 /*return*/, [index, array[index]]]; + _b.label = 3; + case 3: + index++; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + } + function has(arr, property, expected) { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(search.call(this, arr, property, expected))]; + case 1: + result = _a.sent(); + return [2 /*return*/, !!result]; + } + }); + } + function has_exp(arr, itemName, exp) { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(search_exp.call(this, arr, itemName, exp))]; + case 1: + result = _a.sent(); + return [2 /*return*/, !!result]; + } + }); + } + function find_index(arr, property, expected) { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(search.call(this, arr, property, expected))]; + case 1: + result = _a.sent(); + return [2 /*return*/, result ? result[0] : undefined]; + } + }); + } + function find_index_exp(arr, itemName, exp) { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(search_exp.call(this, arr, itemName, exp))]; + case 1: + result = _a.sent(); + return [2 /*return*/, result ? result[0] : undefined]; + } + }); + } + function find(arr, property, expected) { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(search.call(this, arr, property, expected))]; + case 1: + result = _a.sent(); + return [2 /*return*/, result ? result[1] : undefined]; + } + }); + } + function find_exp(arr, itemName, exp) { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(search_exp.call(this, arr, itemName, exp))]; + case 1: + result = _a.sent(); + return [2 /*return*/, result ? result[1] : undefined]; + } + }); + } + function uniq(arr) { + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + return __spreadArray([], __read(new Set(arr)), false); + } + function sample(v, count) { + if (count === void 0) { count = 1; } + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + this.context.memoryLimit.use(v.length); + var shuffled = __spreadArray([], __read(v), false).sort(function () { return Math.random() - 0.5; }); + if (count === 1) + return shuffled[0]; + return shuffled.slice(0, count); + } + + var arrayFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + join: join, + last: last$1, + first: first, + reverse: reverse, + sort: sort, + sort_natural: sort_natural, + size: size, + map: map, + sum: sum, + compact: compact, + concat: concat, + push: push, + unshift: unshift, + pop: pop, + shift: shift, + slice: slice, + where: where, + reject: reject, + where_exp: where_exp, + reject_exp: reject_exp, + group_by: group_by, + group_by_exp: group_by_exp, + has: has, + has_exp: has_exp, + find_index: find_index, + find_index_exp: find_index_exp, + find: find, + find_exp: find_exp, + uniq: uniq, + sample: sample + }); + + function date(v, format, timezoneOffset) { + var _a, _b; + var size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _b !== void 0 ? _b : 0); + this.context.memoryLimit.use(size); + var date = parseDate(v, this.context.opts, timezoneOffset); + if (!date) + return v; + format = toValue(format); + format = isNil(format) ? this.context.opts.dateFormat : stringify(format); + this.context.memoryLimit.use(format.length); + return strftime(date, format, this.context.memoryLimit); + } + function date_to_xmlschema(v) { + return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z'); + } + function date_to_rfc822(v) { + return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z'); + } + function date_to_string(v, type, style) { + return stringify_date.call(this, v, '%b', type, style); + } + function date_to_long_string(v, type, style) { + return stringify_date.call(this, v, '%B', type, style); + } + function stringify_date(v, month_type, type, style) { + var date = parseDate(v, this.context.opts); + if (!date) + return v; + var ml = this.context.memoryLimit; + if (type === 'ordinal') { + var d = date.getDate(); + return style === 'US' + ? strftime(date, "".concat(month_type, " ").concat(d, "%q, %Y"), ml) + : strftime(date, "".concat(d, "%q ").concat(month_type, " %Y"), ml); + } + return strftime(date, "%d ".concat(month_type, " %Y"), ml); + } + function parseDate(v, opts, timezoneOffset) { + var date; + var defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset; + var locale = opts.locale; + v = toValue(v); + if (isNil(v)) { + return undefined; + } + else if (v === 'now' || v === 'today') { + date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset); + } + else if (isNumber(v)) { + date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset); + } + else if (isString(v)) { + if (/^\d+$/.test(v)) { + date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset); + } + else if (opts.preserveTimezones && timezoneOffset === undefined) { + date = LiquidDate.createDateFixedToTimezone(v, locale); + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + return date.valid() ? date : undefined; + } + + var dateFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + date: date, + date_to_xmlschema: date_to_xmlschema, + date_to_rfc822: date_to_rfc822, + date_to_string: date_to_string, + date_to_long_string: date_to_long_string + }); + + /** + * String related filters + * + * * prefer stringify() to String() since `undefined`, `null` should eval '' + */ + var rCJKWord = /[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF]/gu; + // Word boundary followed by word characters (for detecting words) + var rNonCJKWord = /[^\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF\s]+/gu; + function append(v, arg) { + assert(arguments.length === 2, 'append expect 2 arguments'); + var lhs = stringify(v); + var rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return lhs + rhs; + } + function prepend(v, arg) { + assert(arguments.length === 2, 'prepend expect 2 arguments'); + var lhs = stringify(v); + var rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return rhs + lhs; + } + function lstrip(v, chars) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (var i = 0, set = new Set(chars); i < str.length; i++) { + if (!set.has(str[i])) + return str.slice(i); + } + return ''; + } + return str.trimStart(); + } + function downcase(v) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.toLowerCase(); + } + function upcase(v) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + return stringify(str).toUpperCase(); + } + function remove(v, arg) { + var str = stringify(v); + arg = stringify(arg); + this.context.memoryLimit.use(str.length + arg.length); + return str.split(arg).join(''); + } + function remove_first(v, l) { + var str = stringify(v); + l = stringify(l); + this.context.memoryLimit.use(str.length + l.length); + return str.replace(l, ''); + } + function remove_last(v, l) { + var str = stringify(v); + var pattern = stringify(l); + this.context.memoryLimit.use(str.length + pattern.length); + var index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + str.substring(index + pattern.length); + } + function rstrip(str, chars) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (var i = str.length - 1, set = new Set(chars); i >= 0; i--) { + if (!set.has(str[i])) + return str.slice(0, i + 1); + } + return ''; + } + return str.trimEnd(); + } + function split(v, arg) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + var arr = str.split(stringify(arg)); + // align to ruby split, which is the behavior of shopify/liquid + // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split + while (arr.length && arr[arr.length - 1] === '') + arr.pop(); + return arr; + } + function strip(v, chars) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + var set = new Set(stringify(chars)); + this.context.memoryLimit.use(set.size); + var i = 0; + var j = str.length - 1; + while (set.has(str[i])) + i++; + while (j >= i && set.has(str[j])) + j--; + return str.slice(i, j + 1); + } + return str.trim(); + } + function strip_newlines(v) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, ''); + } + function capitalize(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); + } + function replace(v, pattern, replacement) { + var str = stringify(v); + pattern = stringify(pattern); + replacement = stringify(replacement); + var parts = str.split(pattern); + var outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length); + this.context.memoryLimit.use(outputSize); + return parts.join(replacement); + } + function replace_first(v, arg1, arg2) { + var str = stringify(v); + arg1 = stringify(arg1); + arg2 = stringify(arg2); + this.context.memoryLimit.use(str.length + arg1.length + arg2.length); + return str.replace(arg1, function () { return arg2; }); + } + function replace_last(v, arg1, arg2) { + var str = stringify(v); + var pattern = stringify(arg1); + var replacement = stringify(arg2); + this.context.memoryLimit.use(str.length + pattern.length + replacement.length); + var index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + replacement + str.substring(index + pattern.length); + } + function truncate(v, l, o) { + if (l === void 0) { l = 50; } + if (o === void 0) { o = '...'; } + var str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + if (str.length <= l) + return v; + return str.substring(0, l - o.length) + o; + } + function truncatewords(v, words, o) { + if (words === void 0) { words = 15; } + if (o === void 0) { o = '...'; } + var str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + var arr = str.split(/\s+/); + if (words <= 0) + words = 1; + var ret = arr.slice(0, words).join(' '); + if (arr.length >= words) + ret += o; + return ret; + } + function normalize_whitespace(v) { + var str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\s+/g, ' '); + } + function number_of_words(input, mode) { + var str = stringify(input); + this.context.memoryLimit.use(str.length); + input = str.trim(); + if (!input) + return 0; + switch (mode) { + case 'cjk': + // Count CJK characters and words + return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length; + case 'auto': + // Count CJK characters, if none, count words + return rCJKWord.test(input) + ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length + : input.split(/\s+/).length; + default: + // Count words only + return input.split(/\s+/).length; + } + } + function array_to_sentence_string(array, connector) { + if (connector === void 0) { connector = 'and'; } + connector = stringify(connector); + var outputSize = connector.length + array.length * 2; + for (var i = 0; i < array.length; i++) + outputSize += stringify(array[i]).length; + this.context.memoryLimit.use(outputSize); + switch (array.length) { + case 0: + return ''; + case 1: + return array[0]; + case 2: + return "".concat(array[0], " ").concat(connector, " ").concat(array[1]); + default: + return "".concat(array.slice(0, -1).join(', '), ", ").concat(connector, " ").concat(array[array.length - 1]); + } + } + + var stringFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + append: append, + prepend: prepend, + lstrip: lstrip, + downcase: downcase, + upcase: upcase, + remove: remove, + remove_first: remove_first, + remove_last: remove_last, + rstrip: rstrip, + split: split, + strip: strip, + strip_newlines: strip_newlines, + capitalize: capitalize, + replace: replace, + replace_first: replace_first, + replace_last: replace_last, + truncate: truncate, + truncatewords: truncatewords, + normalize_whitespace: normalize_whitespace, + number_of_words: number_of_words, + array_to_sentence_string: array_to_sentence_string + }); + + function base64Encode(str) { + return btoa(String.fromCharCode.apply(String, __spreadArray([], __read(new TextEncoder().encode(str)), false))); + } + function base64Decode(str) { + return new TextDecoder().decode(Uint8Array.from(atob(str), function (c) { return c.charCodeAt(0); })); + } + + /** + * Base64 related filters + * + * Implements base64_encode and base64_decode filters for Shopify compatibility + */ + function base64_encode(value) { + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + this.context.memoryLimit.use(value.byteLength); + return value.toString('base64'); + } + var str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Encode(str); + } + function base64_decode(value) { + var str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Decode(str); + } + + var base64Filters = /*#__PURE__*/Object.freeze({ + __proto__: null, + base64_encode: base64_encode, + base64_decode: base64_decode + }); + + function bufferToHex(buffer) { + var bytes = new Uint8Array(buffer); + var hex = ''; + for (var i = 0; i < bytes.length; i++) { + hex += bytes[i].toString(16).padStart(2, '0'); + } + return hex; + } + function sha256(str) { + return __awaiter(this, void 0, void 0, function () { + var data, digest; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + data = new TextEncoder().encode(str); + return [4 /*yield*/, crypto.subtle.digest('SHA-256', data)]; + case 1: + digest = _a.sent(); + return [2 /*return*/, bufferToHex(digest)]; + } + }); + }); + } + function hmacSha256(str, key) { + return __awaiter(this, void 0, void 0, function () { + var encoder, cryptoKey, signature; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + encoder = new TextEncoder(); + return [4 /*yield*/, crypto.subtle.importKey('raw', encoder.encode(key), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])]; + case 1: + cryptoKey = _a.sent(); + return [4 /*yield*/, crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(str))]; + case 2: + signature = _a.sent(); + return [2 /*return*/, bufferToHex(signature)]; + } + }); + }); + } + + /** + * Crypto related filters + * + * Implements sha256 and hmac_sha256 filters for Shopify compatibility + */ + function sha256$1(value) { + var str = stringify(value); + this.context.memoryLimit.use(str.length); + return sha256(str); + } + function hmac_sha256(value, key) { + var str = stringify(value); + var keyStr = stringify(key); + this.context.memoryLimit.use(str.length + keyStr.length); + return hmacSha256(str, keyStr); + } + + var cryptoFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + sha256: sha256$1, + hmac_sha256: hmac_sha256 + }); + + var filters = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), base64Filters), cryptoFilters), misc); + + var default_1 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.identifier = _this.tokenizer.readIdentifier(); + _this.key = _this.identifier.content; + _this.tokenizer.assert(_this.key, 'expected variable name'); + _this.tokenizer.skipBlank(); + _this.tokenizer.assert(_this.tokenizer.peek() === '=', 'expected "="'); + _this.tokenizer.advance(); + _this.value = new Value(_this.tokenizer.readFilteredValue(), _this.liquid); + return _this; + } + default_1.prototype.render = function (ctx) { + var _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _a = ctx.bottom(); + _b = this.key; + return [4 /*yield*/, this.value.value(ctx, this.liquid.options.lenientIf)]; + case 1: + _a[_b] = _c.sent(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.arguments = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.value]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.localScope = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.identifier]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var MODIFIERS = ['offset', 'limit', 'reversed']; + var default_1$1 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid, parser) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + var variable = _this.tokenizer.readIdentifier(); + var inStr = _this.tokenizer.readIdentifier(); + var collection = _this.tokenizer.readValue(); + if (!variable.size() || inStr.content !== 'in' || !collection) { + throw new Error("illegal tag: ".concat(token.getText())); + } + _this.variable = variable.content; + _this.collection = collection; + _this.hash = new Hash(_this.tokenizer, liquid.options.keyValueSeparator); + _this.templates = []; + _this.elseTemplates = []; + var p; + var stream = parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:else', function (tag) { assertEmpty(tag.args); p = _this.elseTemplates; }) + .on('tag:endfor', function (tag) { assertEmpty(tag.args); stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { throw new Error("tag ".concat(token.getText(), " not closed")); }); + stream.start(); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var r, collection, _a, continueKey, hash, modifiers, scope, collection_1, collection_1_1, item, e_1_1; + var e_1, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + r = this.liquid.renderer; + _a = toEnumerable; + return [4 /*yield*/, evalToken(this.collection, ctx)]; + case 1: + collection = _a.apply(void 0, [_c.sent()]); + if (!!collection.length) return [3 /*break*/, 3]; + return [4 /*yield*/, r.renderTemplates(this.elseTemplates, ctx, emitter)]; + case 2: + _c.sent(); + return [2 /*return*/]; + case 3: + continueKey = 'continue-' + this.variable + '-' + this.collection.getText(); + ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) })); + return [4 /*yield*/, this.hash.render(ctx)]; + case 4: + hash = (_c.sent()); + ctx.pop(); + modifiers = this.liquid.options.orderedFilterParameters + ? Object.keys(hash).filter(function (x) { return MODIFIERS.includes(x); }) + : MODIFIERS.filter(function (x) { return hash[x] !== undefined; }); + collection = modifiers.reduce(function (collection, modifier) { + if (modifier === 'offset') + return offset(collection, hash['offset']); + if (modifier === 'limit') + return limit(collection, hash['limit']); + return reversed(collection); + }, collection); + ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length); + scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) }); + ctx.push(scope); + _c.label = 5; + case 5: + _c.trys.push([5, 10, 11, 12]); + collection_1 = __values(collection), collection_1_1 = collection_1.next(); + _c.label = 6; + case 6: + if (!!collection_1_1.done) return [3 /*break*/, 9]; + item = collection_1_1.value; + scope[this.variable] = item; + ctx.continueCalled = ctx.breakCalled = false; + return [4 /*yield*/, r.renderTemplates(this.templates, ctx, emitter)]; + case 7: + _c.sent(); + if (ctx.breakCalled) + return [3 /*break*/, 9]; + scope.forloop.next(); + _c.label = 8; + case 8: + collection_1_1 = collection_1.next(); + return [3 /*break*/, 6]; + case 9: return [3 /*break*/, 12]; + case 10: + e_1_1 = _c.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 12]; + case 11: + try { + if (collection_1_1 && !collection_1_1.done && (_b = collection_1.return)) _b.call(collection_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 12: + ctx.continueCalled = ctx.breakCalled = false; + ctx.pop(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + var templates; + return __generator(this, function (_a) { + templates = this.templates.slice(); + if (this.elseTemplates) { + templates.push.apply(templates, __spreadArray([], __read(this.elseTemplates), false)); + } + return [2 /*return*/, templates]; + }); + }; + default_1.prototype.arguments = function () { + var _a, _b, v, e_2_1; + var e_2, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: return [4 /*yield*/, this.collection]; + case 1: + _d.sent(); + _d.label = 2; + case 2: + _d.trys.push([2, 7, 8, 9]); + _a = __values(Object.values(this.hash.hash)), _b = _a.next(); + _d.label = 3; + case 3: + if (!!_b.done) return [3 /*break*/, 6]; + v = _b.value; + if (!isValueToken(v)) return [3 /*break*/, 5]; + return [4 /*yield*/, v]; + case 4: + _d.sent(); + _d.label = 5; + case 5: + _b = _a.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_2_1 = _d.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); + }; + default_1.prototype.blockScope = function () { + return [this.variable, 'forloop']; + }; + return default_1; + }(Tag)); + function reversed(arr) { + return __spreadArray([], __read(arr), false).reverse(); + } + function offset(arr, count) { + return arr.slice(count); + } + function limit(arr, count) { + return arr.slice(0, count); + } + + var default_1$2 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid, parser) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + _this.templates = []; + _this.identifier = _this.readVariable(); + _this.variable = _this.identifier.content; + while (remainTokens.length) { + var token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcapture') + return _this; + _this.templates.push(parser.parseToken(token, remainTokens)); + } + throw new Error("tag ".concat(tagToken.getText(), " not closed")); + } + default_1.prototype.readVariable = function () { + var ident = this.tokenizer.readIdentifier(); + if (ident.content) + return ident; + ident = this.tokenizer.readQuoted(); + if (ident) + return ident; + throw this.tokenizer.error('invalid capture name'); + }; + default_1.prototype.render = function (ctx) { + var r, html; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + r = this.liquid.renderer; + return [4 /*yield*/, r.renderTemplates(this.templates, ctx)]; + case 1: + html = _a.sent(); + ctx.bottom()[this.variable] = html; + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.templates]; + }); + }; + default_1.prototype.localScope = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.identifier]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var default_1$3 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid, parser) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + _this.branches = []; + _this.elseTemplates = []; + _this.value = new Value(_this.tokenizer.readFilteredValue(), _this.liquid); + _this.elseTemplates = []; + var p = []; + var elseCount = 0; + var stream = parser.parseStream(remainTokens) + .on('tag:when', function (token) { + if (elseCount > 0) { + return; + } + p = []; + var values = []; + while (!token.tokenizer.end()) { + values.push(token.tokenizer.readValueOrThrow()); + token.tokenizer.skipBlank(); + if (token.tokenizer.peek() === ',') { + token.tokenizer.readTo(','); + } + else { + token.tokenizer.readTo('or'); + } + } + _this.branches.push({ + values: values, + templates: p + }); + }) + .on('tag:else', function () { + elseCount++; + p = _this.elseTemplates; + }) + .on('tag:endcase', function () { return stream.stop(); }) + .on('template', function (tpl) { + if (p !== _this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', function () { + throw new Error("tag ".concat(tagToken.getText(), " not closed")); + }); + stream.start(); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var r, target, _a, branchHit, _b, _c, branch, _d, _e, valueToken, value, e_1_1, e_2_1; + var e_2, _f, e_1, _g; + return __generator(this, function (_h) { + switch (_h.label) { + case 0: + r = this.liquid.renderer; + _a = toValue; + return [4 /*yield*/, this.value.value(ctx, ctx.opts.lenientIf)]; + case 1: + target = _a.apply(void 0, [_h.sent()]); + branchHit = false; + _h.label = 2; + case 2: + _h.trys.push([2, 14, 15, 16]); + _b = __values(this.branches), _c = _b.next(); + _h.label = 3; + case 3: + if (!!_c.done) return [3 /*break*/, 13]; + branch = _c.value; + _h.label = 4; + case 4: + _h.trys.push([4, 10, 11, 12]); + _d = (e_1 = void 0, __values(branch.values)), _e = _d.next(); + _h.label = 5; + case 5: + if (!!_e.done) return [3 /*break*/, 9]; + valueToken = _e.value; + return [4 /*yield*/, evalToken(valueToken, ctx, ctx.opts.lenientIf)]; + case 6: + value = _h.sent(); + if (!equals(target, value)) return [3 /*break*/, 8]; + return [4 /*yield*/, r.renderTemplates(branch.templates, ctx, emitter)]; + case 7: + _h.sent(); + branchHit = true; + return [3 /*break*/, 9]; + case 8: + _e = _d.next(); + return [3 /*break*/, 5]; + case 9: return [3 /*break*/, 12]; + case 10: + e_1_1 = _h.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 12]; + case 11: + try { + if (_e && !_e.done && (_g = _d.return)) _g.call(_d); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 12: + _c = _b.next(); + return [3 /*break*/, 3]; + case 13: return [3 /*break*/, 16]; + case 14: + e_2_1 = _h.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 16]; + case 15: + try { + if (_c && !_c.done && (_f = _b.return)) _f.call(_b); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 16: + if (!!branchHit) return [3 /*break*/, 18]; + return [4 /*yield*/, r.renderTemplates(this.elseTemplates, ctx, emitter)]; + case 17: + _h.sent(); + _h.label = 18; + case 18: return [2 /*return*/]; + } + }); + }; + default_1.prototype.arguments = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.value]; + case 1: + _a.sent(); + return [5 /*yield**/, __values(this.branches.flatMap(function (b) { return b.values; }))]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + var templates; + return __generator(this, function (_a) { + templates = this.branches.flatMap(function (b) { return b.templates; }); + if (this.elseTemplates) { + templates.push.apply(templates, __spreadArray([], __read(this.elseTemplates), false)); + } + return [2 /*return*/, templates]; + }); + }; + return default_1; + }(Tag)); + + var default_1$4 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + while (remainTokens.length) { + var token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcomment') + return _this; + } + throw new Error("tag ".concat(tagToken.getText(), " not closed")); + } + default_1.prototype.render = function () { }; + return default_1; + }(Tag)); + + var default_1$5 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid, parser) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + var tokenizer = _this.tokenizer; + _this.file = parseFilePath(tokenizer, _this.liquid, parser); + _this.currentFile = token.file; + while (!tokenizer.end()) { + tokenizer.skipBlank(); + var begin = tokenizer.p; + var keyword = tokenizer.readIdentifier(); + if (keyword.content === 'with' || keyword.content === 'for') { + tokenizer.skipBlank(); + // can be normal key/value pair, like "with: true" + if (tokenizer.peek() !== ':') { + var value = tokenizer.readValue(); + // can be normal key, like "with," + if (value) { + var beforeAs = tokenizer.p; + var asStr = tokenizer.readIdentifier(); + var alias = void 0; + if (asStr.content === 'as') + alias = tokenizer.readIdentifier(); + else + tokenizer.p = beforeAs; + var binding = { value: value, alias: alias && alias.content }; + if (keyword.content === 'with') + _this.with = binding; + else + _this.forBinding = binding; + tokenizer.skipBlank(); + if (tokenizer.peek() === ',') + tokenizer.advance(); + continue; // matched! + } + } + } + /** + * restore cursor if with/for not matched + */ + tokenizer.p = begin; + break; + } + _this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var _a, liquid, hash, filepath, childCtx, scope, _b, _c, _d, value, alias, _e, _f, _g, value, alias, collection, _h, collection_1, collection_1_1, item, templates, e_1_1, templates; + var e_1, _j; + return __generator(this, function (_k) { + switch (_k.label) { + case 0: + _a = this, liquid = _a.liquid, hash = _a.hash; + return [4 /*yield*/, renderFilePath(this.file, ctx, liquid)]; + case 1: + filepath = (_k.sent()); + assert(filepath, function () { return "illegal file path \"".concat(filepath, "\""); }); + childCtx = ctx.spawn(); + scope = childCtx.bottom(); + _b = __assign; + _c = [scope]; + return [4 /*yield*/, hash.render(ctx)]; + case 2: + _b.apply(void 0, _c.concat([_k.sent()])); + if (!this.with) return [3 /*break*/, 4]; + _d = this.with, value = _d.value, alias = _d.alias; + _e = scope; + _f = alias || filepath; + return [4 /*yield*/, evalToken(value, ctx)]; + case 3: + _e[_f] = _k.sent(); + _k.label = 4; + case 4: + if (!this.forBinding) return [3 /*break*/, 15]; + _g = this.forBinding, value = _g.value, alias = _g.alias; + _h = toEnumerable; + return [4 /*yield*/, evalToken(value, ctx)]; + case 5: + collection = _h.apply(void 0, [_k.sent()]); + scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias); + _k.label = 6; + case 6: + _k.trys.push([6, 12, 13, 14]); + collection_1 = __values(collection), collection_1_1 = collection_1.next(); + _k.label = 7; + case 7: + if (!!collection_1_1.done) return [3 /*break*/, 11]; + item = collection_1_1.value; + scope[alias] = item; + return [4 /*yield*/, liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)]; + case 8: + templates = (_k.sent()); + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, childCtx, emitter)]; + case 9: + _k.sent(); + scope['forloop'].next(); + _k.label = 10; + case 10: + collection_1_1 = collection_1.next(); + return [3 /*break*/, 7]; + case 11: return [3 /*break*/, 14]; + case 12: + e_1_1 = _k.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 14]; + case 13: + try { + if (collection_1_1 && !collection_1_1.done && (_j = collection_1.return)) _j.call(collection_1); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 14: return [3 /*break*/, 18]; + case 15: return [4 /*yield*/, liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)]; + case 16: + templates = (_k.sent()); + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, childCtx, emitter)]; + case 17: + _k.sent(); + _k.label = 18; + case 18: return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function (partials, sync) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(partials && isString(this.file))) return [3 /*break*/, 2]; + return [4 /*yield*/, this.liquid._parsePartialFile(this.file, sync, this.currentFile)]; + case 1: return [2 /*return*/, (_a.sent())]; + case 2: return [2 /*return*/, []]; + } + }); + }; + default_1.prototype.partialScope = function () { + if (isString(this.file)) { + var names = Object.keys(this.hash.hash); + if (this.with) { + var _a = this.with, value = _a.value, alias = _a.alias; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + if (this.forBinding) { + var _b = this.forBinding, value = _b.value, alias = _b.alias; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + return { name: this.file, isolated: true, scope: names }; + } + }; + default_1.prototype.arguments = function () { + var _a, _b, v, e_2_1, value, value; + var e_2, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 5, 6, 7]); + _a = __values(Object.values(this.hash.hash)), _b = _a.next(); + _d.label = 1; + case 1: + if (!!_b.done) return [3 /*break*/, 4]; + v = _b.value; + if (!isValueToken(v)) return [3 /*break*/, 3]; + return [4 /*yield*/, v]; + case 2: + _d.sent(); + _d.label = 3; + case 3: + _b = _a.next(); + return [3 /*break*/, 1]; + case 4: return [3 /*break*/, 7]; + case 5: + e_2_1 = _d.sent(); + e_2 = { error: e_2_1 }; + return [3 /*break*/, 7]; + case 6: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_2) throw e_2.error; } + return [7 /*endfinally*/]; + case 7: + if (!this.with) return [3 /*break*/, 9]; + value = this.with.value; + if (!isValueToken(value)) return [3 /*break*/, 9]; + return [4 /*yield*/, value]; + case 8: + _d.sent(); + _d.label = 9; + case 9: + if (!this.forBinding) return [3 /*break*/, 11]; + value = this.forBinding.value; + if (!isValueToken(value)) return [3 /*break*/, 11]; + return [4 /*yield*/, value]; + case 10: + _d.sent(); + _d.label = 11; + case 11: return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + /** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ + function parseFilePath(tokenizer, liquid, parser) { + if (liquid.options.dynamicPartials) { + var file = tokenizer.readValue(); + tokenizer.assert(file, 'illegal file path'); + if (file.getText() === 'none') + return; + if (isQuotedToken(file)) { + // for filenames like "files/{{file}}", eval as liquid template + var templates_1 = parser.parse(evalQuotedToken(file)); + return optimize(templates_1); + } + return file; + } + var tokens = __spreadArray([], __read(tokenizer.readFileNameTemplate(liquid.options)), false); + var templates = optimize(parser.parseTokens(tokens)); + return templates === 'none' ? undefined : templates; + } + function optimize(templates) { + // for filenames like "files/file.liquid", extract the string directly + if (templates.length === 1 && isHTMLToken(templates[0].token)) + return templates[0].token.getContent(); + return templates; + } + function renderFilePath(file, ctx, liquid) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (typeof file === 'string') + return [2 /*return*/, file]; + if (Array.isArray(file)) + return [2 /*return*/, liquid.renderer.renderTemplates(file, ctx)]; + return [4 /*yield*/, evalToken(file, ctx)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + } + + var default_1$6 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid, parser) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + var tokenizer = token.tokenizer; + _this.file = parseFilePath(tokenizer, _this.liquid, parser); + _this.currentFile = token.file; + var begin = tokenizer.p; + var withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + _this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + _this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var _a, liquid, hash, withVar, renderer, filepath, saved, scope, _b, _c, _d, templates; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _a = this, liquid = _a.liquid, hash = _a.hash, withVar = _a.withVar; + renderer = liquid.renderer; + return [4 /*yield*/, renderFilePath(this.file, ctx, liquid)]; + case 1: + filepath = (_e.sent()); + assert(filepath, function () { return "illegal file path \"".concat(filepath, "\""); }); + saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + _b = createScope; + return [4 /*yield*/, hash.render(ctx)]; + case 2: + scope = _b.apply(void 0, [(_e.sent())]); + if (!withVar) return [3 /*break*/, 4]; + _c = scope; + _d = filepath; + return [4 /*yield*/, evalToken(withVar, ctx)]; + case 3: + _c[_d] = _e.sent(); + _e.label = 4; + case 4: return [4 /*yield*/, liquid._parsePartialFile(filepath, ctx.sync, this.currentFile)]; + case 5: + templates = (_e.sent()); + ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope); + return [4 /*yield*/, renderer.renderTemplates(templates, ctx, emitter)]; + case 6: + _e.sent(); + ctx.pop(); + ctx.restoreRegister(saved); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function (partials, sync) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(partials && isString(this.file))) return [3 /*break*/, 2]; + return [4 /*yield*/, this.liquid._parsePartialFile(this.file, sync, this.currentFile)]; + case 1: return [2 /*return*/, (_a.sent())]; + case 2: return [2 /*return*/, []]; + } + }); + }; + default_1.prototype.partialScope = function () { + if (isString(this.file)) { + var names = void 0; + if (this.liquid.options.jekyllInclude) { + names = ['include']; + } + else { + names = Object.keys(this.hash.hash); + if (this.withVar) { + names.push([this.file, this.withVar]); + } + } + return { name: this.file, isolated: false, scope: names }; + } + }; + default_1.prototype.arguments = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(Object.values(this.hash.hash).filter(isValueToken))]; + case 1: + _a.sent(); + if (!isValueToken(this.file)) return [3 /*break*/, 3]; + return [4 /*yield*/, this.file]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + if (!isValueToken(this.withVar)) return [3 /*break*/, 5]; + return [4 /*yield*/, this.withVar]; + case 4: + _a.sent(); + _a.label = 5; + case 5: return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var default_1$7 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.identifier = _this.tokenizer.readIdentifier(); + _this.variable = _this.identifier.content; + return _this; + } + default_1.prototype.render = function (context, emitter) { + var scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + emitter.write(stringify(--scope[this.variable])); + }; + default_1.prototype.localScope = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.identifier]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var default_1$8 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.candidates = []; + var group = _this.tokenizer.readValue(); + _this.tokenizer.skipBlank(); + if (group) { + if (_this.tokenizer.peek() === ':') { + _this.group = group; + _this.tokenizer.advance(); + } + else + _this.candidates.push(group); + } + while (!_this.tokenizer.end()) { + var value = _this.tokenizer.readValue(); + if (value) + _this.candidates.push(value); + _this.tokenizer.readTo(','); + } + _this.tokenizer.assert(_this.candidates.length, function () { return "empty candidates: \"".concat(token.getText(), "\""); }); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var group, fingerprint, groups, idx, candidate; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, evalToken(this.group, ctx)]; + case 1: + group = (_a.sent()); + fingerprint = "cycle:".concat(group, ":") + this.candidates.join(','); + groups = ctx.getRegister('cycle', {}); + idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return [4 /*yield*/, evalToken(candidate, ctx)]; + case 2: return [2 /*return*/, _a.sent()]; + } + }); + }; + default_1.prototype.arguments = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this.candidates)]; + case 1: + _a.sent(); + if (!this.group) return [3 /*break*/, 3]; + return [4 /*yield*/, this.group]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var default_1$9 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid, parser) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + _this.branches = []; + var p = []; + parser.parseStream(remainTokens) + .on('start', function () { return _this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), _this.liquid), + templates: (p = []) + }); }) + .on('tag:elsif', function (token) { + assert(!_this.elseTemplates, 'unexpected elsif after else'); + _this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), _this.liquid), + templates: (p = []) + }); + }) + .on('tag:else', function (tag) { + assertEmpty(tag.args); + assert(!_this.elseTemplates, 'duplicated else'); + p = _this.elseTemplates = []; + }) + .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { throw new Error("tag ".concat(tagToken.getText(), " not closed")); }) + .start(); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var r, _a, _b, _c, value, templates, v, e_1_1; + var e_1, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + r = this.liquid.renderer; + _e.label = 1; + case 1: + _e.trys.push([1, 7, 8, 9]); + _a = __values(this.branches), _b = _a.next(); + _e.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 6]; + _c = _b.value, value = _c.value, templates = _c.templates; + return [4 /*yield*/, value.value(ctx, ctx.opts.lenientIf)]; + case 3: + v = _e.sent(); + if (!isTruthy(v, ctx)) return [3 /*break*/, 5]; + return [4 /*yield*/, r.renderTemplates(templates, ctx, emitter)]; + case 4: + _e.sent(); + return [2 /*return*/]; + case 5: + _b = _a.next(); + return [3 /*break*/, 2]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _e.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_b && !_b.done && (_d = _a.return)) _d.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: return [4 /*yield*/, r.renderTemplates(this.elseTemplates || [], ctx, emitter)]; + case 10: + _e.sent(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + var templates; + return __generator(this, function (_a) { + templates = this.branches.flatMap(function (b) { return b.templates; }); + if (this.elseTemplates) { + templates.push.apply(templates, __spreadArray([], __read(this.elseTemplates), false)); + } + return [2 /*return*/, templates]; + }); + }; + default_1.prototype.arguments = function () { + return this.branches.map(function (b) { return b.value; }); + }; + return default_1; + }(Tag)); + + var default_1$a = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.identifier = _this.tokenizer.readIdentifier(); + _this.variable = _this.identifier.content; + return _this; + } + default_1.prototype.render = function (context, emitter) { + var scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + var val = scope[this.variable]; + scope[this.variable]++; + emitter.write(stringify(val)); + }; + default_1.prototype.localScope = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.identifier]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var default_1$b = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid, parser) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.file = parseFilePath(_this.tokenizer, _this.liquid, parser); + _this.currentFile = token.file; + _this.args = new Hash(_this.tokenizer, liquid.options.keyValueSeparator); + _this.templates = parser.parseTokens(remainTokens); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var _a, liquid, args, file, renderer, filepath, templates, html, blocks, _b, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _a = this, liquid = _a.liquid, args = _a.args, file = _a.file; + renderer = liquid.renderer; + if (!(file === undefined)) return [3 /*break*/, 2]; + ctx.setRegister('blockMode', BlockMode.OUTPUT); + return [4 /*yield*/, renderer.renderTemplates(this.templates, ctx, emitter)]; + case 1: + _e.sent(); + return [2 /*return*/]; + case 2: return [4 /*yield*/, renderFilePath(this.file, ctx, liquid)]; + case 3: + filepath = (_e.sent()); + assert(filepath, function () { return "illegal file path \"".concat(filepath, "\""); }); + return [4 /*yield*/, liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile)]; + case 4: + templates = (_e.sent()); + // render remaining contents and store rendered results + ctx.setRegister('blockMode', BlockMode.STORE); + return [4 /*yield*/, renderer.renderTemplates(this.templates, ctx)]; + case 5: + html = _e.sent(); + blocks = ctx.getRegister('blocks', {}); + // set whole content to anonymous block if anonymous doesn't specified + if (blocks[''] === undefined) + blocks[''] = function (parent, emitter) { return emitter.write(html); }; + ctx.setRegister('blockMode', BlockMode.OUTPUT); + // render the layout file use stored blocks + _c = (_b = ctx).push; + _d = createScope; + return [4 /*yield*/, args.render(ctx)]; + case 6: + // render the layout file use stored blocks + _c.apply(_b, [_d.apply(void 0, [(_e.sent())])]); + return [4 /*yield*/, renderer.renderTemplates(templates, ctx, emitter)]; + case 7: + _e.sent(); + ctx.pop(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function (partials) { + var templates, _a, _b, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + templates = this.templates.slice(); + if (!(partials && isString(this.file))) return [3 /*break*/, 2]; + _b = (_a = templates.push).apply; + _c = [templates]; + _d = [[]]; + return [4 /*yield*/, this.liquid._parsePartialFile(this.file, true, this.currentFile)]; + case 1: + _b.apply(_a, _c.concat([__spreadArray.apply(void 0, _d.concat([__read.apply(void 0, [(_e.sent())]), false]))])); + _e.label = 2; + case 2: return [2 /*return*/, templates]; + } + }); + }; + default_1.prototype.arguments = function () { + var _a, _b, v, e_1_1; + var e_1, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 5, 6, 7]); + _a = __values(Object.values(this.args.hash)), _b = _a.next(); + _d.label = 1; + case 1: + if (!!_b.done) return [3 /*break*/, 4]; + v = _b.value; + if (!isValueToken(v)) return [3 /*break*/, 3]; + return [4 /*yield*/, v]; + case 2: + _d.sent(); + _d.label = 3; + case 3: + _b = _a.next(); + return [3 /*break*/, 1]; + case 4: return [3 /*break*/, 7]; + case 5: + e_1_1 = _d.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 7]; + case 6: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 7: + if (!isValueToken(this.file)) return [3 /*break*/, 9]; + return [4 /*yield*/, this.file]; + case 8: + _d.sent(); + _d.label = 9; + case 9: return [2 /*return*/]; + } + }); + }; + default_1.prototype.partialScope = function () { + if (isString(this.file)) { + return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) }; + } + }; + return default_1; + }(Tag)); + + var default_1$c = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid, parser) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.templates = []; + var match = /\w+/.exec(token.args); + _this.block = match ? match[0] : ''; + while (remainTokens.length) { + var token_1 = remainTokens.shift(); + if (isTagToken(token_1) && token_1.name === 'endblock') + return _this; + var template = parser.parseToken(token_1, remainTokens); + _this.templates.push(template); + } + throw new Error("tag ".concat(token.getText(), " not closed")); + } + default_1.prototype.render = function (ctx, emitter) { + var blockRender; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + blockRender = this.getBlockRender(ctx); + if (!(ctx.getRegister('blockMode') === BlockMode.STORE)) return [3 /*break*/, 1]; + ctx.getRegister('blocks', {})[this.block] = blockRender; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, blockRender(new BlockDrop(), emitter)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [2 /*return*/]; + } + }); + }; + default_1.prototype.getBlockRender = function (ctx) { + var self = this; + var _a = this, liquid = _a.liquid, templates = _a.templates; + var renderChild = ctx.getRegister('blocks', {})[this.block]; + var renderCurrent = function (superBlock, emitter) { + var stack; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + stack = ctx.getRegister('blockStack', []); + if (stack.includes(self)) + throw new Error('block tag cannot be nested'); + stack.push(self); + ctx.push(createScope({ block: superBlock })); + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, ctx, emitter)]; + case 1: + _a.sent(); + ctx.pop(); + stack.pop(); + return [2 /*return*/]; + } + }); + }; + return renderChild + ? function (superBlock, emitter) { return renderChild(new BlockDrop(function (emitter) { return renderCurrent(superBlock, emitter); }), emitter); } + : renderCurrent; + }; + default_1.prototype.children = function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.templates]; + }); + }; + default_1.prototype.blockScope = function () { + return ['block']; + }; + return default_1; + }(Tag)); + + var default_1$d = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + _this.tokens = []; + while (remainTokens.length) { + var token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endraw') + return _this; + _this.tokens.push(token); + } + throw new Error("tag ".concat(tagToken.getText(), " not closed")); + } + default_1.prototype.render = function () { + return this.tokens.map(function (token) { return token.getText(); }).join(''); + }; + return default_1; + }(Tag)); + + var TablerowloopDrop = /** @class */ (function (_super) { + __extends(TablerowloopDrop, _super); + function TablerowloopDrop(length, cols, collection, variable) { + var _this = _super.call(this, length, collection, variable) || this; + _this.length = length; + _this.cols = cols; + return _this; + } + TablerowloopDrop.prototype.row = function () { + return Math.floor(this.i / this.cols) + 1; + }; + TablerowloopDrop.prototype.col0 = function () { + return (this.i % this.cols); + }; + TablerowloopDrop.prototype.col = function () { + return this.col0() + 1; + }; + TablerowloopDrop.prototype.col_first = function () { + return this.col0() === 0; + }; + TablerowloopDrop.prototype.col_last = function () { + return this.col() === this.cols; + }; + return TablerowloopDrop; + }(ForloopDrop)); + + var default_1$e = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid, parser) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + var variable = _this.tokenizer.readIdentifier(); + _this.tokenizer.skipBlank(); + var predicate = _this.tokenizer.readIdentifier(); + var collectionToken = _this.tokenizer.readValue(); + if (predicate.content !== 'in' || !collectionToken) { + throw new Error("illegal tag: ".concat(tagToken.getText())); + } + _this.variable = variable.content; + _this.collection = collectionToken; + _this.args = new Hash(_this.tokenizer, liquid.options.keyValueSeparator); + _this.templates = []; + var p; + var stream = parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:endtablerow', function () { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag ".concat(tagToken.getText(), " not closed")); + }); + stream.start(); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var collection, _a, args, offset, limit, cols, r, tablerowloop, scope, idx; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = toEnumerable; + return [4 /*yield*/, evalToken(this.collection, ctx)]; + case 1: + collection = _a.apply(void 0, [_b.sent()]); + return [4 /*yield*/, this.args.render(ctx)]; + case 2: + args = (_b.sent()); + offset = args.offset || 0; + limit = (args.limit === undefined) ? collection.length : args.limit; + collection = collection.slice(offset, offset + limit); + cols = args.cols || collection.length; + r = this.liquid.renderer; + tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable); + scope = createScope({ tablerowloop: tablerowloop }); + ctx.push(scope); + idx = 0; + _b.label = 3; + case 3: + if (!(idx < collection.length)) return [3 /*break*/, 6]; + scope[this.variable] = collection[idx]; + if (tablerowloop.col0() === 0) { + if (tablerowloop.row() !== 1) + emitter.write(''); + emitter.write("")); + } + emitter.write("")); + return [4 /*yield*/, r.renderTemplates(this.templates, ctx, emitter)]; + case 4: + _b.sent(); + emitter.write(''); + _b.label = 5; + case 5: + idx++, tablerowloop.next(); + return [3 /*break*/, 3]; + case 6: + if (collection.length) + emitter.write(''); + ctx.pop(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.templates]; + }); + }; + default_1.prototype.arguments = function () { + var _a, _b, v, e_1_1; + var e_1, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: return [4 /*yield*/, this.collection]; + case 1: + _d.sent(); + _d.label = 2; + case 2: + _d.trys.push([2, 7, 8, 9]); + _a = __values(Object.values(this.args.hash)), _b = _a.next(); + _d.label = 3; + case 3: + if (!!_b.done) return [3 /*break*/, 6]; + v = _b.value; + if (!isValueToken(v)) return [3 /*break*/, 5]; + return [4 /*yield*/, v]; + case 4: + _d.sent(); + _d.label = 5; + case 5: + _b = _a.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _d.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_b && !_b.done && (_c = _a.return)) _c.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); + }; + default_1.prototype.blockScope = function () { + return [this.variable, 'tablerowloop']; + }; + return default_1; + }(Tag)); + + var default_1$f = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid, parser) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + _this.branches = []; + _this.elseTemplates = []; + var p = []; + var elseCount = 0; + parser.parseStream(remainTokens) + .on('start', function () { return _this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), _this.liquid), + test: isFalsy, + templates: (p = []) + }); }) + .on('tag:elsif', function (token) { + if (elseCount > 0) { + p = []; + return; + } + _this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), _this.liquid), + test: isTruthy, + templates: (p = []) + }); + }) + .on('tag:else', function () { + elseCount++; + p = _this.elseTemplates; + }) + .on('tag:endunless', function () { this.stop(); }) + .on('template', function (tpl) { + if (p !== _this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', function () { throw new Error("tag ".concat(tagToken.getText(), " not closed")); }) + .start(); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var r, _a, _b, _c, value, test_1, templates, v, e_1_1; + var e_1, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + r = this.liquid.renderer; + _e.label = 1; + case 1: + _e.trys.push([1, 7, 8, 9]); + _a = __values(this.branches), _b = _a.next(); + _e.label = 2; + case 2: + if (!!_b.done) return [3 /*break*/, 6]; + _c = _b.value, value = _c.value, test_1 = _c.test, templates = _c.templates; + return [4 /*yield*/, value.value(ctx, ctx.opts.lenientIf)]; + case 3: + v = _e.sent(); + if (!test_1(v, ctx)) return [3 /*break*/, 5]; + return [4 /*yield*/, r.renderTemplates(templates, ctx, emitter)]; + case 4: + _e.sent(); + return [2 /*return*/]; + case 5: + _b = _a.next(); + return [3 /*break*/, 2]; + case 6: return [3 /*break*/, 9]; + case 7: + e_1_1 = _e.sent(); + e_1 = { error: e_1_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (_b && !_b.done && (_d = _a.return)) _d.call(_a); + } + finally { if (e_1) throw e_1.error; } + return [7 /*endfinally*/]; + case 9: return [4 /*yield*/, r.renderTemplates(this.elseTemplates, ctx, emitter)]; + case 10: + _e.sent(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + var children; + return __generator(this, function (_a) { + children = this.branches.flatMap(function (b) { return b.templates; }); + if (this.elseTemplates) { + children.push.apply(children, __spreadArray([], __read(this.elseTemplates), false)); + } + return [2 /*return*/, children]; + }); + }; + default_1.prototype.arguments = function () { + return this.branches.map(function (b) { return b.value; }); + }; + return default_1; + }(Tag)); + + var default_1$g = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + default_1.prototype.render = function (ctx, _emitter) { + ctx.breakCalled = true; + }; + return default_1; + }(Tag)); + + var default_1$h = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + default_1.prototype.render = function (ctx, _emitter) { + ctx.continueCalled = true; + }; + return default_1; + }(Tag)); + + var default_1$i = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + _this.tokenizer.skipBlank(); + if (!_this.tokenizer.end()) { + _this.value = new Value(_this.tokenizer.readFilteredValue(), _this.liquid); + } + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + var val; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!this.value) + return [2 /*return*/]; + return [4 /*yield*/, this.value.value(ctx, false)]; + case 1: + val = _a.sent(); + emitter.write(val); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.arguments = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!this.value) return [3 /*break*/, 2]; + return [4 /*yield*/, this.value]; + case 1: + _a.sent(); + _a.label = 2; + case 2: return [2 /*return*/]; + } + }); + }; + return default_1; + }(Tag)); + + var default_1$j = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token, remainTokens, liquid, parser) { + var _this = _super.call(this, token, remainTokens, liquid) || this; + var tokens = _this.tokenizer.readLiquidTagTokens(_this.liquid.options); + _this.templates = parser.parseTokens(tokens); + return _this; + } + default_1.prototype.render = function (ctx, emitter) { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, ctx, emitter)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + default_1.prototype.children = function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.templates]; + }); + }; + return default_1; + }(Tag)); + + var default_1$k = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(tagToken, remainTokens, liquid) { + var _this = _super.call(this, tagToken, remainTokens, liquid) || this; + if (tagToken.args.search(/\n\s*[^#\s]/g) !== -1) { + throw new Error('every line of an inline comment must start with a \'#\' character'); + } + return _this; + } + default_1.prototype.render = function () { }; + return default_1; + }(Tag)); + + var tags = { + assign: default_1, + 'for': default_1$1, + capture: default_1$2, + 'case': default_1$3, + comment: default_1$4, + include: default_1$6, + render: default_1$5, + decrement: default_1$7, + increment: default_1$a, + cycle: default_1$8, + 'if': default_1$9, + layout: default_1$b, + block: default_1$c, + raw: default_1$d, + tablerow: default_1$e, + unless: default_1$f, + 'break': default_1$g, + 'continue': default_1$h, + echo: default_1$i, + liquid: default_1$j, + '#': default_1$k + }; + + var Liquid = /** @class */ (function () { + function Liquid(opts) { + if (opts === void 0) { opts = {}; } + var _this = this; + this.renderer = new Render(); + this.filters = Object.create(null); + this.tags = Object.create(null); + this.options = normalize(opts); + // eslint-disable-next-line deprecation/deprecation + this.parser = new Parser(this); + forOwn(tags, function (conf, name) { return _this.registerTag(name, conf); }); + forOwn(filters, function (handler, name) { return _this.registerFilter(name, handler); }); + } + Liquid.prototype.parse = function (html, filepath) { + var parser = new Parser(this); + return parser.parse(html, filepath); + }; + Liquid.prototype._render = function (tpl, scope, renderOptions) { + var ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplates(tpl, ctx); + }; + Liquid.prototype.render = function (tpl, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, toPromise(this._render(tpl, scope, __assign(__assign({}, renderOptions), { sync: false })))]; + }); + }); + }; + Liquid.prototype.renderSync = function (tpl, scope, renderOptions) { + return toValueSync(this._render(tpl, scope, __assign(__assign({}, renderOptions), { sync: true }))); + }; + Liquid.prototype.renderToNodeStream = function (tpl, scope, renderOptions) { + if (renderOptions === void 0) { renderOptions = {}; } + var ctx = new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplatesToNodeStream(tpl, ctx); + }; + Liquid.prototype._parseAndRender = function (html, scope, renderOptions) { + var tpl = this.parse(html); + return this._render(tpl, scope, renderOptions); + }; + Liquid.prototype.parseAndRender = function (html, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, toPromise(this._parseAndRender(html, scope, __assign(__assign({}, renderOptions), { sync: false })))]; + }); + }); + }; + Liquid.prototype.parseAndRenderSync = function (html, scope, renderOptions) { + return toValueSync(this._parseAndRender(html, scope, __assign(__assign({}, renderOptions), { sync: true }))); + }; + Liquid.prototype._parsePartialFile = function (file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, exports.LookupType.Partials, currentFile); + }; + Liquid.prototype._parseLayoutFile = function (file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, exports.LookupType.Layouts, currentFile); + }; + Liquid.prototype._parseFile = function (file, sync, lookupType, currentFile) { + return new Parser(this).parseFile(file, sync, lookupType, currentFile); + }; + Liquid.prototype.parseFile = function (file, lookupType) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, toPromise(new Parser(this).parseFile(file, false, lookupType))]; + }); + }); + }; + Liquid.prototype.parseFileSync = function (file, lookupType) { + return toValueSync(new Parser(this).parseFile(file, true, lookupType)); + }; + Liquid.prototype._renderFile = function (file, ctx, renderFileOptions) { + var templates; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType)]; + case 1: + templates = (_a.sent()); + return [4 /*yield*/, this._render(templates, ctx, renderFileOptions)]; + case 2: return [2 /*return*/, _a.sent()]; + } + }); + }; + Liquid.prototype.renderFile = function (file, ctx, renderFileOptions) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, toPromise(this._renderFile(file, ctx, __assign(__assign({}, renderFileOptions), { sync: false })))]; + }); + }); + }; + Liquid.prototype.renderFileSync = function (file, ctx, renderFileOptions) { + return toValueSync(this._renderFile(file, ctx, __assign(__assign({}, renderFileOptions), { sync: true }))); + }; + Liquid.prototype.renderFileToNodeStream = function (file, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function () { + var templates; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parseFile(file)]; + case 1: + templates = _a.sent(); + return [2 /*return*/, this.renderToNodeStream(templates, scope, renderOptions)]; + } + }); + }); + }; + Liquid.prototype._evalValue = function (str, scope) { + var value = new Value(str, this); + var ctx = scope instanceof Context ? scope : new Context(scope, this.options, {}, { liquid: this }); + return value.value(ctx); + }; + Liquid.prototype.evalValue = function (str, scope) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, toPromise(this._evalValue(str, scope))]; + }); + }); + }; + Liquid.prototype.evalValueSync = function (str, scope) { + return toValueSync(this._evalValue(str, scope)); + }; + Liquid.prototype.registerFilter = function (name, filter) { + this.filters[name] = filter; + }; + Liquid.prototype.registerTag = function (name, tag) { + this.tags[name] = isFunction(tag) ? tag : createTagClass(tag); + }; + Liquid.prototype.plugin = function (plugin) { + return plugin.call(this, Liquid); + }; + Liquid.prototype.express = function () { + var self = this; // eslint-disable-line + var firstCall = true; + return function (filePath, ctx, callback) { + var _a, _b, _c; + if (firstCall) { + firstCall = false; + var dirs = normalizeDirectoryList(this.root); + (_a = self.options.root).unshift.apply(_a, __spreadArray([], __read(dirs), false)); + (_b = self.options.layouts).unshift.apply(_b, __spreadArray([], __read(dirs), false)); + (_c = self.options.partials).unshift.apply(_c, __spreadArray([], __read(dirs), false)); + } + self.renderFile(filePath, ctx).then(function (html) { return callback(null, html); }, callback); + }; + }; + Liquid.prototype.analyze = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, analyze(template, options)]; + }); + }); + }; + Liquid.prototype.analyzeSync = function (template, options) { + if (options === void 0) { options = {}; } + return analyzeSync(template, options); + }; + Liquid.prototype.parseAndAnalyze = function (html, filename, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, analyze(this.parse(html, filename), options)]; + }); + }); + }; + Liquid.prototype.parseAndAnalyzeSync = function (html, filename, options) { + if (options === void 0) { options = {}; } + return analyzeSync(this.parse(html, filename), options); + }; + /** Return an array of all variables without their properties. */ + Liquid.prototype.variables = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var analysis; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, analyze(isString(template) ? this.parse(template) : template, options)]; + case 1: + analysis = _a.sent(); + return [2 /*return*/, Object.keys(analysis.variables)]; + } + }); + }); + }; + /** Return an array of all variables without their properties. */ + Liquid.prototype.variablesSync = function (template, options) { + if (options === void 0) { options = {}; } + var analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + }; + /** Return an array of all variables including their properties/paths. */ + Liquid.prototype.fullVariables = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var analysis; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, analyze(isString(template) ? this.parse(template) : template, options)]; + case 1: + analysis = _a.sent(); + return [2 /*return*/, Array.from(new Set(Object.values(analysis.variables).flatMap(function (a) { return a.map(function (v) { return String(v); }); })))]; + } + }); + }); + }; + /** Return an array of all variables including their properties/paths. */ + Liquid.prototype.fullVariablesSync = function (template, options) { + if (options === void 0) { options = {}; } + var analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap(function (a) { return a.map(function (v) { return String(v); }); }))); + }; + /** Return an array of all variables, each as an array of properties/segments. */ + Liquid.prototype.variableSegments = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var analysis; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, analyze(isString(template) ? this.parse(template) : template, options)]; + case 1: + analysis = _a.sent(); + return [2 /*return*/, Array.from(strictUniq(Object.values(analysis.variables).flatMap(function (a) { return a.map(function (v) { return v.toArray(); }); })))]; + } + }); + }); + }; + /** Return an array of all variables, each as an array of properties/segments. */ + Liquid.prototype.variableSegmentsSync = function (template, options) { + if (options === void 0) { options = {}; } + var analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap(function (a) { return a.map(function (v) { return v.toArray(); }); }))); + }; + /** Return an array of all expected context variables without their properties. */ + Liquid.prototype.globalVariables = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var analysis; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, analyze(isString(template) ? this.parse(template) : template, options)]; + case 1: + analysis = _a.sent(); + return [2 /*return*/, Object.keys(analysis.globals)]; + } + }); + }); + }; + /** Return an array of all expected context variables without their properties. */ + Liquid.prototype.globalVariablesSync = function (template, options) { + if (options === void 0) { options = {}; } + var analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + }; + /** Return an array of all expected context variables including their properties/paths. */ + Liquid.prototype.globalFullVariables = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var analysis; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, analyze(isString(template) ? this.parse(template) : template, options)]; + case 1: + analysis = _a.sent(); + return [2 /*return*/, Array.from(new Set(Object.values(analysis.globals).flatMap(function (a) { return a.map(function (v) { return String(v); }); })))]; + } + }); + }); + }; + /** Return an array of all expected context variables including their properties/paths. */ + Liquid.prototype.globalFullVariablesSync = function (template, options) { + if (options === void 0) { options = {}; } + var analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap(function (a) { return a.map(function (v) { return String(v); }); }))); + }; + /** Return an array of all expected context variables, each as an array of properties/segments. */ + Liquid.prototype.globalVariableSegments = function (template, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var analysis; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, analyze(isString(template) ? this.parse(template) : template, options)]; + case 1: + analysis = _a.sent(); + return [2 /*return*/, Array.from(strictUniq(Object.values(analysis.globals).flatMap(function (a) { return a.map(function (v) { return v.toArray(); }); })))]; + } + }); + }); + }; + /** Return an array of all expected context variables, each as an array of properties/segments. */ + Liquid.prototype.globalVariableSegmentsSync = function (template, options) { + if (options === void 0) { options = {}; } + var analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap(function (a) { return a.map(function (v) { return v.toArray(); }); }))); + }; + return Liquid; + }()); + + /* istanbul ignore file */ + var version = '10.28.0'; + + exports.AssertionError = AssertionError; + exports.AssignTag = default_1; + exports.BlockTag = default_1$c; + exports.BreakTag = default_1$g; + exports.CaptureTag = default_1$2; + exports.CaseTag = default_1$3; + exports.CommentTag = default_1$4; + exports.Context = Context; + exports.ContinueTag = default_1$h; + exports.CycleTag = default_1$8; + exports.DecrementTag = default_1$7; + exports.Drop = Drop; + exports.EchoTag = default_1$i; + exports.Expression = Expression; + exports.Filter = Filter; + exports.ForTag = default_1$1; + exports.Hash = Hash; + exports.IfTag = default_1$9; + exports.IncludeTag = default_1$6; + exports.IncrementTag = default_1$a; + exports.InlineCommentTag = default_1$k; + exports.LayoutTag = default_1$b; + exports.Liquid = Liquid; + exports.LiquidError = LiquidError; + exports.LiquidTag = default_1$j; + exports.Output = Output; + exports.ParseError = ParseError; + exports.ParseStream = ParseStream; + exports.Parser = Parser; + exports.RawTag = default_1$d; + exports.RenderError = RenderError; + exports.RenderTag = default_1$5; + exports.TablerowTag = default_1$e; + exports.Tag = Tag; + exports.TagToken = TagToken; + exports.Token = Token; + exports.TokenizationError = TokenizationError; + exports.Tokenizer = Tokenizer; + exports.TypeGuards = typeGuards; + exports.UndefinedVariableError = UndefinedVariableError; + exports.UnlessTag = default_1$f; + exports.Value = Value; + exports.Variable = Variable; + exports.analyze = analyze; + exports.analyzeSync = analyzeSync; + exports.assert = assert; + exports.createTrie = createTrie; + exports.defaultOperators = defaultOperators; + exports.defaultOptions = defaultOptions; + exports.evalQuotedToken = evalQuotedToken; + exports.evalToken = evalToken; + exports.filters = filters; + exports.isFalsy = isFalsy; + exports.isTruthy = isTruthy; + exports.tags = tags; + exports.toPromise = toPromise; + exports.toValue = toValue; + exports.toValueSync = toValueSync; + exports.version = version; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=liquid.browser.umd.js.map diff --git a/node_modules/liquidjs/dist/liquid.browser.umd.js.map b/node_modules/liquidjs/dist/liquid.browser.umd.js.map new file mode 100644 index 00000000..93a3b367 --- /dev/null +++ b/node_modules/liquidjs/dist/liquid.browser.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"liquid.browser.umd.js","sources":["../src/tokens/token.ts","../src/drop/drop.ts","../src/util/underscore.ts","../src/util/error.ts","../src/util/character.ts","../src/util/assert.ts","../src/drop/null-drop.ts","../src/drop/empty-drop.ts","../src/drop/blank-drop.ts","../src/drop/forloop-drop.ts","../src/emitters/simple-emitter.ts","../src/build/streamed-emitter-browser.ts","../src/emitters/keeping-type-emitter.ts","../src/drop/block-drop.ts","../src/drop/comparable.ts","../src/util/literal.ts","../src/util/operator-trie.ts","../src/util/async.ts","../src/util/strftime.ts","../src/util/intl.ts","../src/util/liquid-date.ts","../src/util/limiter.ts","../src/tokens/delimited-token.ts","../src/tokens/tag-token.ts","../src/tokens/output-token.ts","../src/tokens/html-token.ts","../src/tokens/number-token.ts","../src/tokens/identifier-token.ts","../src/tokens/literal-token.ts","../src/tokens/operator-token.ts","../src/tokens/property-access-token.ts","../src/tokens/filter-token.ts","../src/tokens/hash-token.ts","../src/render/string.ts","../src/tokens/quoted-token.ts","../src/tokens/range-token.ts","../src/tokens/liquid-tag-token.ts","../src/tokens/filtered-value-token.ts","../src/util/performance.ts","../src/render/render.ts","../src/parser/filter-arg.ts","../src/template/filter.ts","../src/render/expression.ts","../src/render/boolean.ts","../src/render/operator.ts","../src/cache/lru.ts","../src/build/fs-impl-browser.ts","../src/filters/misc.ts","../src/filters/html.ts","../src/fs/map-fs.ts","../src/liquid-options.ts","../src/parser/whitespace-ctrl.ts","../src/parser/tokenizer.ts","../src/parser/parse-stream.ts","../src/template/template-impl.ts","../src/template/tag.ts","../src/template/hash.ts","../src/template/tag-options-adapter.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/template/analysis.ts","../src/fs/loader.ts","../src/parser/parser.ts","../src/parser/token-kind.ts","../src/util/type-guards.ts","../src/context/scope.ts","../src/context/context.ts","../src/context/block-mode.ts","../src/filters/math.ts","../src/filters/url.ts","../src/filters/array.ts","../src/filters/date.ts","../src/filters/string.ts","../src/build/base64-impl-browser.ts","../src/filters/base64.ts","../src/build/crypto-impl-browser.ts","../src/filters/crypto.ts","../src/filters/index.ts","../src/tags/assign.ts","../src/tags/for.ts","../src/tags/capture.ts","../src/tags/case.ts","../src/tags/comment.ts","../src/tags/render.ts","../src/tags/include.ts","../src/tags/decrement.ts","../src/tags/cycle.ts","../src/tags/if.ts","../src/tags/increment.ts","../src/tags/layout.ts","../src/tags/block.ts","../src/tags/raw.ts","../src/drop/tablerowloop-drop.ts","../src/tags/tablerow.ts","../src/tags/unless.ts","../src/tags/break.ts","../src/tags/continue.ts","../src/tags/echo.ts","../src/tags/liquid.ts","../src/tags/inline-comment.ts","../src/tags/index.ts","../src/liquid.ts","../src/index.ts"],"sourcesContent":["import { TokenKind } from '../parser'\n\nexport abstract class Token {\n public constructor (\n public kind: TokenKind,\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {}\n public getText () {\n return this.input.slice(this.begin, this.end)\n }\n public getPosition () {\n let [row, col] = [1, 1]\n for (let i = 0; i < this.begin; i++) {\n if (this.input[i] === '\\n') {\n row++\n col = 1\n } else col++\n }\n return [row, col]\n }\n public size () {\n return this.end - this.begin\n }\n}\n","import { Context } from '../context'\n\nexport abstract class Drop {\n [key: string]: any\n public liquidMethodMissing (key: string | number, context: Context): Promise | any {\n return undefined\n }\n}\n","import { Drop } from '../drop/drop'\n\nexport const toString = Object.prototype.toString\nconst toLowerCase = String.prototype.toLowerCase\n\nexport const hasOwnProperty = Object.hasOwnProperty\n\nexport function isString (value: any): value is string {\n return typeof value === 'string'\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isFunction (value: any): value is Function {\n return typeof value === 'function'\n}\n\nexport function isPromise (val: any): val is Promise {\n return val && isFunction(val.then)\n}\n\nexport function isIterator (val: any): val is IterableIterator {\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return)\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n value = toValue(value)\n if (isString(value)) return value\n if (isNil(value)) return ''\n if (isArray(value)) return value.map(x => stringify(x)).join('')\n return String(value)\n}\n\nexport function readArrayElement (arr: any[], index: number, ownPropertyOnly: boolean) {\n if (index < 0) index = arr.length + index\n if (ownPropertyOnly && !hasOwnProperty.call(arr, index)) return undefined\n return arr[index]\n}\n\nexport function toEnumerable (val: any): T[] {\n val = toValue(val)\n if (isArray(val)) return val\n if (isString(val) && val.length > 0) return [val] as unknown as T[]\n if (isIterable(val)) return Array.from(val)\n if (isObject(val)) return Object.keys(val).map((key) => [key, val[key]]) as unknown as T[]\n return []\n}\n\nexport function toArray (val: any) {\n val = toValue(val)\n if (isNil(val)) return []\n if (isArray(val)) return val\n return [ val ]\n}\n\nexport function toValue (value: any): any {\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value\n}\n\nexport function toNumber (value: any): number {\n return +toValue(value) || 0\n}\n\nexport function isNumber (value: any): value is number {\n return typeof value === 'number'\n}\n\nexport function toLiquid (value: any): any {\n if (value && isFunction(value.toLiquid)) return toLiquid(value.toLiquid())\n return value\n}\n\nexport function isNil (value: any): boolean {\n return value == null\n}\n\nexport function isUndefined (value: any): boolean {\n return value === undefined\n}\n\nexport function isArray (value: any): value is any[] {\n // be compatible with IE 8\n return toString.call(value) === '[object Array]'\n}\n\nexport function isArrayLike (value: any): value is any[] {\n return value && isNumber(value.length)\n}\n\nexport function isIterable (value: any): value is Iterable {\n return isObject(value) && Symbol.iterator in value\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n obj: Record | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n obj = obj || {}\n for (const k in obj) {\n if (hasOwnProperty.call(obj, k)) {\n if (iteratee(obj[k], k, obj) === false) break\n }\n }\n return obj\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): value is object {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\nexport function range (start: number, stop: number, step = 1) {\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch = ' ') {\n return pad(str, length, ch, (str, ch) => ch + str)\n}\n\nexport function padEnd (str: any, length: number, ch = ' ') {\n return pad(str, length, ch, (str, ch) => str + ch)\n}\n\nexport function pad (str: any, length: number, ch: string, add: (str: string, ch: string) => string) {\n str = String(str)\n const n = length - str.length\n if (n <= 0) return str\n return add(str, ch.repeat(n))\n}\n\nexport function identify (val: T): T {\n return val\n}\n\nexport function changeCase (str: string): string {\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z')\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase()\n}\n\nexport function ellipsis (str: string, N: number): string {\n return str.length > N ? str.slice(0, N - 3) + '...' : str\n}\n\nexport function orderedCompare (a: any, b: any) {\n if (isNil(a) && isNil(b)) return 0\n if (isNil(a)) return 1\n if (isNil(b)) return -1\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n\n// compare string in case-insensitive way, undefined values to the tail\nexport function caseInsensitiveCompare (a: any, b: any) {\n if (isNil(a) && isNil(b)) return 0\n if (isNil(a)) return 1\n if (isNil(b)) return -1\n a = toLowerCase.call(a)\n b = toLowerCase.call(b)\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n\nexport function argumentsToValue any, T> (fn: F) {\n return function (this: T, ...args: Parameters) { return fn.call(this, ...args.map(toValue)) }\n}\n\nexport function argumentsToNumber any, T> (fn: F) {\n return function (this: T, ...args: Parameters) { return fn.call(this, ...args.map(toNumber)) }\n}\n\nexport function escapeRegExp (text: string) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\n/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */\nexport function * strictUniq (array: Array): Generator {\n const seen = new Set()\n\n for (const element of array) {\n const key = JSON.stringify(element)\n if (!seen.has(key)) {\n seen.add(key)\n yield element\n }\n }\n}\n","import * as _ from './underscore'\nimport { Token } from '../tokens/token'\nimport { Template } from '../template/template'\n\n/**\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\n */\nconst TRAIT = '__liquidClass__'\n\nexport abstract class LiquidError extends Error {\n public token!: Token\n public context = ''\n public originalError?: Error\n public constructor (err: Error | string, token: Token) {\n /**\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\n */\n super(typeof err === 'string' ? err : err.message)\n if (typeof err !== 'string') Object.defineProperty(this, 'originalError', { value: err, enumerable: false })\n Object.defineProperty(this, 'token', { value: token, enumerable: false })\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false })\n }\n protected update () {\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false })\n this.message = mkMessage(this.message, this.token)\n this.stack = this.message + '\\n' + this.context +\n '\\n' + this.stack\n if (this.originalError) this.stack += '\\nFrom ' + this.originalError.stack\n }\n static is (obj: unknown): obj is LiquidError {\n return (obj as Record | null | undefined)?.[TRAIT] === 'LiquidError'\n }\n}\n\nexport class TokenizationError extends LiquidError {\n public constructor (message: string, token: Token) {\n super(message, token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n public constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n public constructor (err: Error, tpl: Template) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n public static is (obj: any): obj is RenderError {\n return obj.name === 'RenderError'\n }\n}\n\nexport class LiquidErrors extends LiquidError {\n public constructor (public errors: RenderError[]) {\n super(errors[0], errors[0].token)\n this.name = 'LiquidErrors'\n const s = errors.length > 1 ? 's' : ''\n this.message = `${errors.length} error${s} found`\n super.update()\n }\n public static is (obj: any): obj is LiquidErrors {\n return obj.name === 'LiquidErrors'\n }\n}\n\nexport class UndefinedVariableError extends LiquidError {\n public constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'UndefinedVariableError'\n this.message = err.message\n super.update()\n }\n}\n\n// only used internally; raised where we don't have token information,\n// so it can't be an UndefinedVariableError.\nexport class InternalUndefinedVariableError extends Error {\n variableName: string\n\n public constructor (variableName: string) {\n super(`undefined variable: ${variableName}`)\n this.name = 'InternalUndefinedVariableError'\n this.variableName = variableName\n }\n}\n\nexport class AssertionError extends Error {\n public constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const [line, col] = token.getPosition()\n const lines = token.input.split('\\n')\n const begin = Math.max(line - 2, 1)\n const end = Math.min(line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const rowIndicator = (lineNumber === line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n let text = `${rowIndicator}${num}| `\n\n const colIndicator = lineNumber === line\n ? '\\n' + _.padStart('^', col + text.length)\n : ''\n\n text += lines[lineNumber - 1]\n text += colIndicator\n return text\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n const [line, col] = token.getPosition()\n msg += `, line:${line}, col:${col}`\n return msg\n}\n","// **DO NOT CHANGE THIS FILE**\n//\n// This file is generated by bin/character-gen.js\n// bitmask character types to boost performance\nexport const TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]\nexport const WORD = 1\nexport const OPERATOR = 2\nexport const BLANK = 4\nexport const QUOTE = 8\nexport const INLINE_BLANK = 16\nexport const NUMBER = 32\nexport const SIGN = 64\nexport const PUNCTUATION = 128\n\nexport function isWord (char: string): boolean {\n const code = char.charCodeAt(0)\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD)\n}\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK\nTYPES[8220] = TYPES[8221] = PUNCTUATION\n","import { AssertionError } from './error'\n\nexport function assert (predicate: T | null | undefined, message?: string | (() => string)) {\n if (!predicate) {\n const msg = typeof message === 'function'\n ? message()\n : (message || `expect ${predicate} to be true`)\n throw new AssertionError(msg)\n }\n}\n\nexport function assertEmpty (predicate: T | null | undefined, message = `unexpected ${JSON.stringify(predicate)}`) {\n assert(!predicate, message)\n}\n","import { Drop } from './drop'\nimport { Comparable } from './comparable'\nimport { isNil, toValue } from '../util'\n\nexport class NullDrop extends Drop implements Comparable {\n public equals (value: any) {\n return isNil(toValue(value))\n }\n public gt () {\n return false\n }\n public geq () {\n return false\n }\n public lt () {\n return false\n }\n public leq () {\n return false\n }\n public valueOf () {\n return null\n }\n}\n","import { Drop } from './drop'\nimport { Comparable } from './comparable'\nimport { isObject, isString, isArray, toValue } from '../util'\n\nexport class EmptyDrop extends Drop implements Comparable {\n public equals (value: any) {\n if (value instanceof EmptyDrop) return false\n value = toValue(value)\n if (isString(value) || isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n }\n public gt () {\n return false\n }\n public geq () {\n return false\n }\n public lt () {\n return false\n }\n public leq () {\n return false\n }\n public valueOf () {\n return ''\n }\n static is (value: unknown) {\n return value instanceof EmptyDrop\n }\n}\n","import { isNil, isString, toValue } from '../util'\nimport { EmptyDrop } from '../drop'\n\nexport class BlankDrop extends EmptyDrop {\n public equals (value: any) {\n if (value === false) return true\n if (isNil(toValue(value))) return true\n if (isString(value)) return /^\\s*$/.test(value)\n return super.equals(value)\n }\n static is (value: unknown) {\n return value instanceof BlankDrop\n }\n}\n","import { Drop } from './drop'\n\nexport class ForloopDrop extends Drop {\n protected i = 0\n public name: string\n public length: number\n public constructor (length: number, collection: string, variable: string) {\n super()\n this.length = length\n this.name = `${variable}-${collection}`\n }\n public next () {\n this.i++\n }\n public index0 () {\n return this.i\n }\n public index () {\n return this.i + 1\n }\n public first () {\n return this.i === 0\n }\n public last () {\n return this.i === this.length - 1\n }\n public rindex () {\n return this.length - this.i\n }\n public rindex0 () {\n return this.length - this.i - 1\n }\n public valueOf () {\n return JSON.stringify(this)\n }\n}\n","import { stringify } from '../util'\nimport { Emitter } from './emitter'\n\nexport class SimpleEmitter implements Emitter {\n public buffer = '';\n\n public write (html: any) {\n this.buffer += stringify(html)\n }\n}\n","import { Emitter } from '../emitters'\n\nexport class StreamedEmitter implements Emitter {\n public buffer = '';\n public stream: NodeJS.ReadableStream = null as any\n constructor () {\n throw new Error('streaming not supported in browser')\n }\n public write: (html: any) => void\n public error: (err: Error) => void\n public end: () => void\n}\n","import { stringify, toValue } from '../util'\nimport { Emitter } from './emitter'\n\nexport class KeepingTypeEmitter implements Emitter {\n public buffer: any = '';\n\n public write (html: any) {\n html = toValue(html)\n // This will only preserve the type if the value is isolated.\n // I.E:\n // {{ my-port }} -> 42\n // {{ my-host }}:{{ my-port }} -> 'host:42'\n if (typeof html !== 'string' && this.buffer === '') {\n this.buffer = html\n } else {\n this.buffer = stringify(this.buffer) + stringify(html)\n }\n }\n}\n","import { Emitter, SimpleEmitter } from '../emitters'\nimport { Drop } from './drop'\n\nexport class BlockDrop extends Drop {\n constructor (\n // the block render from layout template\n private superBlockRender: (emitter: Emitter) => IterableIterator | string = () => ''\n ) {\n super()\n }\n /**\n * Provide parent access in child block by\n * {{ block.super }}\n */\n public * super (): IterableIterator {\n const emitter = new SimpleEmitter()\n yield this.superBlockRender(emitter)\n return emitter.buffer\n }\n}\n","import { isFunction } from '../util'\n\nexport interface Comparable {\n equals: (rhs: any) => boolean;\n gt: (rhs: any) => boolean;\n geq: (rhs: any) => boolean;\n lt: (rhs: any) => boolean;\n leq: (rhs: any) => boolean;\n}\n\nexport function isComparable (arg: any): arg is Comparable {\n return (\n arg &&\n isFunction(arg.equals) &&\n isFunction(arg.gt) &&\n isFunction(arg.geq) &&\n isFunction(arg.lt) &&\n isFunction(arg.leq)\n )\n}\n","import { BlankDrop, EmptyDrop, NullDrop } from '../drop'\n\nconst nil = new NullDrop()\nexport const literalValues = {\n 'true': true,\n 'false': false,\n 'nil': nil,\n 'null': nil,\n 'empty': new EmptyDrop(),\n 'blank': new BlankDrop()\n}\n\nexport type LiteralKey = keyof typeof literalValues\nexport type LiteralValue = typeof literalValues[LiteralKey]\n","import { isWord } from '../util/character'\n\ninterface TrieInput {\n [key: string]: T\n}\n\nexport type Trie = {\n data?: T\n end?: true\n needBoundary?: true\n} & Record\n\n// Tries are built once per input object and reused: the Tokenizer rebuilds them\n// on every instantiation, but `input` (operators/literalValues) is a stable\n// reference. WeakMap-keying by `input` lets short-lived operator objects (and\n// their tries) be garbage collected. The returned trie is treated as read-only\n// by callers (matchTrie only reads it); do not mutate it.\nconst trieCache = new WeakMap, Trie>()\n\nexport function createTrie (input: TrieInput): Trie {\n const cached = trieCache.get(input)\n if (cached) return cached\n const trie: Trie = {}\n for (const [name, data] of Object.entries(input)) {\n let node = trie\n\n for (let i = 0; i < name.length; i++) {\n const c = name[i]\n node[c] = node[c] || {}\n\n if (i === name.length - 1 && isWord(name[i])) {\n node[c].needBoundary = true\n }\n\n node = node[c]\n }\n\n node.data = data\n node.end = true\n }\n trieCache.set(input, trie)\n return trie\n}\n","import { isPromise, isIterator } from './underscore'\n\nexport type LiquidAsync any> =\n (sync: boolean, ...args: Parameters) => ReturnType | Promise>\n\nexport function toLiquidAsync any> (\n asyncFn: (...args: Parameters) => Promise>,\n syncFn?: F\n): LiquidAsync {\n const syncImpl = syncFn || asyncFn as any\n return (sync: boolean, ...args: any[]) => {\n return sync ? syncImpl(...args as Parameters) : asyncFn(...args as Parameters)\n }\n}\n\n// convert an async iterator to a Promise\nexport async function toPromise (val: Generator | Promise | T): Promise {\n if (!isIterator(val)) return val\n let value: unknown\n let done = false\n let next: 'next' | 'throw' = 'next'\n do {\n const state = val[next](value)\n done = !!state.done\n value = state.value\n next = 'next'\n try {\n if (isIterator(value)) value = toPromise(value)\n if (isPromise(value)) value = await value\n } catch (err) {\n next = 'throw'\n value = err\n }\n } while (!done)\n return value as T\n}\n\n// convert an async iterator to a value in a synchronous manner\nexport function toValueSync (val: Generator | T): T {\n if (!isIterator(val)) return val\n let value: any\n let done = false\n let next: 'next' | 'throw' = 'next'\n do {\n const state = val[next](value)\n done = !!state.done\n value = state.value\n next = 'next'\n if (isIterator(value)) {\n try {\n value = toValueSync(value)\n } catch (err) {\n next = 'throw'\n value = err\n }\n }\n } while (!done)\n return value\n}\n","import { changeCase, padStart, padEnd } from './underscore'\nimport { LiquidDate } from './liquid-date'\nimport type { Limiter } from './limiter'\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/\ninterface FormatOptions {\n flags: Record;\n width?: string;\n modifier?: string;\n memoryLimit?: Pick;\n}\n\n// prototype extensions\nfunction daysInMonth (d: LiquidDate) {\n const feb = isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n}\nfunction getDayOfYear (d: LiquidDate) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += daysInMonth(d)[i]\n }\n return num + d.getDate()\n}\nfunction getWeekOfYear (d: LiquidDate, startDay: number) {\n // Skip to startDay of this week\n const now = getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return String(Math.floor((now - then) / 7) + 1)\n}\nfunction isLeapYear (d: LiquidDate) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n}\nfunction ordinal (d: LiquidDate) {\n const date = d.getDate()\n if ([11, 12, 13].includes(date)) return 'th'\n\n switch (date % 10) {\n case 1: return 'st'\n case 2: return 'nd'\n case 3: return 'rd'\n default: return 'th'\n }\n}\nfunction century (d: LiquidDate) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n}\n\n// default to 0\nconst padWidths: Record = {\n d: 2,\n e: 2,\n H: 2,\n I: 2,\n j: 3,\n k: 2,\n l: 2,\n L: 3,\n m: 2,\n M: 2,\n S: 2,\n U: 2,\n W: 2\n}\n\nconst padSpaceChars = new Set('aAbBceklpP')\n\nfunction getTimezoneOffset (d: LiquidDate, opts: FormatOptions) {\n const nOffset = Math.abs(d.getTimezoneOffset())\n const h = Math.floor(nOffset / 60)\n const m = nOffset % 60\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\n padStart(h, 2, '0') +\n (opts.flags[':'] ? ':' : '') +\n padStart(m, 2, '0')\n}\ntype FormatCodeHandler = (d: LiquidDate, opts: FormatOptions) => unknown\n\nconst formatCodes: Record = {\n a: (d: LiquidDate) => d.getShortWeekdayName(),\n A: (d: LiquidDate) => d.getLongWeekdayName(),\n b: (d: LiquidDate) => d.getShortMonthName(),\n B: (d: LiquidDate) => d.getLongMonthName(),\n c: (d: LiquidDate) => d.toLocaleString(),\n C: (d: LiquidDate) => century(d),\n d: (d: LiquidDate) => d.getDate(),\n e: (d: LiquidDate) => d.getDate(),\n H: (d: LiquidDate) => d.getHours(),\n I: (d: LiquidDate) => String(d.getHours() % 12 || 12),\n j: (d: LiquidDate) => getDayOfYear(d),\n k: (d: LiquidDate) => d.getHours(),\n l: (d: LiquidDate) => String(d.getHours() % 12 || 12),\n L: (d: LiquidDate) => d.getMilliseconds(),\n m: (d: LiquidDate) => d.getMonth() + 1,\n M: (d: LiquidDate) => d.getMinutes(),\n N: (d: LiquidDate, opts: FormatOptions) => {\n const width = Number(opts.width) || 9\n const str = padStart(String(d.getMilliseconds()), 3, '0').slice(0, width)\n opts.memoryLimit?.use(width - str.length)\n return padEnd(str, width, '0')\n },\n p: (d: LiquidDate) => (d.getHours() < 12 ? 'AM' : 'PM'),\n P: (d: LiquidDate) => (d.getHours() < 12 ? 'am' : 'pm'),\n q: (d: LiquidDate) => ordinal(d),\n s: (d: LiquidDate) => Math.floor(d.dateValue() / 1000),\n S: (d: LiquidDate) => d.getSeconds(),\n u: (d: LiquidDate) => d.getDay() || 7,\n U: (d: LiquidDate) => getWeekOfYear(d, 0),\n w: (d: LiquidDate) => d.getDay(),\n W: (d: LiquidDate) => getWeekOfYear(d, 1),\n x: (d: LiquidDate) => d.toLocaleDateString(),\n X: (d: LiquidDate) => d.toLocaleTimeString(),\n y: (d: LiquidDate) => d.getFullYear().toString().slice(2, 4),\n Y: (d: LiquidDate) => d.getFullYear(),\n z: getTimezoneOffset,\n Z: (d: LiquidDate, opts: FormatOptions) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\n 't': () => '\\t',\n 'n': () => '\\n',\n '%': () => '%'\n}\nformatCodes.h = formatCodes.b\n\nexport function strftime (d: LiquidDate, formatStr: string, memoryLimit?: Pick) {\n let output = ''\n let remaining = formatStr\n let match\n while ((match = rFormat.exec(remaining))) {\n output += remaining.slice(0, match.index)\n remaining = remaining.slice(match.index + match[0].length)\n output += format(d, match, memoryLimit)\n }\n return output + remaining\n}\n\nfunction format (d: LiquidDate, match: RegExpExecArray, memoryLimit?: Pick) {\n const [input, flagStr = '', width, modifier, conversion] = match\n const convert = formatCodes[conversion]\n if (!convert) return input\n const flags: Record = {}\n for (const flag of flagStr) flags[flag] = true\n let ret = String(convert(d, { flags, width, modifier, memoryLimit }))\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0'\n let padWidth = Number(width) || padWidths[conversion] || 0\n if (flags['^']) ret = ret.toUpperCase()\n else if (flags['#']) ret = changeCase(ret)\n if (flags['_']) padChar = ' '\n else if (flags['0']) padChar = '0'\n if (flags['-']) padWidth = 0\n memoryLimit?.use(Number(padWidth) - ret.length)\n return padStart(ret, padWidth, padChar)\n}\n","export function getDateTimeFormat () {\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined)\n}\n","import { getDateTimeFormat } from './intl'\nimport { isString } from './underscore'\n\n// one minute in milliseconds\nconst OneMinute = 60000\n/**\n * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS\n * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3\n */\nconst TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):?(\\d{2}))$/\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3))\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3))\n\n/**\n * A date implementation with timezone info, just like Ruby date\n *\n * Implementation:\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\n * - rewrite getTimezoneOffset() to trick strftime\n */\nexport class LiquidDate {\n private timezoneOffset: number\n private timezoneName: string\n private date: Date\n private displayDate: Date\n private DateTimeFormat = getDateTimeFormat()\n public timezoneFixed: boolean\n constructor (\n init: string | number | Date,\n private locale: string,\n timezone?: number | string\n ) {\n this.date = new Date(init)\n this.timezoneFixed = timezone !== undefined\n if (timezone === undefined) {\n timezone = this.date.getTimezoneOffset()\n }\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone\n this.timezoneName = isString(timezone) ? timezone : ''\n\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute\n const time = this.date.getTime() + diff\n this.displayDate = new Date(time)\n }\n\n getTime () {\n return this.displayDate.getTime()\n }\n /**\n * The underlying UTC timestamp in milliseconds, unaffected by the display\n * timezone. Use this (not `getTime()`) for timezone-invariant values like\n * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by\n * the display timezone offset so wall-clock getters can delegate to Date.\n */\n dateValue () {\n return this.date.getTime()\n }\n getMilliseconds () {\n return this.displayDate.getMilliseconds()\n }\n getSeconds () {\n return this.displayDate.getSeconds()\n }\n getMinutes () {\n return this.displayDate.getMinutes()\n }\n getHours () {\n return this.displayDate.getHours()\n }\n getDay () {\n return this.displayDate.getDay()\n }\n getDate () {\n return this.displayDate.getDate()\n }\n getMonth () {\n return this.displayDate.getMonth()\n }\n getFullYear () {\n return this.displayDate.getFullYear()\n }\n toLocaleString (locale?: string, init?: any) {\n if (init?.timeZone) {\n return this.date.toLocaleString(locale, init)\n }\n return this.displayDate.toLocaleString(locale, init)\n }\n toLocaleTimeString (locale?: string) {\n return this.displayDate.toLocaleTimeString(locale)\n }\n toLocaleDateString (locale?: string) {\n return this.displayDate.toLocaleDateString(locale)\n }\n getTimezoneOffset () {\n return this.timezoneOffset!\n }\n getTimeZoneName () {\n if (this.timezoneFixed) return this.timezoneName\n if (!this.DateTimeFormat) return\n return this.DateTimeFormat().resolvedOptions().timeZone\n }\n getLongMonthName () {\n return this.format({ month: 'long' }) ?? monthNames[this.getMonth()]\n }\n getShortMonthName () {\n return this.format({ month: 'short' }) ?? monthNamesShort[this.getMonth()]\n }\n getLongWeekdayName () {\n return this.format({ weekday: 'long' }) ?? dayNames[this.displayDate.getDay()]\n }\n getShortWeekdayName () {\n return this.format({ weekday: 'short' }) ?? dayNamesShort[this.displayDate.getDay()]\n }\n valid () {\n return !isNaN(this.getTime())\n }\n private format (options: Intl.DateTimeFormatOptions) {\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate)\n }\n\n /**\n * Create a Date object fixed to it's declared Timezone. Both\n * - 2021-08-06T02:29:00.000Z and\n * - 2021-08-06T02:29:00.000+08:00\n * will always be displayed as\n * - 2021-08-06 02:29:00\n * regardless timezoneOffset in JavaScript realm\n *\n * The implementation hack:\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\n * we create a different Date to trick strftime, it's both simpler and more performant.\n * Given that a template is expected to be parsed fewer times than rendered.\n */\n static createDateFixedToTimezone (dateString: string, locale: string): LiquidDate {\n const m = dateString.match(TIMEZONE_PATTERN)\n // representing a UTC timestamp\n if (m && m[1] === 'Z') {\n return new LiquidDate(+new Date(dateString), locale, 0)\n }\n // has a timezone specified\n if (m && m[2] && m[3] && m[4]) {\n const [, , sign, hours, minutes] = m\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10))\n return new LiquidDate(+new Date(dateString), locale, offset)\n }\n return new LiquidDate(dateString, locale)\n }\n private static getTimezoneOffset (timezoneName: string, date: Date) {\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName })\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' })\n\n const localDate = new Date(localDateString)\n const utcDate = new Date(utcDateString)\n return (+utcDate - +localDate) / (60 * 1000)\n }\n}\n","import { assert } from './assert'\n\nexport class Limiter {\n private message: string\n private base = 0\n private limit: number\n constructor (resource: string, limit: number) {\n this.message = `${resource} limit exceeded`\n this.limit = limit\n }\n use (count: number) {\n if (+count > 0) {\n assert(this.base + +count <= this.limit, this.message)\n this.base += +count\n }\n }\n check (count: number) {\n if (+count > 0) {\n assert(+count <= this.limit, this.message)\n }\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\nimport { TYPES, BLANK } from '../util'\n\nexport abstract class DelimitedToken extends Token {\n public trimLeft = false\n public trimRight = false\n public contentRange: [number, number]\n public constructor (\n kind: TokenKind,\n [contentBegin, contentEnd]: [number, number],\n input: string,\n begin: number,\n end: number,\n trimLeft: boolean,\n trimRight: boolean,\n file?: string\n ) {\n super(kind, input, begin, end, file)\n const tl = input[contentBegin] === '-'\n const tr = input[contentEnd - 1] === '-'\n\n let l = tl ? contentBegin + 1 : contentBegin\n let r = tr ? contentEnd - 1 : contentEnd\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK)) l++\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK)) r--\n\n this.contentRange = [l, r]\n this.trimLeft = tl || trimLeft\n this.trimRight = tr || trimRight\n }\n get content () {\n return this.input.slice(this.contentRange[0], this.contentRange[1])\n }\n}\n","import { DelimitedToken } from './delimited-token'\nimport { Tokenizer, TokenKind } from '../parser'\nimport type { NormalizedFullOptions } from '../liquid-options'\n\nexport class TagToken extends DelimitedToken {\n public name: string\n public tokenizer: Tokenizer\n public readonly args: string;\n public constructor (\n input: string,\n begin: number,\n end: number,\n options: NormalizedFullOptions,\n file?: string\n ) {\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length]\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file)\n\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions)\n this.name = this.tokenizer.readTagName()\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`)\n this.tokenizer.skipBlank()\n this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1])\n }\n}\n","import { DelimitedToken } from './delimited-token'\nimport { NormalizedFullOptions } from '../liquid-options'\nimport { TokenKind } from '../parser'\n\nexport class OutputToken extends DelimitedToken {\n public constructor (\n input: string,\n begin: number,\n end: number,\n options: NormalizedFullOptions,\n file?: string\n ) {\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options\n const valueRange: [number, number] = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length]\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file)\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport class HTMLToken extends Token {\n trimLeft = 0\n trimRight = 0\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.HTML, input, begin, end, file)\n }\n public getContent () {\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight)\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport class NumberToken extends Token {\n public content: number\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Number, input, begin, end, file)\n this.content = Number(this.getText())\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport class IdentifierToken extends Token {\n public content: string\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Word, input, begin, end, file)\n this.content = this.getText()\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\nimport { literalValues, LiteralValue, LiteralKey } from '../util'\n\nexport class LiteralToken extends Token {\n public content: LiteralValue\n public literal: LiteralKey\n public constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Literal, input, begin, end, file)\n this.literal = this.getText() as LiteralKey\n this.content = literalValues[this.literal]\n }\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\n\nexport const enum OperatorType {\n Binary,\n Unary\n}\n\nexport const operatorPrecedences = {\n '==': 2,\n '!=': 2,\n '>': 2,\n '<': 2,\n '>=': 2,\n '<=': 2,\n 'contains': 2,\n 'not': 1,\n 'and': 0,\n 'or': 0\n}\n\nexport const operatorTypes = {\n '==': OperatorType.Binary,\n '!=': OperatorType.Binary,\n '>': OperatorType.Binary,\n '<': OperatorType.Binary,\n '>=': OperatorType.Binary,\n '<=': OperatorType.Binary,\n 'contains': OperatorType.Binary,\n 'not': OperatorType.Unary,\n 'and': OperatorType.Binary,\n 'or': OperatorType.Binary\n}\n\nexport type OperatorKey = keyof typeof operatorPrecedences\n\nexport class OperatorToken extends Token {\n public operator: OperatorKey\n public constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Operator, input, begin, end, file)\n this.operator = this.getText() as OperatorKey\n }\n getPrecedence () {\n return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1\n }\n}\n","import { Token } from './token'\nimport { LiteralToken } from './literal-token'\nimport { ValueToken } from './value-token'\nimport { IdentifierToken } from './identifier-token'\nimport { NumberToken } from './number-token'\nimport { RangeToken } from './range-token'\nimport { QuotedToken } from './quoted-token'\nimport { FilteredValueToken } from './filtered-value-token'\nimport { TokenKind } from '../parser'\n\nexport class PropertyAccessToken extends Token {\n constructor (\n public variable: QuotedToken | RangeToken | LiteralToken | NumberToken | FilteredValueToken | undefined,\n public props: (ValueToken | IdentifierToken)[],\n input: string,\n begin: number,\n end: number,\n file?: string\n ) {\n super(TokenKind.PropertyAccess, input, begin, end, file)\n }\n}\n","import { Token } from './token'\nimport { FilterArg } from '../parser/filter-arg'\nimport { TokenKind } from '../parser'\n\nexport class FilterToken extends Token {\n public constructor (\n public name: string,\n public args: FilterArg[],\n input: string,\n begin: number,\n end: number,\n file?: string\n ) {\n super(TokenKind.Filter, input, begin, end, file)\n }\n}\n","import { Token } from './token'\nimport { ValueToken } from './value-token'\nimport { IdentifierToken } from './identifier-token'\nimport { TokenKind } from '../parser'\n\nexport class HashToken extends Token {\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public name: IdentifierToken,\n public value?: ValueToken,\n public file?: string\n ) {\n super(TokenKind.Hash, input, begin, end, file)\n }\n}\n","const rHex = /[\\da-fA-F]/\nconst rOct = /[0-7]/\nconst escapeChar: Record = {\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n v: '\\x0B'\n}\n\nfunction hexVal (c: string) {\n const code = c.charCodeAt(0)\n if (code >= 97) return code - 87\n if (code >= 65) return code - 55\n return code - 48\n}\n\nexport function parseStringLiteral (str: string): string {\n let ret = ''\n for (let i = 1; i < str.length - 1; i++) {\n if (str[i] !== '\\\\') {\n ret += str[i]\n continue\n }\n if (escapeChar[str[i + 1]] !== undefined) {\n ret += escapeChar[str[++i]]\n } else if (str[i + 1] === 'u') {\n let val = 0\n let j = i + 2\n while (j <= i + 5 && rHex.test(str[j])) {\n val = val * 16 + hexVal(str[j++])\n }\n i = j - 1\n ret += String.fromCharCode(val)\n } else if (!rOct.test(str[i + 1])) {\n ret += str[++i]\n } else {\n let j = i + 1\n let val = 0\n while (j <= i + 3 && rOct.test(str[j])) {\n val = val * 8 + hexVal(str[j++])\n }\n i = j - 1\n ret += String.fromCharCode(val)\n }\n }\n return ret\n}\n","import { Token } from './token'\nimport { TokenKind } from '../parser'\nimport { parseStringLiteral } from '../render/string'\n\nexport class QuotedToken extends Token {\n public readonly content: string\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.Quoted, input, begin, end, file)\n this.content = parseStringLiteral(this.getText())\n }\n}\n","import { Token } from './token'\nimport { ValueToken } from './value-token'\nimport { TokenKind } from '../parser'\n\nexport class RangeToken extends Token {\n constructor (\n public input: string,\n public begin: number,\n public end: number,\n public lhs: ValueToken,\n public rhs: ValueToken,\n public file?: string\n ) {\n super(TokenKind.Range, input, begin, end, file)\n }\n}\n","import { DelimitedToken } from './delimited-token'\nimport { NormalizedFullOptions } from '../liquid-options'\nimport { Tokenizer, TokenKind } from '../parser'\n\n/**\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\n */\nexport class LiquidTagToken extends DelimitedToken {\n public name: string\n public tokenizer: Tokenizer\n public constructor (\n input: string,\n begin: number,\n end: number,\n options: NormalizedFullOptions,\n file?: string\n ) {\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file)\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions)\n this.name = this.tokenizer.readTagName()\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax')\n this.tokenizer.skipBlank()\n }\n\n get args (): string {\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1])\n }\n}\n","import { Token } from './token'\nimport { FilterToken } from './filter-token'\nimport { TokenKind } from '../parser'\nimport { Expression } from '../render'\n\n/**\n * value expression with optional filters\n * e.g.\n * {% assign foo=\"bar\" | append: \"coo\" %}\n */\nexport class FilteredValueToken extends Token {\n constructor (\n public initial: Expression,\n public filters: FilterToken[],\n public input: string,\n public begin: number,\n public end: number,\n public file?: string\n ) {\n super(TokenKind.FilteredValue, input, begin, end, file)\n }\n}\n","interface LiquidPerformance {\n now: () => number\n}\n\nconst polyfill: LiquidPerformance = {\n now: () => Date.now()\n}\n\nexport function getPerformance (): LiquidPerformance {\n return (typeof global === 'object' && global.performance) ||\n (typeof window === 'object' && window.performance) ||\n polyfill\n}\n","import { getPerformance } from '../util/performance'\nimport { toPromise, RenderError, LiquidErrors, LiquidError } from '../util'\nimport { Context } from '../context'\nimport { Template } from '../template'\nimport { Emitter, KeepingTypeEmitter, StreamedEmitter, SimpleEmitter } from '../emitters'\n\nexport class Render {\n public renderTemplatesToNodeStream (templates: Template[], ctx: Context): NodeJS.ReadableStream {\n const emitter = new StreamedEmitter()\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\n .then(() => emitter.end(), err => emitter.error(err))\n return emitter.stream\n }\n public * renderTemplates (templates: Template[], ctx: Context, emitter?: Emitter): IterableIterator {\n if (!emitter) {\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter()\n }\n ctx.renderLimit.check(getPerformance().now())\n const errors = []\n for (const tpl of templates) {\n ctx.renderLimit.check(getPerformance().now())\n try {\n // if tpl.render supports emitter, it'll return empty `html`\n const html = yield tpl.render(ctx, emitter)\n // if not, it'll return an `html`, write to the emitter for it\n html && emitter.write(html)\n if (ctx.breakCalled || ctx.continueCalled) break\n } catch (e) {\n const err = LiquidError.is(e) ? e : new RenderError(e as Error, tpl)\n if (ctx.opts.catchAllErrors) errors.push(err)\n else throw err\n }\n }\n if (errors.length) {\n throw new LiquidErrors(errors)\n }\n return emitter.buffer\n }\n}\n","import { isArray } from '../util/underscore'\nimport { ValueToken } from '../tokens/value-token'\n\ntype KeyValuePair = [string?, ValueToken?]\n\nexport type FilterArg = ValueToken | KeyValuePair\n\nexport function isKeyValuePair (arr: FilterArg): arr is KeyValuePair {\n return isArray(arr)\n}\n","import { evalToken } from '../render'\nimport { Context } from '../context'\nimport { identify, isFunction } from '../util/underscore'\nimport { FilterHandler, FilterImplOptions } from './filter-impl-options'\nimport { FilterArg, isKeyValuePair } from '../parser/filter-arg'\nimport { Liquid } from '../liquid'\nimport { FilterToken } from '../tokens'\n\nexport class Filter {\n public name: string\n public args: FilterArg[]\n public readonly raw: boolean\n private handler: FilterHandler\n private liquid: Liquid\n private token: FilterToken\n\n public constructor (token: FilterToken, options: FilterImplOptions | undefined, liquid: Liquid) {\n this.token = token\n this.name = token.name\n this.handler = isFunction(options)\n ? options\n : (isFunction(options?.handler) ? options!.handler : identify)\n this.raw = !isFunction(options) && !!options?.raw\n this.args = token.args\n this.liquid = liquid\n }\n public * render (value: any, context: Context): IterableIterator {\n const argv: any[] = []\n for (const arg of this.args as FilterArg[]) {\n if (isKeyValuePair(arg)) argv.push([arg[0], yield evalToken(arg[1], context)])\n else argv.push(yield evalToken(arg, context))\n }\n return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv])\n }\n}\n","import { QuotedToken, RangeToken, OperatorToken, Token, PropertyAccessToken, OperatorType, operatorTypes, FilteredValueToken } from '../tokens'\nimport { isRangeToken, isPropertyAccessToken, isFilteredValueToken, UndefinedVariableError, range, isOperatorToken, assert } from '../util'\nimport type { Context } from '../context'\nimport type { UnaryOperatorHandler } from '../render'\nimport { Drop } from '../drop'\nimport { Filter } from '../template/filter'\n\nexport class Expression {\n readonly postfix: Token[]\n\n public constructor (tokens: Iterable) {\n this.postfix = [...toPostfix(tokens)]\n }\n public * evaluate (ctx: Context, lenient?: boolean): Generator {\n assert(ctx, 'unable to evaluate: context not defined')\n const operands: any[] = []\n for (const token of this.postfix) {\n if (isOperatorToken(token)) {\n const r = operands.pop()\n let result\n if (operatorTypes[token.operator] === OperatorType.Unary) {\n result = yield (ctx.opts.operators[token.operator] as UnaryOperatorHandler)(r, ctx)\n } else {\n const l = operands.pop()\n result = yield ctx.opts.operators[token.operator](l, r, ctx)\n }\n operands.push(result)\n } else {\n operands.push(yield evalToken(token, ctx, lenient))\n }\n }\n return operands[0]\n }\n public valid () {\n return !!this.postfix.length\n }\n}\n\nexport function * evalToken (token: Token | undefined, ctx: Context, lenient = false): IterableIterator {\n if (!token) return\n if ('content' in token) return token.content\n if (isPropertyAccessToken(token)) return yield evalPropertyAccessToken(token, ctx, lenient)\n if (isRangeToken(token)) return yield evalRangeToken(token, ctx)\n if (isFilteredValueToken(token)) return yield evalFilteredValueToken(token, ctx, lenient)\n}\n\nfunction * evalFilteredValueToken (token: FilteredValueToken, ctx: Context, lenient: boolean): IterableIterator {\n assert(ctx.liquid, 'FilteredValueToken evaluation requires liquid instance in context')\n lenient = lenient || (ctx.opts.lenientIf && token.filters.length > 0 && token.filters[0].name === 'default')\n let val = yield token.initial.evaluate(ctx, lenient)\n\n for (const filterToken of token.filters) {\n const filterImpl = ctx.liquid.filters[filterToken.name]\n assert(filterImpl || !ctx.liquid.options.strictFilters, () => `undefined filter: ${filterToken.name}`)\n const filter = new Filter(filterToken, filterImpl, ctx.liquid)\n val = yield filter.render(val, ctx)\n }\n\n return val\n}\n\nfunction * evalPropertyAccessToken (token: PropertyAccessToken, ctx: Context, lenient: boolean): IterableIterator {\n const props: (string | number | Drop)[] = []\n for (const prop of token.props) {\n props.push((yield evalToken(prop, ctx, false)) as unknown as string | number | Drop)\n }\n try {\n if (token.variable) {\n const variable = yield evalToken(token.variable, ctx, lenient)\n return yield ctx._getFromScope(variable, props)\n } else {\n return yield ctx._get(props)\n }\n } catch (e) {\n if (lenient && (e as Error).name === 'InternalUndefinedVariableError') return null\n throw (new UndefinedVariableError(e as Error, token))\n }\n}\n\nexport function evalQuotedToken (token: QuotedToken) {\n return token.content\n}\n\nfunction * evalRangeToken (token: RangeToken, ctx: Context) {\n const low: number = yield evalToken(token.lhs, ctx)\n const high: number = yield evalToken(token.rhs, ctx)\n ctx.memoryLimit.use(high - low + 1)\n return range(+low, +high + 1)\n}\n\nfunction * toPostfix (tokens: Iterable): IterableIterator {\n const ops: OperatorToken[] = []\n for (const token of tokens) {\n if (isOperatorToken(token)) {\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\n yield ops.pop()!\n }\n ops.push(token)\n } else yield token\n }\n while (ops.length) {\n yield ops.pop()!\n }\n}\n","import { Context } from '../context/context'\nimport { toValue } from '../util'\n\nexport function isTruthy (val: any, ctx: Context): boolean {\n return !isFalsy(val, ctx)\n}\n\nexport function isFalsy (val: any, ctx: Context): boolean {\n val = toValue(val)\n\n if (ctx.opts.jsTruthy) {\n return !val\n } else {\n return val === false || undefined === val || val === null\n }\n}\n","import { isComparable } from '../drop/comparable'\nimport { Context } from '../context'\nimport { toValue } from '../util'\nimport { isFalsy, isTruthy } from '../render/boolean'\nimport { isArray, isFunction } from '../util/underscore'\n\nexport type UnaryOperatorHandler = (operand: any, ctx: Context) => boolean;\nexport type BinaryOperatorHandler = (lhs: any, rhs: any, ctx: Context) => boolean;\nexport type OperatorHandler = UnaryOperatorHandler | BinaryOperatorHandler;\nexport type Operators = Record\n\nexport const defaultOperators: Operators = {\n '==': equals,\n '!=': (l: any, r: any) => !equals(l, r),\n '>': (l: any, r: any) => {\n if (isComparable(l)) return l.gt(r)\n if (isComparable(r)) return r.lt(l)\n return toValue(l) > toValue(r)\n },\n '<': (l: any, r: any) => {\n if (isComparable(l)) return l.lt(r)\n if (isComparable(r)) return r.gt(l)\n return toValue(l) < toValue(r)\n },\n '>=': (l: any, r: any) => {\n if (isComparable(l)) return l.geq(r)\n if (isComparable(r)) return r.leq(l)\n return toValue(l) >= toValue(r)\n },\n '<=': (l: any, r: any) => {\n if (isComparable(l)) return l.leq(r)\n if (isComparable(r)) return r.geq(l)\n return toValue(l) <= toValue(r)\n },\n 'contains': (l: any, r: any) => {\n l = toValue(l)\n if (isArray(l)) return l.some((i) => equals(i, r))\n if (isFunction(l?.indexOf)) return l.indexOf(toValue(r)) > -1\n return false\n },\n 'not': (v: any, ctx: Context) => isFalsy(toValue(v), ctx),\n 'and': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\n 'or': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\n}\n\nexport function equals (lhs: any, rhs: any): boolean {\n if (isComparable(lhs)) return lhs.equals(rhs)\n if (isComparable(rhs)) return rhs.equals(lhs)\n lhs = toValue(lhs)\n rhs = toValue(rhs)\n if (isArray(lhs)) {\n return isArray(rhs) && arrayEquals(lhs, rhs)\n }\n return lhs === rhs\n}\n\nfunction arrayEquals (lhs: any[], rhs: any[]): boolean {\n if (lhs.length !== rhs.length) return false\n return !lhs.some((value, i) => !equals(value, rhs[i]))\n}\n\nexport function arrayIncludes (arr: any[], item: any): boolean {\n return arr.some(value => equals(value, item))\n}\n","import { Cache } from './cache'\n\nclass Node {\n constructor (\n public key: string,\n public value: T,\n public next: Node,\n public prev: Node\n ) {}\n}\n\nexport class LRU implements Cache {\n private cache: Record> = {}\n private head: Node\n private tail: Node\n\n constructor (\n public limit: number,\n public size = 0\n ) {\n this.head = new Node('HEAD', null as any, null as any, null as any)\n this.tail = new Node('TAIL', null as any, null as any, null as any)\n this.head.next = this.tail\n this.tail.prev = this.head\n }\n\n write (key: string, value: T) {\n if (this.cache[key]) {\n this.cache[key].value = value\n } else {\n const node = new Node(key, value, this.head.next, this.head)\n this.head.next.prev = node\n this.head.next = node\n\n this.cache[key] = node\n this.size++\n this.ensureLimit()\n }\n }\n\n read (key: string): T | undefined {\n if (!this.cache[key]) return\n const { value } = this.cache[key]\n this.remove(key)\n this.write(key, value)\n return value\n }\n\n remove (key: string) {\n const node = this.cache[key]\n node.prev.next = node.next\n node.next.prev = node.prev\n delete this.cache[key]\n this.size--\n }\n\n clear () {\n this.head.next = this.tail\n this.tail.prev = this.head\n this.size = 0\n this.cache = {}\n }\n\n private ensureLimit () {\n if (this.size > this.limit) this.remove(this.tail.prev.key)\n }\n}\n","import { last } from '../util'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nexport function resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nexport async function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nexport function readFileSync (url: string): string {\n const xhr = new XMLHttpRequest()\n xhr.open('GET', url, false)\n xhr.send()\n if (xhr.status < 200 || xhr.status >= 300) {\n throw new Error(xhr.statusText)\n }\n return xhr.responseText as string\n}\n\nexport async function exists (filepath: string) {\n return true\n}\n\nexport function existsSync (filepath: string) {\n return true\n}\n\nexport function dirname (filepath: string) {\n return domResolve(filepath, '.')\n}\n\nexport const sep = '/'\n","import { isFalsy } from '../render/boolean'\nimport { identify, isArray, isString, toValue } from '../util/underscore'\nimport { FilterImpl } from '../template'\n\nfunction chargeJsonReplacerValue (memoryLimit: { use(count: number): void }, val: unknown) {\n if (typeof val === 'string') {\n memoryLimit.use(val.length)\n } else if (val === null || typeof val === 'number' || typeof val === 'boolean') {\n memoryLimit.use(JSON.stringify(val).length)\n } else if (Array.isArray(val)) {\n memoryLimit.use(val.length + 1)\n } else if (typeof val === 'object') {\n memoryLimit.use(2)\n }\n}\n\nfunction defaultFilter (this: FilterImpl, value: T1, defaultValue: T2, ...args: Array<[string, any]>): T1 | T2 {\n value = toValue(value)\n if (isArray(value) || isString(value)) return value.length ? value : defaultValue\n if (value === false && (new Map(args)).get('allow_false')) return false as T1\n return isFalsy(value, this.context) ? defaultValue : value\n}\n\nfunction json (this: FilterImpl, value: any, space = 0) {\n const memoryLimit = this.context.memoryLimit\n return JSON.stringify(value, (_key, val) => {\n chargeJsonReplacerValue(memoryLimit, val)\n return val\n }, space)\n}\n\nfunction inspect (this: FilterImpl, value: any, space = 0) {\n const memoryLimit = this.context.memoryLimit\n const ancestors: object[] = []\n return JSON.stringify(value, function (this: unknown, _key: unknown, value: any) {\n if (typeof value !== 'object' || value === null) {\n chargeJsonReplacerValue(memoryLimit, value)\n return value\n }\n // `this` is the object that value is contained in, i.e., its direct parent.\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) ancestors.pop()\n if (ancestors.includes(value)) {\n memoryLimit.use('[Circular]'.length)\n return '[Circular]'\n }\n ancestors.push(value)\n chargeJsonReplacerValue(memoryLimit, value)\n return value\n }, space)\n}\n\nfunction to_integer (value: any) {\n return Number(value)\n}\n\nconst raw = {\n raw: true,\n handler: identify\n}\n\nexport default {\n default: defaultFilter,\n raw,\n jsonify: json,\n to_integer,\n json,\n inspect\n}\n","import { FilterImpl } from '../template'\nimport { stringify } from '../util/underscore'\n\nconst escapeMap: Record = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap: Record = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nexport function escape (this: FilterImpl, str: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nexport function xml_escape (this: FilterImpl, str: string) {\n return escape.call(this, str)\n}\n\nfunction unescape (this: FilterImpl, str: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport function escape_once (this: FilterImpl, str: string) {\n return escape.call(this, unescape.call(this, str))\n}\n\nexport function newline_to_br (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.replace(/\\r?\\n/gm, '
\\n')\n}\n\n// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex\n// equivalent is O(n^2) in V8 on unclosed openers.\nexport function strip_html (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n const blocks = new Map([[''], [''], [''], ['<', '>']])\n let out = ''\n let i = 0\n while (i < str.length) {\n const lt = str.indexOf('<', i)\n if (lt < 0) return out + str.slice(i)\n out += str.slice(i, lt)\n for (const [opener, closer] of blocks) {\n if (!str.startsWith(opener, lt)) continue\n const e = str.indexOf(closer, lt + opener.length)\n if (e >= 0) { i = e + closer.length; break }\n blocks.delete(opener)\n }\n if (i <= lt) return out + str.slice(lt)\n }\n return out\n}\n","import { isNil } from '../util'\n\nexport class MapFS {\n constructor (private mapping: {[key: string]: string}) {}\n\n public sep = '/'\n\n async exists (filepath: string) {\n return this.existsSync(filepath)\n }\n\n existsSync (filepath: string) {\n return !isNil(this.mapping[filepath])\n }\n\n async readFile (filepath: string) {\n return this.readFileSync(filepath)\n }\n\n readFileSync (filepath: string) {\n const content = this.mapping[filepath]\n if (isNil(content)) throw new Error(`ENOENT: ${filepath}`)\n return content\n }\n\n dirname (filepath: string) {\n const segments = filepath.split(this.sep)\n segments.pop()\n return segments.join(this.sep)\n }\n\n resolve (dir: string, file: string, ext: string) {\n file += ext\n if (dir === '.') return file\n const segments = dir.split(/\\/+/)\n for (const segment of file.split(this.sep)) {\n if (segment === '.' || segment === '') continue\n else if (segment === '..') {\n if (segments.length > 1 || segments[0] !== '') segments.pop()\n } else segments.push(segment)\n }\n return segments.join(this.sep)\n }\n}\n","import { assert, isArray, isString, isFunction } from './util'\nimport { getDateTimeFormat } from './util/intl'\nimport { LRU, LiquidCache } from './cache'\nimport { FS, LookupType } from './fs'\nimport * as fs from './fs/fs-impl'\nimport { defaultOperators, Operators } from './render'\nimport misc from './filters/misc'\nimport { escape } from './filters/html'\nimport { MapFS } from './fs/map-fs'\n\ntype OutputEscape = (value: any) => string\ntype OutputEscapeOption = 'escape' | 'json' | OutputEscape\n\nexport interface LiquidOptions {\n /** A directory or an array of directories from where to resolve layout and include templates, and the filename passed to `.renderFile()`. If it's an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[];\n /** A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */\n partials?: string | string[];\n /** A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */\n layouts?: string | string[];\n /** Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to `true`. */\n relativeReference?: boolean;\n /** Use jekyll style include, pass parameters to `include` variable of current scope. Defaults to `false`. */\n jekyllInclude?: boolean;\n /** Use jekyll style where filter, enables array item match. Defaults to `false`. */\n jekyllWhere?: boolean;\n /** Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string;\n /** Whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean | number | LiquidCache;\n /** Use JavaScript Truthiness. Defaults to `false`. */\n jsTruthy?: boolean;\n /** If set, treat the `filepath` parameter in `{%include filepath %}` and `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean;\n /** Whether or not to assert filter existence. If set to `false`, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strictFilters?: boolean;\n /** Whether or not to assert variable existence. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strictVariables?: boolean;\n /** Catch all errors instead of exit upon one. Please note that render errors won't be reached when parse fails. */\n catchAllErrors?: boolean;\n /**\n * Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates.\n * This only applies to property/index access on scope objects. Filter transforms and iteration operate on the resolved value with standard JavaScript semantics, so prototype-inherited array indices may still be surfaced by them.\n */\n ownPropertyOnly?: boolean;\n /** Modifies the behavior of `strictVariables`. If set, a single undefined variable will *not* cause an exception in the context of the `if`/`elsif`/`unless` tag and the `default` filter. Instead, it will evaluate to `false` and `null`, respectively. Irrelevant if `strictVariables` is not set. Defaults to `false`. **/\n lenientIf?: boolean;\n /** JavaScript timezone name or timezoneOffset for `date` filter, default to local time. That means if you're in Australia (UTC+10), it'll default to `-600` or `Australia/Lindeman` */\n timezoneOffset?: number | string;\n /** Default date format to use if the date filter doesn't include a format. Defaults to `%A, %B %-e, %Y at %-l:%M %P %z`. */\n dateFormat?: string;\n /** Default locale, will be used by date filter. Defaults to system locale. */\n locale?: string;\n /** Strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trimTagRight?: boolean;\n /** Similar to `trimTagRight`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trimTagLeft?: boolean;\n /** Strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trimOutputRight?: boolean;\n /** Similar to `trimOutputRight`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trimOutputLeft?: boolean;\n /** The left delimiter for liquid tags. **/\n tagDelimiterLeft?: string;\n /** The right delimiter for liquid tags. **/\n tagDelimiterRight?: string;\n /** The left delimiter for liquid outputs. **/\n outputDelimiterLeft?: string;\n /** The right delimiter for liquid outputs. **/\n outputDelimiterRight?: string;\n /** Whether input strings to date filter preserve the given timezone **/\n preserveTimezones?: boolean;\n /** Whether `trim*Left`/`trim*Right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimmed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean;\n /** `fs` is used to override the default file-system module with a custom implementation. */\n fs?: FS;\n /** keyValue separator */\n keyValueSeparator?: string;\n /** Render from an in-memory `templates` mapping instead of the file system. When `templates` is set, Liquid uses the provided mapping for template lookup (including includes, layouts, and partials), and file-system options such as `fs`, `root`, `partials`, `layouts`, and `relativeReference` are effectively bypassed for those lookups. */\n templates?: {[key: string]: string};\n /** the global scope passed down to all partial and layout templates, i.e. templates included by `include`, `layout` and `render` tags. */\n globals?: object;\n /** Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to `false`. */\n keepOutputType?: boolean;\n /** Default escape filter applied to output values, when set, you'll have to add `| raw` for values don't need to be escaped. Defaults to `undefined`. */\n outputEscape?: OutputEscapeOption;\n /** An object of operators for conditional statements. Defaults to the regular Liquid operators. */\n operators?: Operators;\n /** Respect parameter order when using filters like \"for ... reversed limit\", Defaults to `false`. */\n orderedFilterParameters?: boolean;\n /** Allow parenthesized expressions as operands in conditions and loops, e.g. `{% if (foo | upcase) == \"BAR\" %}`. This is a non-standard extension to Liquid. Defaults to `false`. */\n groupedExpressions?: boolean;\n /** For DoS handling, limit total length of templates parsed in one `parse()` call. A typical PC can handle 1e8 (100M) characters without issues. */\n parseLimit?: number;\n /** For DoS handling, limit total time (in ms) for each `render()` call. */\n renderLimit?: number;\n /** For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue. */\n memoryLimit?: number;\n}\n\nexport interface RenderOptions {\n /**\n * This call is sync or async? It's used by Liquid internal methods, you'll not need this.\n */\n sync?: boolean;\n /**\n * Same as `globals` on LiquidOptions, but only for current render() call\n */\n globals?: object;\n /**\n * Same as `strictVariables` on LiquidOptions, but only for current render() call\n */\n strictVariables?: boolean;\n /**\n * Same as `ownPropertyOnly` on LiquidOptions, but only for current render() call\n */\n ownPropertyOnly?: boolean;\n /** For DoS handling, limit total renders of tag/HTML/output in one `render()` call. A typical PC can handle 1e5 renders of typical templates per second. */\n templateLimit?: number;\n /** For DoS handling, limit total time (in ms) for each `render()` call. */\n renderLimit?: number;\n /** For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue.. */\n memoryLimit?: number;\n}\n\nexport interface RenderFileOptions extends RenderOptions {\n lookupType?: LookupType;\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[];\n partials?: string[];\n layouts?: string[];\n cache?: LiquidCache;\n outputEscape?: OutputEscape;\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[];\n partials: string[];\n layouts: string[];\n relativeReference: boolean;\n jekyllInclude: boolean;\n extname: string;\n cache?: LiquidCache;\n jsTruthy: boolean;\n dynamicPartials: boolean;\n fs: FS;\n strictFilters: boolean;\n strictVariables: boolean;\n ownPropertyOnly: boolean;\n lenientIf: boolean;\n dateFormat: string;\n locale: string;\n trimTagRight: boolean;\n trimTagLeft: boolean;\n trimOutputRight: boolean;\n trimOutputLeft: boolean;\n tagDelimiterLeft: string;\n tagDelimiterRight: string;\n outputDelimiterLeft: string;\n outputDelimiterRight: string;\n preserveTimezones: boolean;\n greedy: boolean;\n globals: object;\n keepOutputType: boolean;\n operators: Operators;\n groupedExpressions: boolean;\n parseLimit: number;\n renderLimit: number;\n memoryLimit: number;\n}\n\nexport const defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n layouts: ['.'],\n partials: ['.'],\n relativeReference: true,\n jekyllInclude: false,\n keyValueSeparator: ':',\n cache: undefined,\n extname: '',\n fs: fs,\n dynamicPartials: true,\n jsTruthy: false,\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\n locale: '',\n trimTagRight: false,\n trimTagLeft: false,\n trimOutputRight: false,\n trimOutputLeft: false,\n greedy: true,\n tagDelimiterLeft: '{%',\n tagDelimiterRight: '%}',\n outputDelimiterLeft: '{{',\n outputDelimiterRight: '}}',\n preserveTimezones: false,\n strictFilters: false,\n strictVariables: false,\n ownPropertyOnly: true,\n lenientIf: false,\n globals: {},\n keepOutputType: false,\n operators: defaultOperators,\n groupedExpressions: false,\n memoryLimit: Infinity,\n parseLimit: Infinity,\n renderLimit: Infinity\n}\n\nexport function normalize (options: LiquidOptions): NormalizedFullOptions {\n if (options.hasOwnProperty('root')) {\n if (!options.hasOwnProperty('partials')) options.partials = options.root\n if (!options.hasOwnProperty('layouts')) options.layouts = options.root\n }\n if (options.hasOwnProperty('cache')) {\n let cache: LiquidCache | undefined\n if (typeof options.cache === 'number') cache = options.cache > 0 ? new LRU(options.cache) : undefined\n else if (typeof options.cache === 'object') cache = options.cache\n else cache = options.cache ? new LRU(1024) : undefined\n options.cache = cache\n }\n options = { ...defaultOptions, ...(options.jekyllInclude ? { dynamicPartials: false } : {}), ...options }\n if ((!options.fs!.dirname || !options.fs!.sep) && options.relativeReference) {\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning')\n options.relativeReference = false\n }\n options.root = normalizeDirectoryList(options.root)\n options.partials = normalizeDirectoryList(options.partials)\n options.layouts = normalizeDirectoryList(options.layouts)\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape)\n if (!options.locale) {\n options.locale = getDateTimeFormat()?.().resolvedOptions().locale ?? 'en-US'\n }\n if (options.templates) {\n options.fs = new MapFS(options.templates)\n options.relativeReference = true\n options.root = options.partials = options.layouts = '.'\n }\n return options as NormalizedFullOptions\n}\n\nfunction getOutputEscapeFunction (nameOrFunction: OutputEscapeOption): OutputEscape {\n if (nameOrFunction === 'escape') return escape\n if (nameOrFunction === 'json') return misc.json\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function')\n return nameOrFunction\n}\n\nexport function normalizeDirectoryList (value: any): string[] {\n let list: string[] = []\n if (isArray(value)) list = value\n if (isString(value)) list = [value]\n return list\n}\n","import { Token } from '../tokens'\nimport { NormalizedFullOptions } from '../liquid-options'\nimport { isTagToken, isHTMLToken, isDelimitedToken, TYPES, INLINE_BLANK, BLANK } from '../util'\n\nexport function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n let inRaw = false\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n if (!isDelimitedToken(token)) continue\n if (!inRaw && token.trimLeft) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (isTagToken(token)) {\n if (token.name === 'raw') inRaw = true\n else if (token.name === 'endraw') inRaw = false\n }\n\n if (!inRaw && token.trimRight) {\n trimRight(tokens[i + 1], options.greedy)\n }\n }\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || !isHTMLToken(token)) return\n\n const mask = greedy ? BLANK : INLINE_BLANK\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) token.trimRight++\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || !isHTMLToken(token)) return\n\n const mask = greedy ? BLANK : INLINE_BLANK\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) token.trimLeft++\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n') token.trimLeft++\n}\n","import { FilteredValueToken, TagToken, HTMLToken, HashToken, QuotedToken, LiquidTagToken, OutputToken, ValueToken, Token, RangeToken, FilterToken, TopLevelToken, PropertyAccessToken, OperatorToken, LiteralToken, IdentifierToken, NumberToken } from '../tokens'\nimport { OperatorHandler } from '../render/operator'\nimport { LiteralValue, Trie, createTrie, ellipsis, literalValues, TokenizationError, TYPES, QUOTE, BLANK, NUMBER, SIGN, isWord, isString } from '../util'\nimport { Operators, Expression } from '../render'\nimport { NormalizedFullOptions, defaultOptions } from '../liquid-options'\nimport { FilterArg } from './filter-arg'\nimport { whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport class Tokenizer {\n p: number\n N: number\n public groupedExpressions: boolean\n private rawBeginAt = -1\n private opTrie: Trie\n private literalTrie: Trie\n\n constructor (\n public input: string,\n operators: Operators = defaultOptions.operators,\n public file?: string,\n range?: [number, number],\n groupedExpressions = false\n ) {\n this.p = range ? range[0] : 0\n this.N = range ? range[1] : input.length\n this.opTrie = createTrie(operators)\n this.literalTrie = createTrie(literalValues)\n this.groupedExpressions = groupedExpressions\n }\n\n readExpression () {\n return new Expression(this.readExpressionTokens())\n }\n\n * readExpressionTokens (): IterableIterator {\n while (this.p < this.N) {\n const operator = this.readOperator()\n if (operator) {\n yield operator\n continue\n }\n const operand = this.readValue()\n if (operand) {\n yield operand\n continue\n }\n return\n }\n }\n readOperator (): OperatorToken | undefined {\n this.skipBlank()\n const end = this.matchTrie(this.opTrie)\n if (end === -1) return\n return new OperatorToken(this.input, this.p, (this.p = end), this.file)\n }\n matchTrie (trie: Trie) {\n let node: Trie = trie\n let i = this.p\n let info: Trie | undefined\n while ((node as Trie)[this.input[i]] && i < this.N) {\n node = (node as Trie)[this.input[i++]] as Trie\n if (node['end']) info = node\n }\n if (!info) return -1\n if (info['needBoundary'] && isWord(this.peek(i - this.p))) return -1\n return i\n }\n readFilteredValue (): FilteredValueToken {\n const begin = this.p\n const initial = this.readExpression()\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`)\n const filters = this.readFilters()\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file)\n }\n readFilters (): FilterToken[] {\n const filters = []\n while (true) {\n const filter = this.readFilter()\n if (!filter) return filters\n filters.push(filter)\n }\n }\n readFilter (): FilterToken | null {\n this.skipBlank()\n if (this.end()) return null\n if (this.peek() === ')') return null\n this.assert(this.read() === '|', `expected \"|\" before filter`)\n const name = this.readIdentifier()\n if (!name.size()) {\n this.assert(this.end(), `expected filter name`)\n return null\n }\n const args = []\n this.skipBlank()\n if (this.peek() === ':') {\n do {\n ++this.p\n const arg = this.readFilterArg()\n arg && args.push(arg)\n this.skipBlank()\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|' || this.peek() === ')', () => `unexpected character ${this.snapshot()}`)\n } while (this.peek() === ',')\n } else if (this.peek() === '|' || this.peek() === ')' || this.end()) {\n // do nothing\n } else {\n throw this.error('expected \":\" after filter name')\n }\n return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file)\n }\n\n readFilterArg (): FilterArg | undefined {\n const key = this.readValue()\n if (!key) return\n this.skipBlank()\n if (this.peek() !== ':') return key\n ++this.p\n const value = this.readValue()\n return [key.getText(), value]\n }\n\n readTopLevelTokens (options: NormalizedFullOptions = defaultOptions): TopLevelToken[] {\n const tokens: TopLevelToken[] = []\n while (this.p < this.N) {\n const token = this.readTopLevelToken(options)\n tokens.push(token)\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n }\n\n readTopLevelToken (options: NormalizedFullOptions): TopLevelToken {\n const { tagDelimiterLeft, outputDelimiterLeft } = options\n if (this.rawBeginAt > -1) return this.readEndrawOrRawContent(options)\n if (this.match(tagDelimiterLeft)) return this.readTagToken(options)\n if (this.match(outputDelimiterLeft)) return this.readOutputToken(options)\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft])\n }\n\n readHTMLToken (stopStrings: string[]): HTMLToken {\n const begin = this.p\n while (this.p < this.N) {\n if (stopStrings.some(str => this.match(str))) break\n ++this.p\n }\n return new HTMLToken(this.input, begin, this.p, this.file)\n }\n\n readTagToken (options: NormalizedFullOptions): TagToken {\n const { file, input } = this\n const begin = this.p\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin)\n }\n const token = new TagToken(input, begin, this.p, options, file)\n if (token.name === 'raw') this.rawBeginAt = begin\n return token\n }\n\n readToDelimiter (delimiter: string, respectQuoted = false) {\n this.skipBlank()\n while (this.p < this.N) {\n if (respectQuoted && (this.peekType() & QUOTE)) {\n this.readQuoted()\n continue\n }\n ++this.p\n if (this.rmatch(delimiter)) return this.p\n }\n return -1\n }\n\n readOutputToken (options: NormalizedFullOptions = defaultOptions): OutputToken {\n const { file, input } = this\n const { outputDelimiterRight } = options\n const begin = this.p\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin)\n }\n return new OutputToken(input, begin, this.p, options, file)\n }\n\n readEndrawOrRawContent (options: NormalizedFullOptions): HTMLToken | TagToken {\n const { tagDelimiterLeft, tagDelimiterRight } = options\n const begin = this.p\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length\n while (this.p < this.N) {\n if (this.readIdentifier().getText() !== 'endraw') {\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length\n continue\n }\n while (this.p <= this.N) {\n if (this.rmatch(tagDelimiterRight)) {\n const end = this.p\n if (begin === leftPos) {\n this.rawBeginAt = -1\n return new TagToken(this.input, begin, end, options, this.file)\n } else {\n this.p = leftPos\n return new HTMLToken(this.input, begin, leftPos, this.file)\n }\n }\n if (this.rmatch(tagDelimiterLeft)) break\n this.p++\n }\n }\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin)\n }\n\n readLiquidTagTokens (options: NormalizedFullOptions = defaultOptions): LiquidTagToken[] {\n const tokens: LiquidTagToken[] = []\n while (this.p < this.N) {\n const token = this.readLiquidTagToken(options)\n token && tokens.push(token)\n }\n return tokens\n }\n\n readLiquidTagToken (options: NormalizedFullOptions): LiquidTagToken | undefined {\n this.skipBlank()\n if (this.end()) return\n\n const begin = this.p\n this.readToDelimiter('\\n')\n const end = this.p\n return new LiquidTagToken(this.input, begin, end, options, this.file)\n }\n\n error (msg: string, pos: number = this.p) {\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file))\n }\n\n assert (pred: unknown, msg: string | (() => string), pos?: number) {\n if (!pred) throw this.error(typeof msg === 'function' ? msg() : msg, pos)\n }\n\n snapshot (begin: number = this.p) {\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32))\n }\n\n /**\n * @deprecated use #readIdentifier instead\n */\n readWord () {\n return this.readIdentifier()\n }\n\n readIdentifier (): IdentifierToken {\n this.skipBlank()\n const begin = this.p\n while (!this.end() && isWord(this.peek())) ++this.p\n return new IdentifierToken(this.input, begin, this.p, this.file)\n }\n\n readNonEmptyIdentifier (): IdentifierToken | undefined {\n const id = this.readIdentifier()\n return id.size() ? id : undefined\n }\n\n readTagName (): string {\n this.skipBlank()\n // Handle inline comment tags\n if (this.input[this.p] === '#') return this.input.slice(this.p, ++this.p)\n return this.readIdentifier().getText()\n }\n\n readHashes (jekyllStyle?: boolean | string) {\n const hashes = []\n while (true) {\n const hash = this.readHash(jekyllStyle)\n if (!hash) return hashes\n hashes.push(hash)\n }\n }\n\n readHash (jekyllStyle?: boolean | string): HashToken | undefined {\n this.skipBlank()\n if (this.peek() === ',') ++this.p\n const begin = this.p\n const name = this.readNonEmptyIdentifier()\n if (!name) return\n let value\n\n this.skipBlank()\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':')\n if (this.peek() === sep) {\n ++this.p\n value = this.readValue()\n }\n return new HashToken(this.input, begin, this.p, name, value, this.file)\n }\n\n remaining () {\n return this.input.slice(this.p, this.N)\n }\n\n advance (step = 1) {\n this.p += step\n }\n\n end () {\n return this.p >= this.N\n }\n read () {\n return this.input[this.p++]\n }\n readTo (end: string): number {\n while (this.p < this.N) {\n ++this.p\n if (this.rmatch(end)) return this.p\n }\n return -1\n }\n\n readValue (): ValueToken | FilteredValueToken | undefined {\n this.skipBlank()\n const begin = this.p\n let variable: ValueToken | FilteredValueToken | undefined = this.readLiteral() || this.readQuoted() || this.readNumber()\n if (!variable && this.peek() === '(') {\n variable = this.readGroupOrRange()\n }\n const props = this.readProperties(!variable)\n if (!props.length) return variable\n return new PropertyAccessToken(variable, props, this.input, begin, this.p)\n }\n\n readScopeValue (): ValueToken | undefined {\n this.skipBlank()\n const begin = this.p\n const props = this.readProperties()\n if (!props.length) return undefined\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p)\n }\n\n private readProperties (isBegin = true): (ValueToken | IdentifierToken)[] {\n const props: (ValueToken | IdentifierToken)[] = []\n while (true) {\n if (this.peek() === '[') {\n this.p++\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file)\n this.assert(this.readTo(']') !== -1, '[ not closed')\n props.push(prop)\n continue\n }\n if (isBegin && !props.length) {\n const prop = this.readNonEmptyIdentifier()\n if (prop) {\n props.push(prop)\n continue\n }\n }\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\n this.p++\n const prop = this.readNonEmptyIdentifier()\n if (!prop) break\n props.push(prop)\n continue\n }\n break\n }\n return props\n }\n\n readNumber (): NumberToken | undefined {\n this.skipBlank()\n let decimalFound = false\n let digitFound = false\n let n = 0\n if (this.peekType() & SIGN) n++\n while (this.p + n <= this.N) {\n if (this.peekType(n) & NUMBER) {\n digitFound = true\n n++\n } else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\n if (decimalFound || !digitFound) return\n decimalFound = true\n n++\n } else break\n }\n if (digitFound && !isWord(this.peek(n))) {\n const num = new NumberToken(this.input, this.p, this.p + n, this.file)\n this.advance(n)\n return num\n }\n }\n\n readLiteral (): LiteralToken | undefined {\n this.skipBlank()\n const end = this.matchTrie(this.literalTrie)\n if (end === -1) return\n const literal = new LiteralToken(this.input, this.p, end, this.file)\n this.p = end\n return literal\n }\n\n readGroupOrRange (): FilteredValueToken | RangeToken | undefined {\n this.skipBlank()\n const begin = this.p\n if (this.peek() !== '(') return\n ++this.p\n const lhs = this.readValueOrThrow()\n this.skipBlank()\n\n if (this.peek() === '.' && this.peek(1) === '.') {\n this.p += 2\n const rhs = this.readValueOrThrow()\n this.skipBlank()\n this.assert(this.read() === ')', 'invalid range syntax')\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file)\n }\n\n if (this.groupedExpressions) {\n const initial = new Expression([lhs, ...this.readExpressionTokens()])\n this.assert(initial.valid(), () => `invalid value expression: ${this.snapshot()}`)\n const filters = this.readFilters()\n this.skipBlank()\n this.assert(this.read() === ')', 'unbalanced parentheses')\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file)\n }\n\n throw this.error('invalid range syntax')\n }\n\n readValueOrThrow (): ValueToken {\n const value = this.readValue()\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`)\n return value!\n }\n\n readQuoted (): QuotedToken | undefined {\n this.skipBlank()\n const begin = this.p\n if (!(this.peekType() & QUOTE)) return\n ++this.p\n let escaped = false\n while (this.p < this.N) {\n ++this.p\n if (this.input[this.p - 1] === this.input[begin] && !escaped) break\n if (escaped) escaped = false\n else if (this.input[this.p - 1] === '\\\\') escaped = true\n }\n return new QuotedToken(this.input, begin, this.p, this.file)\n }\n\n * readFileNameTemplate (options: NormalizedFullOptions): IterableIterator {\n const { outputDelimiterLeft } = options\n const htmlStopStrings = [',', ' ', '\\r', '\\n', '\\t', outputDelimiterLeft]\n const htmlStopStringSet = new Set(htmlStopStrings)\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\n yield this.match(outputDelimiterLeft)\n ? this.readOutputToken(options)\n : this.readHTMLToken(htmlStopStrings)\n }\n }\n\n match (word: string) {\n for (let i = 0; i < word.length; i++) {\n if (word[i] !== this.input[this.p + i]) return false\n }\n return true\n }\n\n rmatch (pattern: string) {\n for (let i = 0; i < pattern.length; i++) {\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) return false\n }\n return true\n }\n\n peekType (n = 0) {\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)]\n }\n\n peek (n = 0): string {\n return this.p + n >= this.N ? '' : this.input[this.p + n]\n }\n\n skipBlank () {\n while (this.peekType() & BLANK) ++this.p\n }\n}\n","import { Token, TopLevelToken } from '../tokens'\nimport { Template } from '../template'\nimport { isTagToken } from '../util'\n\ntype ParseToken = ((token: T, remainTokens: T[]) => Template)\n\nexport class ParseStream {\n private tokens: T[]\n private handlers: Record void> = {}\n private stopRequested = false\n private parseToken: ParseToken\n\n public constructor (tokens: T[], parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n public on (name: string, cb: (this: ParseStream, arg: T2) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n private trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n return h ? (h.call(this, arg), true) : false\n }\n public start () {\n this.trigger('start')\n let token: T | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n public stop () {\n this.stopRequested = true\n return this\n }\n}\n","export abstract class TemplateImpl {\n public token: T;\n public constructor (token: T) {\n this.token = token\n }\n}\n","import { TemplateImpl } from './template-impl'\nimport type { Emitter } from '../emitters/emitter'\nimport type { Parser, Tokenizer } from '../parser'\nimport type { Context } from '../context/context'\nimport type { TopLevelToken, TagToken } from '../tokens'\nimport type { Template } from './template'\nimport type { Liquid } from '../liquid'\n\nexport type TagRenderReturn = Generator | Promise | unknown\n\nexport abstract class Tag extends TemplateImpl implements Template {\n public name: string\n public liquid: Liquid\n protected tokenizer: Tokenizer\n\n public constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token)\n this.name = token.name\n this.liquid = liquid\n this.tokenizer = token.tokenizer\n }\n public abstract render (ctx: Context, emitter: Emitter): TagRenderReturn;\n}\n\nexport interface TagClass {\n new(token: TagToken, tokens: TopLevelToken[], liquid: Liquid, parser: Parser): Tag\n}\n","import { evalToken } from '../render/expression'\nimport { Context } from '../context/context'\nimport { Tokenizer } from '../parser/tokenizer'\nimport { Token } from '../tokens/token'\n\ntype HashValueTokens = Record\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `, foo:'bar', coo:2 reversed %}`,\n * hash['foo'] === 'bar'\n * hash['coo'] === 2\n * hash['reversed'] === undefined\n */\nexport class Hash {\n hash: HashValueTokens = {}\n\n constructor (input: string | Tokenizer, jekyllStyle?: boolean | string) {\n const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {})\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\n this.hash[hash.name.content] = hash.value\n }\n }\n\n * render (ctx: Context): Generator, unknown> {\n const hash: Record = {}\n for (const key of Object.keys(this.hash)) {\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx)\n }\n return hash\n }\n}\n","import { isFunction } from '../util'\nimport { Hash } from './hash'\nimport { Tag, TagClass, TagRenderReturn } from './tag'\nimport { TagToken, TopLevelToken } from '../tokens'\nimport { Emitter } from '../emitters'\nimport { Context } from '../context'\nimport type { Liquid } from '../liquid'\n\nexport interface TagImplOptions {\n [key: string]: any\n parse?: (this: Tag & TagImplOptions, token: TagToken, remainingTokens: TopLevelToken[]) => void;\n render: (this: Tag & TagImplOptions, ctx: Context, emitter: Emitter, hash: Record) => TagRenderReturn;\n}\n\nexport function createTagClass (options: TagImplOptions): TagClass {\n return class extends Tag {\n constructor (token: TagToken, tokens: TopLevelToken[], liquid: Liquid) {\n super(token, tokens, liquid)\n if (isFunction(options.parse)) {\n options.parse.call(this, token, tokens)\n }\n }\n * render (ctx: Context, emitter: Emitter): TagRenderReturn {\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx)) as Record\n return yield options.render.call(this, ctx, emitter, hash)\n }\n }\n}\n","import { Filter } from './filter'\nimport { Expression } from '../render'\nimport { Tokenizer } from '../parser'\nimport { assert } from '../util'\nimport type { FilteredValueToken } from '../tokens'\nimport type { Liquid } from '../liquid'\nimport type { Context } from '../context'\n\nexport class Value {\n public readonly filters: Filter[] = []\n public readonly initial: Expression\n\n /**\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\n */\n public constructor (input: string | FilteredValueToken, liquid: Liquid) {\n const token: FilteredValueToken = typeof input === 'string'\n ? new Tokenizer(input, liquid.options.operators, undefined, undefined, liquid.options.groupedExpressions).readFilteredValue()\n : input\n this.initial = token.initial\n this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid))\n }\n\n public * value (ctx: Context, lenient?: boolean): Generator {\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default')\n let val = yield this.initial.evaluate(ctx, lenient)\n\n for (const filter of this.filters) {\n val = yield filter.render(val, ctx)\n }\n return val\n }\n\n private getFilter (liquid: Liquid, name: string) {\n const impl = liquid.filters[name]\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`)\n return impl\n }\n}\n","import { Value } from './value'\nimport { Arguments, Template, TemplateImpl } from '../template'\nimport { Context } from '../context/context'\nimport { Emitter } from '../emitters/emitter'\nimport { OutputToken } from '../tokens/output-token'\nimport { Tokenizer } from '../parser'\nimport { Liquid } from '../liquid'\nimport { Filter } from './filter'\nimport { FilterToken } from '../tokens'\n\nexport class Output extends TemplateImpl implements Template {\n value: Value\n public constructor (token: OutputToken, liquid: Liquid) {\n super(token)\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange, liquid.options.groupedExpressions)\n this.value = new Value(tokenizer.readFilteredValue(), liquid)\n const filters = this.value.filters\n const outputEscape = liquid.options.outputEscape\n if (!filters[filters.length - 1]?.raw && outputEscape) {\n const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0)\n filters.push(new Filter(token, outputEscape, liquid))\n }\n }\n public * render (ctx: Context, emitter: Emitter): IterableIterator {\n const val = yield this.value.value(ctx, false)\n emitter.write(val)\n }\n\n public * arguments (): Arguments {\n yield this.value\n }\n}\n","import { TemplateImpl, Template } from '../template'\nimport { HTMLToken } from '../tokens'\nimport { Context } from '../context'\nimport { Emitter } from '../emitters'\n\nexport class HTML extends TemplateImpl implements Template {\n private str: string\n public constructor (token: HTMLToken) {\n super(token)\n this.str = token.getContent()\n }\n public * render (ctx: Context, emitter: Emitter): IterableIterator {\n emitter.write(this.str)\n }\n}\n","import { Argument, Template, Value } from '.'\nimport { isKeyValuePair } from '../parser/filter-arg'\nimport { PropertyAccessToken, ValueToken } from '../tokens'\nimport {\n isFilteredValueToken,\n isNumberToken,\n isPropertyAccessToken,\n isQuotedToken,\n isRangeToken,\n isString,\n isValueToken,\n isWordToken,\n toPromise,\n toValueSync\n} from '../util'\n\n/**\n * Row, column and file name where a variable was found.\n */\nexport interface VariableLocation {\n row: number;\n col: number;\n file?: string;\n}\n\n/**\n * A variable's segments as an array, possibly with nested arrays of segments.\n */\nexport type SegmentArray = Array\n\n/**\n * A variable's segments and location, which can be coerced to a string.\n */\nexport class Variable {\n constructor (\n readonly segments: Array,\n readonly location: VariableLocation\n ) {}\n\n public toString (): string {\n return segmentsString(this.segments, true)\n }\n\n /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */\n public toArray (): SegmentArray {\n function * _visit (...segments: Array): Generator {\n for (const segment of segments) {\n if (segment instanceof Variable) {\n yield Array.from(_visit(...segment.segments))\n } else {\n yield segment\n }\n }\n }\n return Array.from(_visit(...this.segments))\n }\n}\n\n/**\n * Property names and array indexes that make up a path to a variable.\n */\nexport type VariableSegments = Array;\n\n/**\n * A mapping of variable names to an array of locations at which the variable was found.\n */\nexport type Variables = { [key: string]: Variable[] };\n\n/**\n * Group variables by the string representation of their root segment.\n */\nexport class VariableMap {\n private map: Map\n\n constructor () {\n this.map = new Map()\n }\n\n public get (key: Variable): Variable[] {\n const k = segmentsString([key.segments[0]])\n if (!this.map.has(k)) {\n this.map.set(k, [])\n }\n return this.map.get(k) as Variable[]\n }\n\n public has (key: Variable): boolean {\n return this.map.has(segmentsString([key.segments[0]]))\n }\n\n public push (variable: Variable): void {\n this.get(variable).push(variable)\n }\n\n public asObject (): Variables {\n return Object.fromEntries(this.map)\n }\n}\n\n/**\n * The result of calling `analyze()` or `analyzeSync()`.\n */\nexport interface StaticAnalysis {\n /**\n * All variables, whether they are in scope or not. Including references to names\n * such as `forloop` from the `for` tag.\n */\n variables: Variables;\n\n /**\n * Variables that are not in scope. These could be a \"global\" variables that are\n * expected to be provided by the application developer, or possible mistakes\n * from the template author.\n *\n * If a variable is referenced before and after assignment, you should expect\n * that variable to be included in `globals`, `variables` and `locals`, each with\n * a different location.\n */\n globals: Variables;\n\n /**\n * Template variables that are added to the template local scope using tags like\n * `assign`, `capture` or `increment`.\n */\n locals: Variables;\n}\n\nexport interface StaticAnalysisOptions {\n /**\n * When `true` (the default), try to load partial templates and analyze them too.\n */\n partials?: boolean;\n}\n\nexport const defaultStaticAnalysisOptions: StaticAnalysisOptions = {\n partials: true\n}\n\nfunction * _analyze (templates: Template[], partials: boolean, sync: boolean): Generator {\n const variables = new VariableMap()\n const globals = new VariableMap()\n const locals = new VariableMap()\n\n const rootScope = new DummyScope(new Set())\n\n // Names of partial templates that we've already analyzed.\n const seen: Set = new Set()\n\n function updateVariables (variable: Variable, scope: DummyScope) {\n variables.push(variable)\n const aliased = scope.alias(variable)\n\n if (aliased !== undefined) {\n const root = aliased.segments[0]\n // TODO: What if a a template renders a rendered template? Do we need scope.parent?\n if (isString(root) && !rootScope.has(root)) {\n globals.push(aliased)\n }\n } else {\n const root = variable.segments[0]\n if (isString(root) && !scope.has(root)) {\n globals.push(variable)\n }\n }\n\n // Recurse for nested Variables\n for (const segment of variable.segments) {\n if (segment instanceof Variable) {\n updateVariables(segment, scope)\n }\n }\n }\n\n function * visit (template: Template, scope: DummyScope): Generator {\n if (template.arguments) {\n for (const arg of template.arguments()) {\n for (const variable of extractVariables(arg)) {\n updateVariables(variable, scope)\n }\n }\n }\n\n if (template.localScope) {\n for (const ident of template.localScope()) {\n scope.add(ident.content)\n scope.deleteAlias(ident.content)\n const [row, col] = ident.getPosition()\n locals.push(new Variable([ident.content], { row, col, file: ident.file }))\n }\n }\n\n if (template.children) {\n if (template.partialScope) {\n const partial = template.partialScope()\n\n if (partial === undefined) {\n // Layouts, for example, can have children that are not partials.\n for (const child of (yield template.children(partials, sync)) as Template[]) {\n yield visit(child, scope)\n }\n return\n }\n\n if (seen.has(partial.name)) return\n\n const partialScopeNames: Set = new Set()\n const partialScope = partial.isolated\n ? new DummyScope(partialScopeNames)\n : scope.push(partialScopeNames)\n\n for (const name of partial.scope) {\n if (isString(name)) {\n partialScopeNames.add(name)\n } else {\n const [alias, argument] = name\n partialScopeNames.add(alias)\n const variables = Array.from(extractVariables(argument))\n if (variables.length) {\n partialScope.setAlias(alias, variables[0].segments)\n }\n }\n }\n\n for (const child of (yield template.children(partials, sync)) as Template[]) {\n yield visit(child, partialScope)\n seen.add(partial.name)\n }\n\n partialScope.pop()\n } else {\n if (template.blockScope) {\n scope.push(new Set(template.blockScope()))\n }\n\n for (const child of (yield template.children(partials, sync)) as Template[]) {\n yield visit(child, scope)\n }\n\n if (template.blockScope) {\n scope.pop()\n }\n }\n }\n }\n\n for (const template of templates) {\n yield visit(template, rootScope)\n }\n\n return {\n variables: variables.asObject(),\n globals: globals.asObject(),\n locals: locals.asObject()\n }\n}\n\n/**\n * Statically analyze a template and report variable usage.\n */\nexport function analyze (template: Template[], options: StaticAnalysisOptions = {}): Promise {\n const opts = { ...defaultStaticAnalysisOptions, ...options } as Required\n return toPromise(_analyze(template, opts.partials, false))\n}\n\n/**\n * Statically analyze a template and report variable usage.\n */\nexport function analyzeSync (template: Template[], options: StaticAnalysisOptions = {}): StaticAnalysis {\n const opts = { ...defaultStaticAnalysisOptions, ...options } as Required\n return toValueSync(_analyze(template, opts.partials, true))\n}\n\ninterface ScopeStackItem {\n names: Set;\n aliases: Map;\n}\n\n/**\n * A stack to manage scopes while traversing templates during static analysis.\n */\nclass DummyScope {\n private stack: Array\n\n constructor (globals: Set) {\n this.stack = [{ names: globals, aliases: new Map() }]\n }\n\n /** Return true if `name` is in scope. */\n public has (name: string): boolean {\n for (const scope of this.stack) {\n if (scope.names.has(name)) {\n return true\n }\n }\n return false\n }\n\n public push (scope: Set): DummyScope {\n this.stack.push({ names: scope, aliases: new Map() })\n return this\n }\n\n public pop (): Set | undefined {\n return this.stack.pop()?.names\n }\n\n // Add a name to the template scope.\n public add (name: string): void {\n this.stack[0].names.add(name)\n }\n\n /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */\n public alias (variable: Variable): Variable | undefined {\n const root = variable.segments[0]\n if (!isString(root)) return undefined\n const alias = this.getAlias(root)\n if (alias === undefined) return undefined\n return new Variable([...alias, ...variable.segments.slice(1)], variable.location)\n }\n\n // TODO: `from` could be a path with multiple segments, like `include.x`.\n public setAlias (from: string, to: VariableSegments): void {\n this.stack[this.stack.length - 1].aliases.set(from, to)\n }\n\n public deleteAlias (name: string): void {\n this.stack[this.stack.length - 1].aliases.delete(name)\n }\n\n private getAlias (name: string): VariableSegments | undefined {\n for (const scope of this.stack) {\n if (scope.aliases.has(name)) {\n return scope.aliases.get(name)\n }\n\n // If a scope has defined `name`, then it masks aliases in parent scopes.\n if (scope.names.has(name)) {\n return undefined\n }\n }\n return undefined\n }\n}\n\nfunction * extractVariables (value: Argument): Generator {\n if (isValueToken(value)) {\n yield * extractValueTokenVariables(value)\n } else if (value instanceof Value) {\n yield * extractFilteredValueVariables(value)\n }\n}\n\nfunction * extractFilteredValueVariables (value: Value): Generator {\n for (const token of value.initial.postfix) {\n if (isValueToken(token)) {\n yield * extractValueTokenVariables(token)\n }\n }\n\n for (const filter of value.filters) {\n for (const arg of filter.args) {\n if (isKeyValuePair(arg) && arg[1]) {\n yield * extractValueTokenVariables(arg[1])\n } else if (isValueToken(arg)) {\n yield * extractValueTokenVariables(arg)\n }\n }\n }\n}\n\nfunction * extractValueTokenVariables (token: ValueToken): Generator {\n if (isRangeToken(token)) {\n yield * extractValueTokenVariables(token.lhs)\n yield * extractValueTokenVariables(token.rhs)\n } else if (isFilteredValueToken(token)) {\n yield * extractGroupedExpressionTokenVariables(token)\n } else if (isPropertyAccessToken(token)) {\n yield extractPropertyAccessVariable(token)\n }\n}\n\nfunction * extractGroupedExpressionTokenVariables (token: ValueToken): Generator {\n if (!isFilteredValueToken(token)) return\n\n for (const t of token.initial.postfix) {\n if (isValueToken(t)) yield * extractValueTokenVariables(t)\n }\n\n for (const filter of token.filters) {\n for (const arg of filter.args) {\n if (isKeyValuePair(arg) && arg[1]) {\n yield * extractValueTokenVariables(arg[1])\n } else if (isValueToken(arg)) {\n yield * extractValueTokenVariables(arg)\n }\n }\n }\n}\n\nfunction extractPropertyAccessVariable (token: PropertyAccessToken): Variable {\n const segments: VariableSegments = []\n\n // token is not guaranteed to have `file` set. We'll try to get it from a prop if not.\n let file: string | undefined = token.file\n\n // Here we're flattening the first segment of a path if it is a nested path.\n const root = token.props[0]\n file = file || root.file\n if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) {\n segments.push(root.content)\n } else if (isPropertyAccessToken(root)) {\n // Flatten paths that start with a nested path.\n segments.push(...extractPropertyAccessVariable(root).segments)\n }\n\n for (const prop of token.props.slice(1)) {\n file = file || prop.file\n if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) {\n segments.push(prop.content)\n } else if (isPropertyAccessToken(prop)) {\n segments.push(extractPropertyAccessVariable(prop))\n }\n }\n\n const [row, col] = token.getPosition()\n return new Variable(segments, {\n row,\n col,\n file\n })\n}\n\n// This is used to detect segments that can be represented with dot notation\n// when creating a string representation of VariableSegments.\nconst RE_PROPERTY = /^[\\u0080-\\uFFFFa-zA-Z_][\\u0080-\\uFFFFa-zA-Z0-9_-]*$/\n\n/**\n * Return a string representation of segments using dot notation where possible.\n * @param segments - The property names and array indices that make up a path to a variable.\n * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets.\n */\nfunction segmentsString (segments: VariableSegments, bracketedRoot = false): string {\n const buf: string[] = []\n\n const root = segments[0]\n if (isString(root)) {\n if (!bracketedRoot || root.match(RE_PROPERTY)) {\n buf.push(`${root}`)\n } else {\n buf.push(`['${root}']`)\n }\n }\n\n for (const segment of segments.slice(1)) {\n if (segment instanceof Variable) {\n buf.push(`[${segmentsString(segment.segments)}]`)\n } else if (isString(segment)) {\n if (segment.match(RE_PROPERTY)) {\n buf.push(`.${segment}`)\n } else {\n buf.push(`['${segment}']`)\n }\n } else {\n buf.push(`[${segment}]`)\n }\n }\n\n return buf.join('')\n}\n","import { FS } from './fs'\nimport { assert, LiquidAsync, toLiquidAsync } from '../util'\n\nexport interface LoaderOptions {\n fs: FS;\n extname: string;\n root: string[];\n partials: string[];\n layouts: string[];\n relativeReference: boolean;\n}\nexport enum LookupType {\n Partials = 'partials',\n Layouts = 'layouts',\n Root = 'root'\n}\nexport class Loader {\n public shouldLoadRelative: (referencedFile: string) => boolean\n private options: LoaderOptions\n private contains: LiquidAsync>\n private exists: LiquidAsync\n\n constructor (options: LoaderOptions) {\n this.options = options\n if (options.relativeReference) {\n const sep = options.fs.sep\n assert(sep, '`fs.sep` is required for relative reference')\n const prefixes = ['.' + sep, '..' + sep, './', '../']\n this.shouldLoadRelative = (referencedFile: string) => prefixes.some(prefix => referencedFile.startsWith(prefix))\n } else {\n this.shouldLoadRelative = (_referencedFile: string) => false\n }\n const fs = options.fs\n this.contains = toLiquidAsync(\n fs.contains?.bind(fs) || (async () => true),\n fs.containsSync?.bind(fs) || (() => true)\n )\n this.exists = toLiquidAsync(\n fs.exists?.bind(fs) || (async () => false),\n fs.existsSync?.bind(fs)\n )\n }\n\n public * lookup (file: string, type: LookupType, sync?: boolean, currentFile?: string): Generator {\n const dirs = this.options[type]\n for (const filepath of this.candidates(file, dirs, currentFile)) {\n let allowed = false\n for (const dir of dirs) {\n if (yield this.contains(!!sync, dir, filepath)) { allowed = true; break }\n }\n if (!allowed) continue\n if (yield this.exists(!!sync, filepath)) return filepath\n }\n throw this.lookupError(file, dirs)\n }\n\n public * candidates (file: string, dirs: string[], currentFile?: string) {\n const { fs, extname } = this.options\n\n if (this.shouldLoadRelative(file) && currentFile) {\n const referenced = fs.resolve(this.dirname(currentFile), file, extname)\n yield referenced\n }\n for (const dir of dirs) {\n const referenced = fs.resolve(dir, file, extname)\n yield referenced\n }\n\n if (fs.fallback !== undefined) {\n const filepath = fs.fallback(file)\n if (filepath !== undefined) yield filepath\n }\n }\n\n private dirname (path: string) {\n const fs = this.options.fs\n assert(fs.dirname, '`fs.dirname` is required for relative reference')\n return fs.dirname!(path)\n }\n\n private lookupError (file: string, roots: string[]) {\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n return err\n }\n}\n","import { Limiter, toPromise, assert, isTagToken, isOutputToken, ParseError, toLiquidAsync, LiquidAsync } from '../util'\nimport { Tokenizer } from './tokenizer'\nimport { ParseStream } from './parse-stream'\nimport { TopLevelToken, OutputToken } from '../tokens'\nimport { Template, Output, HTML } from '../template'\nimport { LiquidCache } from '../cache'\nimport { FS, Loader, LookupType } from '../fs'\nimport { LiquidError, LiquidErrors } from '../util/error'\nimport type { Liquid } from '../liquid'\n\nexport class Parser {\n public parseFile: (file: string, sync?: boolean, type?: LookupType, currentFile?: string) => Generator\n\n private liquid: Liquid\n private fs: FS\n private cache?: LiquidCache\n private loader: Loader\n private parseLimit: Limiter\n private readFile: LiquidAsync\n\n public constructor (liquid: Liquid) {\n this.liquid = liquid\n this.cache = this.liquid.options.cache\n this.fs = this.liquid.options.fs\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile\n this.loader = new Loader(this.liquid.options)\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit)\n this.readFile = toLiquidAsync(\n this.fs.readFile?.bind(this.fs) || (async () => { throw new Error('readFile not implemented') }),\n this.fs.readFileSync?.bind(this.fs)\n )\n }\n public parse (html: string, filepath?: string): Template[] {\n html = String(html)\n this.parseLimit.use(html.length)\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath, undefined, this.liquid.options.groupedExpressions)\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options)\n return this.parseTokens(tokens)\n }\n public parseTokens (tokens: TopLevelToken[]) {\n let token\n const templates: Template[] = []\n const errors: LiquidError[] = []\n while ((token = tokens.shift())) {\n try {\n templates.push(this.parseToken(token, tokens))\n } catch (err) {\n if (this.liquid.options.catchAllErrors) errors.push(err as LiquidError)\n else throw err\n }\n }\n if (errors.length) throw new LiquidErrors(errors)\n return templates\n }\n public parseToken (token: TopLevelToken, remainTokens: TopLevelToken[]) {\n try {\n if (isTagToken(token)) {\n const TagClass = this.liquid.tags[token.name]\n assert(TagClass, `tag \"${token.name}\" not found`)\n return new TagClass(token, remainTokens, this.liquid, this)\n }\n if (isOutputToken(token)) {\n return new Output(token as OutputToken, this.liquid)\n }\n return new HTML(token)\n } catch (e) {\n if (LiquidError.is(e)) throw e\n throw new ParseError(e as Error, token)\n }\n }\n public parseStream (tokens: TopLevelToken[]) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n private * _parseFileCached (file: string, sync?: boolean, type: LookupType = LookupType.Root, currentFile?: string): Generator {\n const cache = this.cache!\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file\n const tpls = yield cache.read(key)\n if (tpls) return tpls\n\n const task = this._parseFile(file, sync, type, currentFile)\n // sync mode: exec the task and cache the result\n // async mode: cache the task before exec\n const taskOrTpl = sync ? yield task : toPromise(task)\n cache.write(key, taskOrTpl as any)\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\n try { return yield taskOrTpl } catch (err) { cache.remove(key); throw err }\n }\n private * _parseFile (file: string, sync?: boolean, type: LookupType = LookupType.Root, currentFile?: string): Generator {\n const filepath = yield this.loader.lookup(file, type, sync, currentFile)\n return this.parse(yield this.readFile(!!sync, filepath), filepath)\n }\n}\n","export enum TokenKind {\n Number = 1,\n Literal = 2,\n Tag = 4,\n Output = 8,\n HTML = 16,\n Filter = 32,\n Hash = 64,\n PropertyAccess = 128,\n Word = 256,\n Range = 512,\n Quoted = 1024,\n Operator = 2048,\n FilteredValue = 4096,\n GroupedExpression = 8192,\n Delimited = Tag | Output\n}\n","import { RangeToken, NumberToken, QuotedToken, LiteralToken, PropertyAccessToken, OutputToken, HTMLToken, TagToken, IdentifierToken, DelimitedToken, OperatorToken, ValueToken, FilteredValueToken } from '../tokens'\nimport { TokenKind } from '../parser'\n\nexport function isDelimitedToken (val: any): val is DelimitedToken {\n return !!(getKind(val) & TokenKind.Delimited)\n}\n\nexport function isOperatorToken (val: any): val is OperatorToken {\n return getKind(val) === TokenKind.Operator\n}\n\nexport function isHTMLToken (val: any): val is HTMLToken {\n return getKind(val) === TokenKind.HTML\n}\n\nexport function isOutputToken (val: any): val is OutputToken {\n return getKind(val) === TokenKind.Output\n}\n\nexport function isTagToken (val: any): val is TagToken {\n return getKind(val) === TokenKind.Tag\n}\n\nexport function isQuotedToken (val: any): val is QuotedToken {\n return getKind(val) === TokenKind.Quoted\n}\n\nexport function isLiteralToken (val: any): val is LiteralToken {\n return getKind(val) === TokenKind.Literal\n}\n\nexport function isNumberToken (val: any): val is NumberToken {\n return getKind(val) === TokenKind.Number\n}\n\nexport function isPropertyAccessToken (val: any): val is PropertyAccessToken {\n return getKind(val) === TokenKind.PropertyAccess\n}\n\nexport function isWordToken (val: any): val is IdentifierToken {\n return getKind(val) === TokenKind.Word\n}\n\nexport function isRangeToken (val: any): val is RangeToken {\n return getKind(val) === TokenKind.Range\n}\n\nexport function isFilteredValueToken (val: any): val is FilteredValueToken {\n return getKind(val) === TokenKind.FilteredValue\n}\n\nexport function isValueToken (val: any): val is ValueToken {\n // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range | TokenKind.FilteredValue\n return (getKind(val) & 5763) > 0\n}\n\nfunction getKind (val: any) {\n return val ? val.kind : -1\n}\n","import { Drop } from '../drop/drop'\n\nexport interface ScopeObject extends Record {\n toLiquid?: () => any;\n}\n\nexport type Scope = ScopeObject | Drop\n\nexport function createScope (from?: ScopeObject): ScopeObject {\n const scope = Object.create(null)\n if (from) Object.assign(scope, from)\n return scope\n}\n","import { getPerformance } from '../util/performance'\nimport { Drop } from '../drop/drop'\nimport { __assign } from 'tslib'\nimport { NormalizedFullOptions, defaultOptions, RenderOptions } from '../liquid-options'\nimport { createScope, Scope } from './scope'\nimport { hasOwnProperty, isArray, isNil, isUndefined, isString, isFunction, isNumber, toLiquid, InternalUndefinedVariableError, toValueSync, isObject, Limiter, toValue, readArrayElement } from '../util'\n\ntype PropertyKey = string | number;\n\nexport class Context {\n /**\n * insert a Context-level empty scope,\n * for tags like `{% capture %}` `{% assign %}` to operate\n */\n private scopes: Scope[] = [createScope()]\n private registers: Record = {}\n /**\n * user passed in scope\n * `{% increment %}`, `{% decrement %}` changes this scope,\n * whereas `{% capture %}`, `{% assign %}` only hide this scope\n */\n public environments: Scope\n /**\n * global scope used as fallback for missing variables\n */\n public globals: Scope\n public sync: boolean\n public breakCalled = false\n public continueCalled = false\n /**\n * The normalized liquid options object\n */\n public opts: NormalizedFullOptions\n /**\n * Reference to the Liquid instance for filter resolution\n */\n public liquid?: any\n /**\n * Throw when accessing undefined variable?\n */\n public strictVariables: boolean;\n public ownPropertyOnly: boolean;\n public memoryLimit: Limiter;\n public renderLimit: Limiter;\n public constructor (env: object = {}, opts: NormalizedFullOptions = defaultOptions, renderOptions: RenderOptions = {}, { memoryLimit, renderLimit, liquid }: { memoryLimit?: Limiter, renderLimit?: Limiter, liquid?: any } = {}) {\n this.sync = !!renderOptions.sync\n this.opts = opts\n this.globals = renderOptions.globals ?? opts.globals\n this.environments = isObject(env) ? env : Object(env)\n this.strictVariables = renderOptions.strictVariables ?? this.opts.strictVariables\n this.ownPropertyOnly = renderOptions.ownPropertyOnly ?? opts.ownPropertyOnly\n this.memoryLimit = memoryLimit ?? new Limiter('memory alloc', renderOptions.memoryLimit ?? opts.memoryLimit)\n this.renderLimit = renderLimit ?? new Limiter('template render', getPerformance().now() + (renderOptions.renderLimit ?? opts.renderLimit))\n this.liquid = liquid\n }\n public getRegister (key: string, defaultValue: T = undefined as T): T {\n return (this.registers[key] = this.registers[key] || defaultValue)\n }\n public setRegister (key: string, value: any) {\n return (this.registers[key] = value)\n }\n public saveRegister (...keys: string[]): [string, any][] {\n return keys.map(key => [key, this.getRegister(key)])\n }\n public restoreRegister (keyValues: [string, any][]) {\n return keyValues.forEach(([key, value]) => this.setRegister(key, value))\n }\n public getAll () {\n return [this.globals, this.environments, ...this.scopes]\n .reduce((ctx, val) => __assign(ctx, val), {})\n }\n /**\n * @deprecated use `_get()` or `getSync()` instead\n */\n public get (paths: PropertyKey[]): unknown {\n return this.getSync(paths)\n }\n public getSync (paths: PropertyKey[]): unknown {\n return toValueSync(this._get(paths))\n }\n public * _get (paths: (PropertyKey | Drop)[]): IterableIterator {\n const scope = this.findScope(paths[0] as string) // first prop should always be a string\n return yield this._getFromScope(scope, paths)\n }\n /**\n * @deprecated use `_get()` instead\n */\n public getFromScope (scope: unknown, paths: PropertyKey[] | string): IterableIterator {\n return toValueSync(this._getFromScope(scope, paths))\n }\n public * _getFromScope (scope: unknown, paths: (PropertyKey | Drop)[] | string, strictVariables = this.strictVariables): IterableIterator {\n if (isString(paths)) paths = paths.split('.')\n for (let i = 0; i < paths.length; i++) {\n scope = yield this.readProperty(scope as object, paths[i])\n if (strictVariables && isUndefined(scope)) {\n throw new InternalUndefinedVariableError((paths as string[]).slice(0, i + 1).join!('.'))\n }\n }\n return scope\n }\n public push (ctx: object) {\n return this.scopes.push(ctx)\n }\n public pop () {\n return this.scopes.pop()\n }\n public bottom () {\n return this.scopes[0]\n }\n public spawn (scope = {}) {\n return new Context(scope, this.opts, {\n sync: this.sync,\n globals: this.globals,\n strictVariables: this.strictVariables,\n ownPropertyOnly: this.ownPropertyOnly\n }, {\n renderLimit: this.renderLimit,\n memoryLimit: this.memoryLimit,\n liquid: this.liquid\n })\n }\n private findScope (key: string | number) {\n for (let i = this.scopes.length - 1; i >= 0; i--) {\n const candidate = this.scopes[i]\n if (key in candidate) return candidate\n }\n if (key in this.environments) return this.environments\n return this.globals\n }\n readProperty (obj: Scope, key: (PropertyKey | Drop)) {\n obj = toLiquid(obj)\n key = toValue(key) as PropertyKey\n if (isNil(obj)) return obj\n if (isArray(obj) && isNumber(key)) return readArrayElement(obj, key, this.ownPropertyOnly)\n const value = readJSProperty(obj, key, this.ownPropertyOnly)\n if (value === undefined && obj instanceof Drop) return obj.liquidMethodMissing(key, this)\n if (isFunction(value)) return value.call(obj)\n if (key === 'size') return readSize(obj)\n else if (key === 'first') return readFirst(obj, this.ownPropertyOnly)\n else if (key === 'last') return readLast(obj, this.ownPropertyOnly)\n return value\n }\n}\n\nexport function readJSProperty (obj: Scope, key: PropertyKey, ownPropertyOnly: boolean) {\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop)) return undefined\n return obj[key]\n}\n\nfunction readFirst (obj: Scope, ownPropertyOnly: boolean) {\n if (isArray(obj)) return readArrayElement(obj, 0, ownPropertyOnly)\n return readJSProperty(obj, 'first', ownPropertyOnly)\n}\n\nfunction readLast (obj: Scope, ownPropertyOnly: boolean) {\n if (isArray(obj)) return readArrayElement(obj, -1, ownPropertyOnly)\n return readJSProperty(obj, 'last', ownPropertyOnly)\n}\n\nfunction readSize (obj: Scope) {\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined) return obj['size']\n if (isArray(obj) || isString(obj)) return obj.length\n if (typeof obj === 'object') return Object.keys(obj).length\n}\n","export enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n","import { toNumber, argumentsToNumber } from '../util/underscore'\n\nexport const abs = argumentsToNumber(Math.abs)\nexport const at_least = argumentsToNumber(Math.max)\nexport const at_most = argumentsToNumber(Math.min)\nexport const ceil = argumentsToNumber(Math.ceil)\nexport const divided_by = argumentsToNumber((dividend: number, divisor: number, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor)\nexport const floor = argumentsToNumber(Math.floor)\nexport const minus = argumentsToNumber((v: number, arg: number) => v - arg)\nexport const plus = argumentsToNumber((lhs: number, rhs: number) => lhs + rhs)\nexport const modulo = argumentsToNumber((v: number, arg: number) => ((v % arg) + arg) % arg)\nexport const times = argumentsToNumber((v: number, arg: number) => v * arg)\n\nexport function round (v: number, arg = 0) {\n v = toNumber(v)\n arg = toNumber(arg)\n const amp = Math.pow(10, arg)\n const scaled = (v * amp) * (1 + Number.EPSILON)\n return Math.round(scaled) / amp\n}\n","import { stringify } from '../util/underscore'\n\nexport const url_decode = (x: string) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ')\nexport const url_encode = (x: string) => encodeURIComponent(stringify(x)).replace(/%20/g, '+')\nexport const cgi_escape = (x: string) => encodeURIComponent(stringify(x))\n .replace(/%20/g, '+')\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\nexport const uri_escape = (x: string) => encodeURI(stringify(x))\n .replace(/%5B/g, '[')\n .replace(/%5D/g, ']')\n\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug\nconst rSlugifyReplacers = {\n 'raw': /\\s+/g,\n 'default': rSlugifyDefault,\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\n 'ascii': /[^A-Za-z0-9]+/g,\n 'latin': rSlugifyDefault,\n 'none': null\n}\n\nexport function slugify (str: string, mode: keyof typeof rSlugifyReplacers = 'default', cased = false): string {\n str = stringify(str)\n\n const replacer = rSlugifyReplacers[mode]\n if (replacer) {\n if (mode === 'latin') str = removeAccents(str)\n str = str.replace(replacer, '-').replace(/^-|-$/g, '')\n }\n\n return cased ? str : str.toLowerCase()\n}\n\nfunction removeAccents (str: string): string {\n return str.replace(/[àáâãäå]/g, 'a')\n .replace(/[æ]/g, 'ae')\n .replace(/[ç]/g, 'c')\n .replace(/[èéêë]/g, 'e')\n .replace(/[ìíîï]/g, 'i')\n .replace(/[ð]/g, 'd')\n .replace(/[ñ]/g, 'n')\n .replace(/[òóôõöø]/g, 'o')\n .replace(/[ùúûü]/g, 'u')\n .replace(/[ýÿ]/g, 'y')\n .replace(/[ß]/g, 'ss')\n .replace(/[œ]/g, 'oe')\n .replace(/[þ]/g, 'th')\n .replace(/[ẞ]/g, 'SS')\n .replace(/[Œ]/g, 'OE')\n .replace(/[Þ]/g, 'TH')\n}\n","import { toArray, argumentsToValue, toValue, stringify, caseInsensitiveCompare, orderedCompare, isArray, isNil, isArrayLike, readArrayElement, toEnumerable } from '../util'\nimport { arrayIncludes, equals, evalToken, isTruthy } from '../render'\nimport { Value, FilterImpl } from '../template'\nimport { Tokenizer } from '../parser'\nimport type { Scope } from '../context'\nimport { EmptyDrop } from '../drop'\n\nexport const join = argumentsToValue(function (this: FilterImpl, v: any[], arg: string) {\n const array = toArray(v)\n const sep = isNil(arg) ? ' ' : stringify(arg)\n let outputSize = sep.length * Math.max(array.length - 1, 0)\n for (let i = 0; i < array.length; i++) outputSize += String(array[i]).length\n this.context.memoryLimit.use(outputSize)\n return Array.prototype.join.call(array, sep)\n})\nexport const last = argumentsToValue(function (this: FilterImpl, v: any) {\n return isArrayLike(v) ? readArrayElement(v, -1, this.context.ownPropertyOnly) : ''\n})\nexport const first = argumentsToValue(function (this: FilterImpl, v: any) {\n return isArrayLike(v) ? readArrayElement(v, 0, this.context.ownPropertyOnly) : ''\n})\nexport const reverse = argumentsToValue(function (this: FilterImpl, v: any[]) {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n return [...array].reverse()\n})\n\nfunction * sortBy (this: FilterImpl, arr: T[], property: string | undefined, comparator: (a: unknown, b: unknown) => number): IterableIterator {\n const values: [T, unknown][] = []\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n for (const item of array) {\n values.push([\n item,\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\n ])\n }\n return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0])\n}\n\nexport function * sort (this: FilterImpl, arr: T[], property?: string): IterableIterator {\n return yield * sortBy.call(this, arr, property, orderedCompare)\n}\n\nexport function * sort_natural (this: FilterImpl, arr: T[], property?: string): IterableIterator {\n return yield * sortBy.call(this, arr, property, caseInsensitiveCompare)\n}\n\nexport const size = (v: string | any[]) => (v && v.length) || 0\n\nexport function * map (this: FilterImpl, arr: Scope[], property: string): IterableIterator {\n const results = []\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n for (const item of array) {\n results.push(yield this.context._getFromScope(item, stringify(property), false))\n }\n return results\n}\n\nexport function * sum (this: FilterImpl, arr: Scope[], property?: string): IterableIterator {\n let sum = 0\n const array = toArray(arr)\n for (const item of array) {\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item)\n sum += Number.isNaN(data) ? 0 : data\n }\n return sum\n}\n\nexport function compact (this: FilterImpl, arr: T[]) {\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n return Array.prototype.filter.call(array, x => !isNil(toValue(x)))\n}\n\nexport function concat (this: FilterImpl, v: T1[], arg: T2[] = []): (T1 | T2)[] {\n const lhs = toArray(v)\n const rhs = toArray(arg)\n this.context.memoryLimit.use(lhs.length + rhs.length)\n return Array.prototype.concat.call(lhs, rhs)\n}\n\nexport function push (this: FilterImpl, v: T[], arg: T): T[] {\n return concat.call(this, v, [arg]) as T[]\n}\n\nexport function unshift (this: FilterImpl, v: T[], arg: T): T[] {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n const clone = [...array]\n clone.unshift(arg)\n return clone\n}\n\nexport function pop (this: FilterImpl, v: T[]): T[] {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n const clone = [...array]\n clone.pop()\n return clone\n}\n\nexport function shift (this: FilterImpl, v: T[]): T[] {\n const array = toArray(v)\n this.context.memoryLimit.use(array.length)\n const clone = [...array]\n clone.shift()\n return clone\n}\n\nexport function slice (this: FilterImpl, v: T[] | string, begin: number, length = 1): T[] | string {\n v = toValue(v)\n if (isNil(v)) return []\n if (!isArray(v)) v = stringify(v)\n begin = begin < 0 ? v.length + begin : begin\n if (begin < 0 || length < 0) return isArray(v) ? [] : ''\n this.context.memoryLimit.use(length)\n return isArray(v)\n ? Array.prototype.slice.call(v, begin, begin + length)\n : String.prototype.slice.call(v, begin, begin + length)\n}\n\nfunction expectedMatcher (this: FilterImpl, expected: any): (v: any) => boolean {\n if (this.context.opts.jekyllWhere) {\n return (v: any) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected))\n } else if (expected === undefined) {\n return (v: any) => isTruthy(v, this.context)\n } else {\n return (v: any) => equals(v, expected)\n }\n}\n\nfunction * filter (this: FilterImpl, include: boolean, arr: T[], property: string, expected: any): IterableIterator {\n const values: unknown[] = []\n arr = toArray(arr)\n this.context.memoryLimit.use(arr.length)\n const token = new Tokenizer(stringify(property)).readScopeValue()\n for (const item of arr) {\n values.push(yield evalToken(token, this.context.spawn(item)))\n }\n const matcher = expectedMatcher.call(this, expected)\n return Array.prototype.filter.call(arr, (_, i) => matcher(values[i]) === include)\n}\n\nfunction * filter_exp (this: FilterImpl, include: boolean, arr: T[], itemName: string, exp: string): IterableIterator {\n const filtered: unknown[] = []\n const keyTemplate = new Value(stringify(exp), this.liquid)\n const array = toArray(arr)\n this.context.memoryLimit.use(array.length)\n for (const item of array) {\n this.context.push({ [itemName]: item })\n const value = yield keyTemplate.value(this.context)\n this.context.pop()\n if (value === include) filtered.push(item)\n }\n return filtered\n}\n\nexport function * where (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n return yield * filter.call(this, true, arr, property, expected)\n}\n\nexport function * reject (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n return yield * filter.call(this, false, arr, property, expected)\n}\n\nexport function * where_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n return yield * filter_exp.call(this, true, arr, itemName, exp)\n}\n\nexport function * reject_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n return yield * filter_exp.call(this, false, arr, itemName, exp)\n}\n\nexport function * group_by (this: FilterImpl, arr: T[], property: string): IterableIterator {\n const map = new Map()\n arr = toEnumerable(arr)\n const token = new Tokenizer(stringify(property)).readScopeValue()\n this.context.memoryLimit.use(arr.length)\n for (const item of arr) {\n const key = yield evalToken(token, this.context.spawn(item))\n if (!map.has(key)) map.set(key, [])\n map.get(key).push(item)\n }\n return [...map.entries()].map(([name, items]) => ({ name, items }))\n}\n\nexport function * group_by_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const map = new Map()\n const keyTemplate = new Value(stringify(exp), this.liquid)\n arr = toEnumerable(arr)\n this.context.memoryLimit.use(arr.length)\n for (const item of arr) {\n this.context.push({ [itemName]: item })\n const key = yield keyTemplate.value(this.context)\n this.context.pop()\n if (!map.has(key)) map.set(key, [])\n map.get(key).push(item)\n }\n return [...map.entries()].map(([name, items]) => ({ name, items }))\n}\n\nfunction * search (this: FilterImpl, arr: T[], property: string, expected: string): IterableIterator {\n const token = new Tokenizer(stringify(property)).readScopeValue()\n const array = toArray(arr)\n const matcher = expectedMatcher.call(this, expected)\n for (let index = 0; index < array.length; index++) {\n const value = yield evalToken(token, this.context.spawn(array[index]))\n if (matcher(value)) return [index, array[index]]\n }\n}\n\nfunction * search_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const predicate = new Value(stringify(exp), this.liquid)\n const array = toArray(arr)\n for (let index = 0; index < array.length; index++) {\n this.context.push({ [itemName]: array[index] })\n const value = yield predicate.value(this.context)\n this.context.pop()\n if (value) return [index, array[index]]\n }\n}\n\nexport function * has (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n const result = yield * search.call(this, arr, property, expected)\n return !!result\n}\n\nexport function * has_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const result = yield * search_exp.call(this, arr, itemName, exp)\n return !!result\n}\n\nexport function * find_index (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n const result = yield * search.call(this, arr, property, expected)\n return result ? result[0] : undefined\n}\n\nexport function * find_index_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const result = yield * search_exp.call(this, arr, itemName, exp)\n return result ? result[0] : undefined\n}\n\nexport function * find (this: FilterImpl, arr: T[], property: string, expected?: any): IterableIterator {\n const result = yield * search.call(this, arr, property, expected)\n return result ? result[1] : undefined\n}\n\nexport function * find_exp (this: FilterImpl, arr: T[], itemName: string, exp: string): IterableIterator {\n const result = yield * search_exp.call(this, arr, itemName, exp)\n return result ? result[1] : undefined\n}\n\nexport function uniq (this: FilterImpl, arr: T[]): T[] {\n arr = toArray(arr)\n this.context.memoryLimit.use(arr.length)\n return [...new Set(arr)]\n}\n\nexport function sample (this: FilterImpl, v: T[] | string, count = 1): T | string | (T | string)[] {\n v = toValue(v)\n if (isNil(v)) return []\n if (!isArray(v)) v = stringify(v)\n this.context.memoryLimit.use(v.length)\n const shuffled = [...v].sort(() => Math.random() - 0.5)\n if (count === 1) return shuffled[0]\n return shuffled.slice(0, count)\n}\n","import { toValue, stringify, isString, isNumber, LiquidDate, strftime, isNil } from '../util'\nimport { FilterImpl } from '../template'\nimport { NormalizedFullOptions } from '../liquid-options'\n\nexport function date (this: FilterImpl, v: string | Date, format?: string, timezoneOffset?: number | string) {\n const size = ((v as string)?.length ?? 0) + ((timezoneOffset as string)?.length ?? 0)\n this.context.memoryLimit.use(size)\n const date = parseDate(v, this.context.opts, timezoneOffset)\n if (!date) return v\n format = toValue(format)\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format)\n this.context.memoryLimit.use(format.length)\n return strftime(date, format, this.context.memoryLimit)\n}\n\nexport function date_to_xmlschema (this: FilterImpl, v: string | Date) {\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z')\n}\n\nexport function date_to_rfc822 (this: FilterImpl, v: string | Date) {\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z')\n}\n\nexport function date_to_string (this: FilterImpl, v: string | Date, type?: string, style?: string) {\n return stringify_date.call(this, v, '%b', type, style)\n}\n\nexport function date_to_long_string (this: FilterImpl, v: string | Date, type?: string, style?: string) {\n return stringify_date.call(this, v, '%B', type, style)\n}\n\nfunction stringify_date (this: FilterImpl, v: string | Date, month_type: string, type?: string, style?: string) {\n const date = parseDate(v, this.context.opts)\n if (!date) return v\n const ml = this.context.memoryLimit\n if (type === 'ordinal') {\n const d = date.getDate()\n return style === 'US'\n ? strftime(date, `${month_type} ${d}%q, %Y`, ml)\n : strftime(date, `${d}%q ${month_type} %Y`, ml)\n }\n return strftime(date, `%d ${month_type} %Y`, ml)\n}\n\nfunction parseDate (v: string | Date, opts: NormalizedFullOptions, timezoneOffset?: number | string): LiquidDate | undefined {\n let date: LiquidDate | undefined\n const defaultTimezoneOffset = timezoneOffset ?? opts.timezoneOffset\n const locale = opts.locale\n v = toValue(v)\n if (isNil(v)) {\n return undefined\n } else if (v === 'now' || v === 'today') {\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset)\n } else if (isNumber(v)) {\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset)\n } else if (isString(v)) {\n if (/^\\d+$/.test(v)) {\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset)\n } else if (opts.preserveTimezones && timezoneOffset === undefined) {\n date = LiquidDate.createDateFixedToTimezone(v, locale)\n } else {\n date = new LiquidDate(v, locale, defaultTimezoneOffset)\n }\n } else {\n date = new LiquidDate(v, locale, defaultTimezoneOffset)\n }\n return date.valid() ? date : undefined\n}\n","/**\n * String related filters\n *\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\n */\n\n// Han (Chinese) characters: \\u4E00-\\u9FFF\n// Additional Han characters: \\uF900-\\uFAFF (CJK Compatibility Ideographs)\n// Additional Han characters: \\u3400-\\u4DBF (CJK Unified Ideographs Extension A)\n// Katakana (Japanese): \\u30A0-\\u30FF\n// Hiragana (Japanese): \\u3040-\\u309F\n// Hangul (Korean): \\uAC00-\\uD7AF\nimport { FilterImpl } from '../template'\nimport { assert, stringify } from '../util'\n\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu\n\n// Word boundary followed by word characters (for detecting words)\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu\n\nexport function append (this: FilterImpl, v: string, arg: string) {\n assert(arguments.length === 2, 'append expect 2 arguments')\n const lhs = stringify(v)\n const rhs = stringify(arg)\n this.context.memoryLimit.use(lhs.length + rhs.length)\n return lhs + rhs\n}\n\nexport function prepend (this: FilterImpl, v: string, arg: string) {\n assert(arguments.length === 2, 'prepend expect 2 arguments')\n const lhs = stringify(v)\n const rhs = stringify(arg)\n this.context.memoryLimit.use(lhs.length + rhs.length)\n return rhs + lhs\n}\n\nexport function lstrip (this: FilterImpl, v: string, chars?: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n if (chars) {\n chars = stringify(chars)\n this.context.memoryLimit.use(chars.length)\n for (let i = 0, set = new Set(chars); i < str.length; i++) {\n if (!set.has(str[i])) return str.slice(i)\n }\n return ''\n }\n return str.trimStart()\n}\n\nexport function downcase (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.toLowerCase()\n}\n\nexport function upcase (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return stringify(str).toUpperCase()\n}\n\nexport function remove (this: FilterImpl, v: string, arg: string) {\n const str = stringify(v)\n arg = stringify(arg)\n this.context.memoryLimit.use(str.length + arg.length)\n return str.split(arg).join('')\n}\n\nexport function remove_first (this: FilterImpl, v: string, l: string) {\n const str = stringify(v)\n l = stringify(l)\n this.context.memoryLimit.use(str.length + l.length)\n return str.replace(l, '')\n}\n\nexport function remove_last (this: FilterImpl, v: string, l: string) {\n const str = stringify(v)\n const pattern = stringify(l)\n this.context.memoryLimit.use(str.length + pattern.length)\n const index = str.lastIndexOf(pattern)\n if (index === -1) return str\n return str.substring(0, index) + str.substring(index + pattern.length)\n}\n\nexport function rstrip (this: FilterImpl, str: string, chars?: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n if (chars) {\n chars = stringify(chars)\n this.context.memoryLimit.use(chars.length)\n for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) {\n if (!set.has(str[i])) return str.slice(0, i + 1)\n }\n return ''\n }\n return str.trimEnd()\n}\n\nexport function split (this: FilterImpl, v: string, arg: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n const arr = str.split(stringify(arg))\n // align to ruby split, which is the behavior of shopify/liquid\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\n while (arr.length && arr[arr.length - 1] === '') arr.pop()\n return arr\n}\n\nexport function strip (this: FilterImpl, v: string, chars?: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n if (chars) {\n const set = new Set(stringify(chars))\n this.context.memoryLimit.use(set.size)\n let i = 0\n let j = str.length - 1\n while (set.has(str[i])) i++\n while (j >= i && set.has(str[j])) j--\n return str.slice(i, j + 1)\n }\n return str.trim()\n}\n\nexport function strip_newlines (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.replace(/\\r?\\n/gm, '')\n}\n\nexport function capitalize (this: FilterImpl, str: string) {\n str = stringify(str)\n this.context.memoryLimit.use(str.length)\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n\nexport function replace (this: FilterImpl, v: string, pattern: string, replacement: string) {\n const str = stringify(v)\n pattern = stringify(pattern)\n replacement = stringify(replacement)\n const parts = str.split(pattern)\n const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length)\n this.context.memoryLimit.use(outputSize)\n return parts.join(replacement)\n}\n\nexport function replace_first (this: FilterImpl, v: string, arg1: string, arg2: string) {\n const str = stringify(v)\n arg1 = stringify(arg1)\n arg2 = stringify(arg2)\n this.context.memoryLimit.use(str.length + arg1.length + arg2.length)\n return str.replace(arg1, () => arg2)\n}\n\nexport function replace_last (this: FilterImpl, v: string, arg1: string, arg2: string) {\n const str = stringify(v)\n const pattern = stringify(arg1)\n const replacement = stringify(arg2)\n this.context.memoryLimit.use(str.length + pattern.length + replacement.length)\n const index = str.lastIndexOf(pattern)\n if (index === -1) return str\n return str.substring(0, index) + replacement + str.substring(index + pattern.length)\n}\n\nexport function truncate (this: FilterImpl, v: string, l = 50, o = '...') {\n const str = stringify(v)\n o = stringify(o)\n this.context.memoryLimit.use(str.length + o.length)\n if (str.length <= l) return v\n return str.substring(0, l - o.length) + o\n}\n\nexport function truncatewords (this: FilterImpl, v: string, words = 15, o = '...') {\n const str = stringify(v)\n o = stringify(o)\n this.context.memoryLimit.use(str.length + o.length)\n const arr = str.split(/\\s+/)\n if (words <= 0) words = 1\n let ret = arr.slice(0, words).join(' ')\n if (arr.length >= words) ret += o\n return ret\n}\n\nexport function normalize_whitespace (this: FilterImpl, v: string) {\n const str = stringify(v)\n this.context.memoryLimit.use(str.length)\n return str.replace(/\\s+/g, ' ')\n}\n\nexport function number_of_words (this: FilterImpl, input: string, mode?: 'cjk' | 'auto') {\n const str = stringify(input)\n this.context.memoryLimit.use(str.length)\n input = str.trim()\n if (!input) return 0\n switch (mode) {\n case 'cjk':\n // Count CJK characters and words\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length\n case 'auto':\n // Count CJK characters, if none, count words\n return rCJKWord.test(input)\n ? input.match(rCJKWord)!.length + (input.match(rNonCJKWord) || []).length\n : input.split(/\\s+/).length\n default:\n // Count words only\n return input.split(/\\s+/).length\n }\n}\n\nexport function array_to_sentence_string (this: FilterImpl, array: unknown[], connector = 'and') {\n connector = stringify(connector)\n let outputSize = connector.length + array.length * 2\n for (let i = 0; i < array.length; i++) outputSize += stringify(array[i]).length\n this.context.memoryLimit.use(outputSize)\n switch (array.length) {\n case 0:\n return ''\n case 1:\n return array[0]\n case 2:\n return `${array[0]} ${connector} ${array[1]}`\n default:\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`\n }\n}\n","\nexport function base64Encode (str: string): string {\n return btoa(String.fromCharCode(...new TextEncoder().encode(str)))\n}\n\nexport function base64Decode (str: string): string {\n return new TextDecoder().decode(\n Uint8Array.from(atob(str), c => c.charCodeAt(0))\n )\n}\n","/**\n * Base64 related filters\n *\n * Implements base64_encode and base64_decode filters for Shopify compatibility\n */\n\nimport { FilterImpl } from '../template'\nimport { stringify } from '../util'\nimport { base64Encode, base64Decode } from './base64-impl'\n\nexport function base64_encode (this: FilterImpl, value: string | Buffer): string {\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n this.context.memoryLimit.use(value.byteLength)\n return value.toString('base64')\n }\n const str = stringify(value)\n this.context.memoryLimit.use(str.length)\n return base64Encode(str)\n}\n\nexport function base64_decode (this: FilterImpl, value: string): string {\n const str = stringify(value)\n this.context.memoryLimit.use(str.length)\n return base64Decode(str)\n}\n","function bufferToHex (buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer)\n let hex = ''\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0')\n }\n return hex\n}\n\nexport async function sha256 (str: string): Promise {\n const data = new TextEncoder().encode(str)\n const digest = await crypto.subtle.digest('SHA-256', data)\n return bufferToHex(digest)\n}\n\nexport async function hmacSha256 (str: string, key: string): Promise {\n const encoder = new TextEncoder()\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(key),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n )\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(str))\n return bufferToHex(signature)\n}\n","/**\n * Crypto related filters\n *\n * Implements sha256 and hmac_sha256 filters for Shopify compatibility\n */\n\nimport { FilterImpl } from '../template'\nimport { stringify } from '../util'\nimport { sha256 as sha256Impl, hmacSha256 as hmacSha256Impl } from './crypto-impl'\n\nexport function sha256 (this: FilterImpl, value: unknown): string | Promise {\n const str = stringify(value)\n this.context.memoryLimit.use(str.length)\n return sha256Impl(str)\n}\n\nexport function hmac_sha256 (this: FilterImpl, value: unknown, key: unknown): string | Promise {\n const str = stringify(value)\n const keyStr = stringify(key)\n this.context.memoryLimit.use(str.length + keyStr.length)\n return hmacSha256Impl(str, keyStr)\n}\n","import * as htmlFilters from './html'\nimport * as mathFilters from './math'\nimport * as urlFilters from './url'\nimport * as arrayFilters from './array'\nimport * as dateFilters from './date'\nimport * as stringFilters from './string'\nimport * as base64Filters from './base64'\nimport * as cryptoFilters from './crypto'\nimport misc from './misc'\nimport { FilterImplOptions } from '../template'\n\nexport const filters: Record = {\n ...htmlFilters,\n ...mathFilters,\n ...urlFilters,\n ...arrayFilters,\n ...dateFilters,\n ...stringFilters,\n ...base64Filters,\n ...cryptoFilters,\n ...misc\n}\n","import { Value, Liquid, TopLevelToken, TagToken, Context, Tag } from '..'\nimport { Arguments } from '../template'\nimport { IdentifierToken } from '../tokens'\n\nexport default class extends Tag {\n private key: string\n private value: Value\n private identifier: IdentifierToken\n\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.identifier = this.tokenizer.readIdentifier()\n this.key = this.identifier.content\n this.tokenizer.assert(this.key, 'expected variable name')\n\n this.tokenizer.skipBlank()\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"')\n\n this.tokenizer.advance()\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid)\n }\n * render (ctx: Context): Generator {\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf)\n }\n\n public * arguments (): Arguments {\n yield this.value\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { Hash, ValueToken, Liquid, Tag, evalToken, Emitter, TagToken, TopLevelToken, Context, Template, ParseStream, FilteredValueToken } from '..'\nimport { assertEmpty, isValueToken, toEnumerable } from '../util'\nimport { createScope } from '../context/scope'\nimport { ForloopDrop } from '../drop/forloop-drop'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\n\nconst MODIFIERS = ['offset', 'limit', 'reversed']\n\ntype valueOf = T[keyof T]\n\nexport default class extends Tag {\n variable: string\n collection: ValueToken | FilteredValueToken\n hash: Hash\n templates: Template[]\n elseTemplates: Template[]\n\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const variable = this.tokenizer.readIdentifier()\n const inStr = this.tokenizer.readIdentifier()\n const collection = this.tokenizer.readValue()\n if (!variable.size() || inStr.content !== 'in' || !collection) {\n throw new Error(`illegal tag: ${token.getText()}`)\n }\n\n this.variable = variable.content\n this.collection = collection\n this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator)\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates })\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop() })\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`) })\n\n stream.start()\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n let collection = toEnumerable(yield evalToken(this.collection, ctx))\n\n if (!collection.length) {\n yield r.renderTemplates(this.elseTemplates, ctx, emitter)\n return\n }\n\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText()\n ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) }))\n const hash = (yield this.hash.render(ctx)) as Record\n ctx.pop()\n\n const modifiers = this.liquid.options.orderedFilterParameters\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\n : MODIFIERS.filter(x => hash[x] !== undefined)\n\n collection = modifiers.reduce((collection, modifier: valueOf) => {\n if (modifier === 'offset') return offset(collection, hash['offset'])\n if (modifier === 'limit') return limit(collection, hash['limit'])\n return reversed(collection)\n }, collection)\n\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length)\n const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) })\n ctx.push(scope)\n for (const item of collection) {\n scope[this.variable] = item\n ctx.continueCalled = ctx.breakCalled = false\n yield r.renderTemplates(this.templates, ctx, emitter)\n if (ctx.breakCalled) break\n scope.forloop.next()\n }\n ctx.continueCalled = ctx.breakCalled = false\n ctx.pop()\n }\n\n public * children (): Generator {\n const templates = this.templates.slice()\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates)\n }\n return templates\n }\n\n public * arguments (): Arguments {\n yield this.collection\n\n for (const v of Object.values(this.hash.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n }\n\n public blockScope (): Iterable {\n return [this.variable, 'forloop']\n }\n}\n\nfunction reversed (arr: Array) {\n return [...arr].reverse()\n}\n\nfunction offset (arr: Array, count: number) {\n return arr.slice(count)\n}\n\nfunction limit (arr: Array, count: number) {\n return arr.slice(0, count)\n}\n","import { Liquid, Tag, Template, Context, TagToken, TopLevelToken } from '..'\nimport { Parser } from '../parser'\nimport { IdentifierToken, QuotedToken } from '../tokens'\nimport { isTagToken } from '../util'\n\nexport default class extends Tag {\n identifier: IdentifierToken | QuotedToken\n variable: string\n templates: Template[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n this.identifier = this.readVariable()\n this.variable = this.identifier.content\n\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endcapture') return\n this.templates.push(parser.parseToken(token, remainTokens))\n }\n throw new Error(`tag ${tagToken.getText()} not closed`)\n }\n\n private readVariable (): IdentifierToken | QuotedToken {\n let ident: IdentifierToken | QuotedToken | undefined = this.tokenizer.readIdentifier()\n if (ident.content) return ident\n ident = this.tokenizer.readQuoted()\n if (ident) return ident\n throw this.tokenizer.error('invalid capture name')\n }\n\n * render (ctx: Context): Generator {\n const r = this.liquid.renderer\n const html = yield r.renderTemplates(this.templates, ctx)\n ctx.bottom()[this.variable] = html\n }\n\n public * children (): Generator {\n return this.templates\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { ValueToken, Liquid, toValue, evalToken, Value, Emitter, TagToken, TopLevelToken, Context, Template, Tag, ParseStream, FilteredValueToken } from '..'\nimport { Parser } from '../parser'\nimport { equals } from '../render'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n value: Value\n branches: { values: (ValueToken | FilteredValueToken)[], templates: Template[] }[] = []\n elseTemplates: Template[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid)\n this.elseTemplates = []\n\n let p: Template[] = []\n let elseCount = 0\n const stream: ParseStream = parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n if (elseCount > 0) {\n return\n }\n\n p = []\n\n const values: (ValueToken | FilteredValueToken)[] = []\n while (!token.tokenizer.end()) {\n values.push(token.tokenizer.readValueOrThrow())\n token.tokenizer.skipBlank()\n if (token.tokenizer.peek() === ',') {\n token.tokenizer.readTo(',')\n } else {\n token.tokenizer.readTo('or')\n }\n }\n this.branches.push({\n values,\n templates: p\n })\n })\n .on('tag:else', () => {\n elseCount++\n p = this.elseTemplates\n })\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: Template) => {\n if (p !== this.elseTemplates || elseCount === 1) {\n p.push(tpl)\n }\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.getText()} not closed`)\n })\n\n stream.start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf))\n let branchHit = false\n for (const branch of this.branches) {\n for (const valueToken of branch.values) {\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf)\n if (equals(target, value)) {\n yield r.renderTemplates(branch.templates, ctx, emitter)\n branchHit = true\n break\n }\n }\n }\n if (!branchHit) {\n yield r.renderTemplates(this.elseTemplates, ctx, emitter)\n }\n }\n\n public * arguments (): Arguments {\n yield this.value\n yield * this.branches.flatMap(b => b.values)\n }\n\n public * children (): Generator {\n const templates = this.branches.flatMap(b => b.templates)\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates)\n }\n return templates\n }\n}\n","import { Liquid, TopLevelToken, TagToken, Tag } from '..'\nimport { isTagToken } from '../util'\n\nexport default class extends Tag {\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(tagToken, remainTokens, liquid)\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endcomment') return\n }\n throw new Error(`tag ${tagToken.getText()} not closed`)\n }\n render () {}\n}\n","import { __assign } from 'tslib'\nimport { ForloopDrop } from '../drop'\nimport { isString, isValueToken, toEnumerable } from '../util'\nimport { TopLevelToken, assert, Liquid, Token, ValueToken, Template, evalQuotedToken, TypeGuards, Tokenizer, evalToken, Hash, Emitter, TagToken, Context, Tag } from '..'\nimport { Parser } from '../parser'\nimport { Argument, Arguments, PartialScope } from '../template'\n\nexport type ParsedFileName = Template[] | Token | string | undefined\n\ntype RenderBinding = { value: ValueToken; alias?: string }\n\nexport default class extends Tag {\n private file: ParsedFileName\n private currentFile?: string\n private hash: Hash\n private with?: RenderBinding\n private forBinding?: RenderBinding\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const tokenizer = this.tokenizer\n this.file = parseFilePath(tokenizer, this.liquid, parser)\n this.currentFile = token.file\n while (!tokenizer.end()) {\n tokenizer.skipBlank()\n const begin = tokenizer.p\n const keyword = tokenizer.readIdentifier()\n if (keyword.content === 'with' || keyword.content === 'for') {\n tokenizer.skipBlank()\n // can be normal key/value pair, like \"with: true\"\n if (tokenizer.peek() !== ':') {\n const value = tokenizer.readValue()\n // can be normal key, like \"with,\"\n if (value) {\n const beforeAs = tokenizer.p\n const asStr = tokenizer.readIdentifier()\n let alias\n if (asStr.content === 'as') alias = tokenizer.readIdentifier()\n else tokenizer.p = beforeAs\n\n const binding: RenderBinding = { value, alias: alias && alias.content }\n if (keyword.content === 'with') this.with = binding\n else this.forBinding = binding\n tokenizer.skipBlank()\n if (tokenizer.peek() === ',') tokenizer.advance()\n continue // matched!\n }\n }\n }\n /**\n * restore cursor if with/for not matched\n */\n tokenizer.p = begin\n break\n }\n this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const { liquid, hash } = this\n const filepath = (yield renderFilePath(this.file, ctx, liquid)) as string\n assert(filepath, () => `illegal file path \"${filepath}\"`)\n\n const childCtx = ctx.spawn()\n const scope = childCtx.bottom()\n __assign(scope, yield hash.render(ctx))\n if (this.with) {\n const { value, alias } = this.with\n scope[alias || filepath] = yield evalToken(value, ctx)\n }\n\n if (this.forBinding) {\n const { value, alias } = this.forBinding\n const collection = toEnumerable(yield evalToken(value, ctx))\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias as string)\n for (const item of collection) {\n scope[alias as string] = item\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)) as Template[]\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter)\n scope['forloop'].next()\n }\n } else {\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)) as Template[]\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter)\n }\n }\n\n public * children (partials: boolean, sync: boolean): Generator {\n if (partials && isString(this.file)) {\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)) as Template[]\n }\n return []\n }\n\n public partialScope (): PartialScope | undefined {\n if (isString(this.file)) {\n const names: Array = Object.keys(this.hash.hash)\n\n if (this.with) {\n const { value, alias } = this.with\n if (isString(alias)) {\n names.push([alias, value])\n } else if (isString(this.file)) {\n names.push([this.file, value])\n }\n }\n\n if (this.forBinding) {\n const { value, alias } = this.forBinding\n if (isString(alias)) {\n names.push([alias, value])\n } else if (isString(this.file)) {\n names.push([this.file, value])\n }\n }\n\n return { name: this.file, isolated: true, scope: names }\n }\n }\n\n public * arguments (): Arguments {\n for (const v of Object.values(this.hash.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n\n if (this.with) {\n const { value } = this.with\n if (isValueToken(value)) {\n yield value\n }\n }\n\n if (this.forBinding) {\n const { value } = this.forBinding\n if (isValueToken(value)) {\n yield value\n }\n }\n }\n}\n\n/**\n * @return null for \"none\",\n * @return Template[] for quoted with tags and/or filters\n * @return Token for expression (not quoted)\n * @throws TypeError if cannot read next token\n */\nexport function parseFilePath (tokenizer: Tokenizer, liquid: Liquid, parser: Parser): ParsedFileName {\n if (liquid.options.dynamicPartials) {\n const file = tokenizer.readValue()\n tokenizer.assert(file, 'illegal file path')\n if (file!.getText() === 'none') return\n if (TypeGuards.isQuotedToken(file)) {\n // for filenames like \"files/{{file}}\", eval as liquid template\n const templates = parser.parse(evalQuotedToken(file))\n return optimize(templates)\n }\n return file\n }\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)]\n const templates = optimize(parser.parseTokens(tokens))\n return templates === 'none' ? undefined : templates\n}\n\nfunction optimize (templates: Template[]): string | Template[] {\n // for filenames like \"files/file.liquid\", extract the string directly\n if (templates.length === 1 && TypeGuards.isHTMLToken(templates[0].token)) return templates[0].token.getContent()\n return templates\n}\n\nexport function * renderFilePath (file: ParsedFileName, ctx: Context, liquid: Liquid): IterableIterator {\n if (typeof file === 'string') return file\n if (Array.isArray(file)) return liquid.renderer.renderTemplates(file, ctx)\n return yield evalToken(file, ctx)\n}\n","import { Template, ValueToken, TopLevelToken, Liquid, Tag, assert, evalToken, Hash, Emitter, TagToken, Context } from '..'\nimport { BlockMode, createScope, Scope } from '../context'\nimport { Parser } from '../parser'\nimport { Argument, Arguments, PartialScope } from '../template'\nimport { isString, isValueToken } from '../util'\nimport { parseFilePath, renderFilePath, ParsedFileName } from './render'\n\nexport default class extends Tag {\n private file: ParsedFileName\n private currentFile?: string\n private withVar?: ValueToken\n private hash: Hash\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const { tokenizer } = token\n this.file = parseFilePath(tokenizer, this.liquid, parser)\n this.currentFile = token.file\n\n const begin = tokenizer.p\n const withStr = tokenizer.readIdentifier()\n if (withStr.content === 'with') {\n tokenizer.skipBlank()\n if (tokenizer.peek() !== ':') {\n this.withVar = tokenizer.readValue()\n } else tokenizer.p = begin\n } else tokenizer.p = begin\n\n this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const { liquid, hash, withVar } = this\n const { renderer } = liquid\n const filepath = (yield renderFilePath(this.file, ctx, liquid)) as string\n assert(filepath, () => `illegal file path \"${filepath}\"`)\n\n const saved = ctx.saveRegister('blocks', 'blockMode')\n ctx.setRegister('blocks', {})\n ctx.setRegister('blockMode', BlockMode.OUTPUT)\n const scope = createScope((yield hash.render(ctx)) as Scope)\n if (withVar) scope[filepath] = yield evalToken(withVar, ctx)\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile)) as Template[]\n ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope)\n yield renderer.renderTemplates(templates, ctx, emitter)\n ctx.pop()\n ctx.restoreRegister(saved)\n }\n\n public * children (partials: boolean, sync: boolean): Generator {\n if (partials && isString(this.file)) {\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)) as Template[]\n }\n return []\n }\n\n public partialScope (): PartialScope | undefined {\n if (isString(this.file)) {\n let names: Array\n\n if (this.liquid.options.jekyllInclude) {\n names = ['include']\n } else {\n names = Object.keys(this.hash.hash)\n if (this.withVar) {\n names.push([this.file, this.withVar])\n }\n }\n\n return { name: this.file, isolated: false, scope: names }\n }\n }\n\n public * arguments (): Arguments {\n yield * Object.values(this.hash.hash).filter(isValueToken)\n\n if (isValueToken(this.file)) {\n yield this.file\n }\n\n if (isValueToken(this.withVar)) {\n yield this.withVar\n }\n }\n}\n","import { Tag, Liquid, TopLevelToken, Emitter, TagToken, Context } from '..'\nimport { IdentifierToken } from '../tokens'\nimport { isNumber, stringify } from '../util'\n\nexport default class extends Tag {\n private identifier: IdentifierToken\n private variable: string\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.identifier = this.tokenizer.readIdentifier()\n this.variable = this.identifier.content\n }\n render (context: Context, emitter: Emitter) {\n const scope = context.environments\n if (!isNumber(scope[this.variable])) {\n scope[this.variable] = 0\n }\n emitter.write(stringify(--scope[this.variable]))\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { TopLevelToken, Liquid, ValueToken, evalToken, Emitter, TagToken, Context, Tag } from '..'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n private candidates: ValueToken[] = []\n private group?: ValueToken\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n const group = this.tokenizer.readValue()\n this.tokenizer.skipBlank()\n\n if (group) {\n if (this.tokenizer.peek() === ':') {\n this.group = group\n this.tokenizer.advance()\n } else this.candidates.push(group)\n }\n\n while (!this.tokenizer.end()) {\n const value = this.tokenizer.readValue()\n if (value) this.candidates.push(value)\n this.tokenizer.readTo(',')\n }\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`)\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const group = (yield evalToken(this.group, ctx)) as ValueToken\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = ctx.getRegister('cycle', {} as Record)\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n return yield evalToken(candidate, ctx)\n }\n\n public * arguments (): Arguments {\n yield * this.candidates\n\n if (this.group) {\n yield this.group\n }\n }\n}\n","import { Liquid, Tag, Value, Emitter, isTruthy, TagToken, TopLevelToken, Context, Template } from '..'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\nimport { assert, assertEmpty } from '../util'\n\nexport default class extends Tag {\n branches: { value: Value, templates: Template[] }[] = []\n elseTemplates: Template[] | undefined\n\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n let p: Template[] = []\n parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n assert(!this.elseTemplates, 'unexpected elsif after else')\n this.branches.push({\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\n templates: (p = [])\n })\n })\n .on('tag:else', tag => {\n assertEmpty(tag.args)\n assert(!this.elseTemplates, 'duplicated else')\n p = this.elseTemplates = []\n })\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop() })\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) })\n .start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n\n for (const { value, templates } of this.branches) {\n const v = yield value.value(ctx, ctx.opts.lenientIf)\n if (isTruthy(v, ctx)) {\n yield r.renderTemplates(templates, ctx, emitter)\n return\n }\n }\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter)\n }\n\n public * children (): Generator {\n const templates = this.branches.flatMap(b => b.templates)\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates)\n }\n return templates\n }\n\n public arguments (): Arguments {\n return this.branches.map(b => b.value)\n }\n}\n","import { isNumber, stringify } from '../util'\nimport { Tag, Liquid, TopLevelToken, Emitter, TagToken, Context } from '..'\nimport { IdentifierToken } from '../tokens'\n\nexport default class extends Tag {\n private identifier: IdentifierToken\n private variable: string\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.identifier = this.tokenizer.readIdentifier()\n this.variable = this.identifier.content\n }\n render (context: Context, emitter: Emitter) {\n const scope = context.environments\n if (!isNumber(scope[this.variable])) {\n scope[this.variable] = 0\n }\n const val = scope[this.variable]\n scope[this.variable]++\n emitter.write(stringify(val))\n }\n\n public * localScope (): Iterable {\n yield this.identifier\n }\n}\n","import { Scope, Template, Liquid, Tag, assert, Emitter, Hash, TagToken, TopLevelToken, Context } from '..'\nimport { BlockMode, createScope } from '../context'\nimport { parseFilePath, renderFilePath, ParsedFileName } from './render'\nimport { BlankDrop } from '../drop'\nimport { Parser } from '../parser'\nimport { Arguments, PartialScope } from '../template'\nimport { isString, isValueToken } from '../util'\n\nexport default class extends Tag {\n args: Hash\n templates: Template[]\n file?: ParsedFileName\n private currentFile?: string\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n this.file = parseFilePath(this.tokenizer, this.liquid, parser)\n this.currentFile = token.file\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator)\n this.templates = parser.parseTokens(remainTokens)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n const { liquid, args, file } = this\n const { renderer } = liquid\n if (file === undefined) {\n ctx.setRegister('blockMode', BlockMode.OUTPUT)\n yield renderer.renderTemplates(this.templates, ctx, emitter)\n return\n }\n const filepath = (yield renderFilePath(this.file, ctx, liquid)) as string\n assert(filepath, () => `illegal file path \"${filepath}\"`)\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile)) as Template[]\n\n // render remaining contents and store rendered results\n ctx.setRegister('blockMode', BlockMode.STORE)\n const html = yield renderer.renderTemplates(this.templates, ctx)\n const blocks = ctx.getRegister('blocks', {} as Record)\n\n // set whole content to anonymous block if anonymous doesn't specified\n if (blocks[''] === undefined) blocks[''] = (parent: BlankDrop, emitter: Emitter) => emitter.write(html)\n ctx.setRegister('blockMode', BlockMode.OUTPUT)\n\n // render the layout file use stored blocks\n ctx.push(createScope((yield args.render(ctx)) as Scope))\n yield renderer.renderTemplates(templates, ctx, emitter)\n ctx.pop()\n }\n\n public * children (partials: boolean): Generator {\n const templates = this.templates.slice()\n\n if (partials && isString(this.file)) {\n templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile)) as Template[])\n }\n\n return templates\n }\n\n public * arguments (): Arguments {\n for (const v of Object.values(this.args.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n\n if (isValueToken(this.file)) {\n yield this.file\n }\n }\n\n public partialScope (): PartialScope | undefined {\n if (isString(this.file)) {\n return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) }\n }\n }\n}\n","import { BlockMode, createScope } from '../context'\nimport { isTagToken } from '../util'\nimport { BlockDrop } from '../drop'\nimport { Liquid, TagToken, TopLevelToken, Template, Context, Emitter, Tag } from '..'\nimport { Parser } from '../parser'\n\nexport default class extends Tag {\n block: string\n templates: Template[] = []\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endblock') return\n const template = parser.parseToken(token, remainTokens)\n this.templates.push(template)\n }\n throw new Error(`tag ${token.getText()} not closed`)\n }\n\n * render (ctx: Context, emitter: Emitter) {\n const blockRender = this.getBlockRender(ctx)\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\n ctx.getRegister('blocks', {} as Record)[this.block] = blockRender\n } else {\n yield blockRender(new BlockDrop(), emitter)\n }\n }\n\n private getBlockRender (ctx: Context) {\n const self = this as Tag\n const { liquid, templates } = this\n const renderChild = ctx.getRegister('blocks', {} as Record)[this.block]\n const renderCurrent = function * (superBlock: BlockDrop, emitter: Emitter) {\n const stack: Tag[] = ctx.getRegister('blockStack', [])\n if (stack.includes(self)) throw new Error('block tag cannot be nested')\n\n stack.push(self)\n ctx.push(createScope({ block: superBlock }))\n yield liquid.renderer.renderTemplates(templates, ctx, emitter)\n ctx.pop()\n stack.pop()\n }\n return renderChild\n ? (superBlock: BlockDrop, emitter: Emitter) => renderChild(\n new BlockDrop(\n (emitter: Emitter) => renderCurrent(superBlock, emitter)\n ),\n emitter)\n : renderCurrent\n }\n\n public * children (): Generator {\n return this.templates\n }\n\n public blockScope (): Iterable {\n return ['block']\n }\n}\n","import { Liquid, TagToken, TopLevelToken, Tag } from '..'\nimport { isTagToken } from '../util'\n\nexport default class extends Tag {\n private tokens: TopLevelToken[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(tagToken, remainTokens, liquid)\n while (remainTokens.length) {\n const token = remainTokens.shift()!\n if (isTagToken(token) && token.name === 'endraw') return\n this.tokens.push(token)\n }\n throw new Error(`tag ${tagToken.getText()} not closed`)\n }\n render () {\n return this.tokens.map((token: TopLevelToken) => token.getText()).join('')\n }\n}\n","import { ForloopDrop } from './forloop-drop'\n\nexport class TablerowloopDrop extends ForloopDrop {\n private cols: number\n public constructor (length: number, cols: number, collection: string, variable: string) {\n super(length, collection, variable)\n this.length = length\n this.cols = cols\n }\n public row () {\n return Math.floor(this.i / this.cols) + 1\n }\n public col0 () {\n return (this.i % this.cols)\n }\n public col () {\n return this.col0() + 1\n }\n public col_first () { // eslint-disable-line\n return this.col0() === 0\n }\n public col_last () { // eslint-disable-line\n return this.col() === this.cols\n }\n}\n","import { isValueToken, toEnumerable } from '../util'\nimport { createScope } from '../context/scope'\nimport { ValueToken, Liquid, Tag, evalToken, Emitter, Hash, TagToken, TopLevelToken, Context, Template, ParseStream, FilteredValueToken } from '..'\nimport { TablerowloopDrop } from '../drop/tablerowloop-drop'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n variable: string\n args: Hash\n templates: Template[]\n collection: ValueToken | FilteredValueToken\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n const variable = this.tokenizer.readIdentifier()\n this.tokenizer.skipBlank()\n\n const predicate = this.tokenizer.readIdentifier()\n const collectionToken = this.tokenizer.readValue()\n if (predicate.content !== 'in' || !collectionToken) {\n throw new Error(`illegal tag: ${tagToken.getText()}`)\n }\n\n this.variable = variable.content\n this.collection = collectionToken\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator)\n this.templates = []\n\n let p\n const stream: ParseStream = parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.getText()} not closed`)\n })\n\n stream.start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n let collection = toEnumerable(yield evalToken(this.collection, ctx))\n const args = (yield this.args.render(ctx)) as Record\n const offset = args.offset || 0\n const limit = (args.limit === undefined) ? collection.length : args.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = args.cols || collection.length\n\n const r = this.liquid.renderer\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable)\n const scope = createScope({ tablerowloop })\n ctx.push(scope)\n\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\n scope[this.variable] = collection[idx]\n if (tablerowloop.col0() === 0) {\n if (tablerowloop.row() !== 1) emitter.write('')\n emitter.write(``)\n }\n emitter.write(``)\n yield r.renderTemplates(this.templates, ctx, emitter)\n emitter.write('')\n }\n if (collection.length) emitter.write('')\n ctx.pop()\n }\n\n public * children (): Generator {\n return this.templates\n }\n\n public * arguments (): Arguments {\n yield this.collection\n\n for (const v of Object.values(this.args.hash)) {\n if (isValueToken(v)) {\n yield v\n }\n }\n }\n\n public blockScope (): string[] {\n return [this.variable, 'tablerowloop']\n }\n}\n","import { Liquid, Tag, Value, TopLevelToken, Template, Emitter, isTruthy, isFalsy, Context, TagToken } from '..'\nimport { Parser } from '../parser'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n branches: { value: Value, test: (val: any, ctx: Context) => boolean, templates: Template[] }[] = []\n elseTemplates: Template[] = []\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(tagToken, remainTokens, liquid)\n let p: Template[] = []\n let elseCount = 0\n parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\n test: isFalsy,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n if (elseCount > 0) {\n p = []\n return\n }\n this.branches.push({\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\n test: isTruthy,\n templates: (p = [])\n })\n })\n .on('tag:else', () => {\n elseCount++\n p = this.elseTemplates\n })\n .on('tag:endunless', function () { this.stop() })\n .on('template', (tpl: Template) => {\n if (p !== this.elseTemplates || elseCount === 1) {\n p.push(tpl)\n }\n })\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) })\n .start()\n }\n\n * render (ctx: Context, emitter: Emitter): Generator {\n const r = this.liquid.renderer\n\n for (const { value, test, templates } of this.branches) {\n const v = yield value.value(ctx, ctx.opts.lenientIf)\n if (test(v, ctx)) {\n yield r.renderTemplates(templates, ctx, emitter)\n return\n }\n }\n\n yield r.renderTemplates(this.elseTemplates, ctx, emitter)\n }\n\n public * children (): Generator {\n const children = this.branches.flatMap(b => b.templates)\n if (this.elseTemplates) {\n children.push(...this.elseTemplates)\n }\n return children\n }\n\n public arguments (): Arguments {\n return this.branches.map(b => b.value)\n }\n}\n","import { Context, Emitter, Tag } from '..'\n\nexport default class extends Tag {\n render (ctx: Context, _emitter: Emitter) {\n ctx.breakCalled = true\n }\n}\n","import { Tag, Emitter, Context } from '..'\n\nexport default class extends Tag {\n render (ctx: Context, _emitter: Emitter) {\n ctx.continueCalled = true\n }\n}\n","import { Liquid, TopLevelToken, Emitter, Value, TagToken, Context, Tag } from '..'\nimport { Arguments } from '../template'\n\nexport default class extends Tag {\n private value?: Value\n\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid)\n this.tokenizer.skipBlank()\n if (!this.tokenizer.end()) {\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid)\n }\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n if (!this.value) return\n const val = yield this.value.value(ctx, false)\n emitter.write(val)\n }\n\n public * arguments (): Arguments {\n if (this.value) {\n yield this.value\n }\n }\n}\n","import { Template, Emitter, Liquid, TopLevelToken, TagToken, Context, Tag } from '..'\nimport { Parser } from '../parser'\n\nexport default class extends Tag {\n templates: Template[]\n constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) {\n super(token, remainTokens, liquid)\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options)\n this.templates = parser.parseTokens(tokens)\n }\n * render (ctx: Context, emitter: Emitter): Generator {\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter)\n }\n\n public * children (): Generator {\n return this.templates\n }\n}\n","import { TagToken, Liquid, TopLevelToken, Tag } from '..'\n\nexport default class extends Tag {\n constructor (tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(tagToken, remainTokens, liquid)\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\n throw new Error('every line of an inline comment must start with a \\'#\\' character')\n }\n }\n render () { }\n}\n","import AssignTag from './assign'\nimport ForTag from './for'\nimport CaptureTag from './capture'\nimport CaseTag from './case'\nimport CommentTag from './comment'\nimport IncludeTag from './include'\nimport RenderTag from './render'\nimport DecrementTag from './decrement'\nimport CycleTag from './cycle'\nimport IfTag from './if'\nimport IncrementTag from './increment'\nimport LayoutTag from './layout'\nimport BlockTag from './block'\nimport RawTag from './raw'\nimport TablerowTag from './tablerow'\nimport UnlessTag from './unless'\nimport BreakTag from './break'\nimport ContinueTag from './continue'\nimport EchoTag from './echo'\nimport LiquidTag from './liquid'\nimport InlineCommentTag from './inline-comment'\nimport type { TagClass } from '../template/tag'\n\nexport const tags: Record = {\n assign: AssignTag,\n 'for': ForTag,\n capture: CaptureTag,\n 'case': CaseTag,\n comment: CommentTag,\n include: IncludeTag,\n render: RenderTag,\n decrement: DecrementTag,\n increment: IncrementTag,\n cycle: CycleTag,\n 'if': IfTag,\n layout: LayoutTag,\n block: BlockTag,\n raw: RawTag,\n tablerow: TablerowTag,\n unless: UnlessTag,\n 'break': BreakTag,\n 'continue': ContinueTag,\n echo: EchoTag,\n liquid: LiquidTag,\n '#': InlineCommentTag\n}\n\nexport { AssignTag, ForTag, CaptureTag, CaseTag, CommentTag, IncludeTag, RenderTag, DecrementTag, IncrementTag, CycleTag, IfTag, LayoutTag, BlockTag, RawTag, TablerowTag, UnlessTag, BreakTag, ContinueTag, EchoTag, LiquidTag, InlineCommentTag }\n","import { Context } from './context'\nimport { toPromise, toValueSync, isFunction, forOwn, isString, strictUniq } from './util'\nimport { TagClass, createTagClass, TagImplOptions, FilterImplOptions, Template, Value, StaticAnalysisOptions, StaticAnalysis, analyze, analyzeSync, SegmentArray } from './template'\nimport { LookupType } from './fs/loader'\nimport { Render } from './render'\nimport { Parser } from './parser'\nimport { tags } from './tags'\nimport { filters } from './filters'\nimport { LiquidOptions, normalizeDirectoryList, NormalizedFullOptions, normalize, RenderOptions, RenderFileOptions } from './liquid-options'\n\nexport class Liquid {\n public readonly options: NormalizedFullOptions\n public readonly renderer = new Render()\n /**\n * @deprecated will be removed. In tags use `this.parser` instead\n */\n public readonly parser: Parser\n public readonly filters: Record = Object.create(null)\n public readonly tags: Record = Object.create(null)\n\n public constructor (opts: LiquidOptions = {}) {\n this.options = normalize(opts)\n // eslint-disable-next-line deprecation/deprecation\n this.parser = new Parser(this)\n forOwn(tags, (conf: TagClass, name: string) => this.registerTag(name, conf))\n forOwn(filters, (handler: FilterImplOptions, name: string) => this.registerFilter(name, handler))\n }\n public parse (html: string, filepath?: string): Template[] {\n const parser = new Parser(this)\n return parser.parse(html, filepath)\n }\n\n public _render (tpl: Template[], scope: Context | object | undefined, renderOptions: RenderOptions): IterableIterator {\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions, { liquid: this })\n return this.renderer.renderTemplates(tpl, ctx)\n }\n public async render (tpl: Template[], scope?: object, renderOptions?: RenderOptions): Promise {\n return toPromise(this._render(tpl, scope, { ...renderOptions, sync: false }))\n }\n public renderSync (tpl: Template[], scope?: object, renderOptions?: RenderOptions): any {\n return toValueSync(this._render(tpl, scope, { ...renderOptions, sync: true }))\n }\n public renderToNodeStream (tpl: Template[], scope?: object, renderOptions: RenderOptions = {}): NodeJS.ReadableStream {\n const ctx = new Context(scope, this.options, renderOptions, { liquid: this })\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx)\n }\n\n public _parseAndRender (html: string, scope: Context | object | undefined, renderOptions: RenderOptions): IterableIterator {\n const tpl = this.parse(html)\n return this._render(tpl, scope, renderOptions)\n }\n public async parseAndRender (html: string, scope?: Context | object, renderOptions?: RenderOptions): Promise {\n return toPromise(this._parseAndRender(html, scope, { ...renderOptions, sync: false }))\n }\n public parseAndRenderSync (html: string, scope?: Context | object, renderOptions?: RenderOptions): any {\n return toValueSync(this._parseAndRender(html, scope, { ...renderOptions, sync: true }))\n }\n\n public _parsePartialFile (file: string, sync?: boolean, currentFile?: string) {\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile)\n }\n public _parseLayoutFile (file: string, sync?: boolean, currentFile?: string) {\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile)\n }\n public _parseFile (file: string, sync?: boolean, lookupType?: LookupType, currentFile?: string): Generator {\n return new Parser(this).parseFile(file, sync, lookupType, currentFile)\n }\n public async parseFile (file: string, lookupType?: LookupType): Promise {\n return toPromise(new Parser(this).parseFile(file, false, lookupType))\n }\n public parseFileSync (file: string, lookupType?: LookupType): Template[] {\n return toValueSync(new Parser(this).parseFile(file, true, lookupType))\n }\n public * _renderFile (file: string, ctx: Context | object | undefined, renderFileOptions: RenderFileOptions): Generator {\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType)) as Template[]\n return yield this._render(templates, ctx, renderFileOptions)\n }\n public async renderFile (file: string, ctx?: Context | object, renderFileOptions?: RenderFileOptions) {\n return toPromise(this._renderFile(file, ctx, { ...renderFileOptions, sync: false }))\n }\n public renderFileSync (file: string, ctx?: Context | object, renderFileOptions?: RenderFileOptions) {\n return toValueSync(this._renderFile(file, ctx, { ...renderFileOptions, sync: true }))\n }\n public async renderFileToNodeStream (file: string, scope?: object, renderOptions?: RenderOptions) {\n const templates = await this.parseFile(file)\n return this.renderToNodeStream(templates, scope, renderOptions)\n }\n\n public _evalValue (str: string, scope?: object | Context): IterableIterator {\n const value = new Value(str, this)\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, {}, { liquid: this })\n return value.value(ctx)\n }\n public async evalValue (str: string, scope?: object | Context): Promise {\n return toPromise(this._evalValue(str, scope))\n }\n public evalValueSync (str: string, scope?: object | Context): any {\n return toValueSync(this._evalValue(str, scope))\n }\n\n public registerFilter (name: string, filter: FilterImplOptions) {\n this.filters[name] = filter\n }\n public registerTag (name: string, tag: TagClass | TagImplOptions) {\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag)\n }\n public plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n public express () {\n const self = this // eslint-disable-line\n let firstCall = true\n\n return function (this: any, filePath: string, ctx: object, callback: (err: Error | null, rendered: string) => void) {\n if (firstCall) {\n firstCall = false\n const dirs = normalizeDirectoryList(this.root)\n self.options.root.unshift(...dirs)\n self.options.layouts.unshift(...dirs)\n self.options.partials.unshift(...dirs)\n }\n self.renderFile(filePath, ctx).then(html => callback(null, html) as any, callback as any)\n }\n }\n\n public async analyze (template: Template[], options: StaticAnalysisOptions = {}): Promise {\n return analyze(template, options)\n }\n\n public analyzeSync (template: Template[], options: StaticAnalysisOptions = {}): StaticAnalysis {\n return analyzeSync(template, options)\n }\n\n public async parseAndAnalyze (html: string, filename?: string, options: StaticAnalysisOptions = {}): Promise {\n return analyze(this.parse(html, filename), options)\n }\n\n public parseAndAnalyzeSync (html: string, filename?: string, options: StaticAnalysisOptions = {}): StaticAnalysis {\n return analyzeSync(this.parse(html, filename), options)\n }\n\n /** Return an array of all variables without their properties. */\n public async variables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.variables)\n }\n\n /** Return an array of all variables without their properties. */\n public variablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.variables)\n }\n\n /** Return an array of all variables including their properties/paths. */\n public async fullVariables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all variables including their properties/paths. */\n public fullVariablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all variables, each as an array of properties/segments. */\n public async variableSegments (template: string | Template[], options: StaticAnalysisOptions = {}): Promise> {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))))\n }\n\n /** Return an array of all variables, each as an array of properties/segments. */\n public variableSegmentsSync (template: string | Template[], options: StaticAnalysisOptions = {}): Array {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))))\n }\n\n /** Return an array of all expected context variables without their properties. */\n public async globalVariables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.globals)\n }\n\n /** Return an array of all expected context variables without their properties. */\n public globalVariablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Object.keys(analysis.globals)\n }\n\n /** Return an array of all expected context variables including their properties/paths. */\n public async globalFullVariables (template: string | Template[], options: StaticAnalysisOptions = {}): Promise {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all expected context variables including their properties/paths. */\n public globalFullVariablesSync (template: string | Template[], options: StaticAnalysisOptions = {}): string[] {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))))\n }\n\n /** Return an array of all expected context variables, each as an array of properties/segments. */\n public async globalVariableSegments (template: string | Template[], options: StaticAnalysisOptions = {}): Promise> {\n const analysis = await analyze(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))))\n }\n\n /** Return an array of all expected context variables, each as an array of properties/segments. */\n public globalVariableSegmentsSync (template: string | Template[], options: StaticAnalysisOptions = {}): Array {\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options)\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))))\n }\n}\n","/* istanbul ignore file */\nexport const version = '[VI]{version}[/VI]'\nexport * as TypeGuards from './util/type-guards'\nexport { toValue, createTrie, Trie, toPromise, toValueSync, assert, LiquidError, ParseError, RenderError, UndefinedVariableError, TokenizationError, AssertionError } from './util'\nexport type { LiquidErrors } from './util/error'\nexport { Drop } from './drop'\nexport type { Comparable } from './drop'\nexport { Emitter } from './emitters'\nexport { defaultOperators, Operators, evalToken, evalQuotedToken, Expression, isFalsy, isTruthy } from './render'\nexport { Context, Scope } from './context'\nexport { Value, Hash, Template, FilterImplOptions, Tag, Filter, Output, Variable, VariableLocation, VariableSegments, Variables, StaticAnalysis, StaticAnalysisOptions, analyze, analyzeSync, Arguments, PartialScope } from './template'\nexport type { TagRenderReturn } from './template'\nexport { Token, TopLevelToken, TagToken, ValueToken } from './tokens'\nexport type { RangeToken, LiteralToken, QuotedToken, PropertyAccessToken, NumberToken, FilteredValueToken } from './tokens'\nexport { TokenKind, Tokenizer, ParseStream, Parser } from './parser'\nexport { filters } from './filters'\nexport * from './tags'\nexport { defaultOptions } from './liquid-options'\nexport type { LiquidOptions, RenderOptions, RenderFileOptions } from './liquid-options'\nexport { FS, LookupType } from './fs'\nexport { Liquid } from './liquid'\n"],"names":["toString","_\r\n .range","_.padStart","TokenKind","LookupType","last","sha256","sha256Impl","hmacSha256Impl","TypeGuards.isQuotedToken","TypeGuards.isHTMLToken","AssignTag","ForTag","CaptureTag","CaseTag","CommentTag","IncludeTag","RenderTag","DecrementTag","IncrementTag","CycleTag","IfTag","LayoutTag","BlockTag","RawTag","TablerowTag","UnlessTag","BreakTag","ContinueTag","EchoTag","LiquidTag","InlineCommentTag"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/liquidjs/dist/liquid.d.ts b/node_modules/liquidjs/dist/liquid.d.ts new file mode 100644 index 00000000..4d387b39 --- /dev/null +++ b/node_modules/liquidjs/dist/liquid.d.ts @@ -0,0 +1,70 @@ +/// +import { Context } from './context'; +import { TagClass, TagImplOptions, FilterImplOptions, Template, StaticAnalysisOptions, StaticAnalysis, SegmentArray } from './template'; +import { LookupType } from './fs/loader'; +import { Render } from './render'; +import { Parser } from './parser'; +import { LiquidOptions, NormalizedFullOptions, RenderOptions, RenderFileOptions } from './liquid-options'; +export declare class Liquid { + readonly options: NormalizedFullOptions; + readonly renderer: Render; + /** + * @deprecated will be removed. In tags use `this.parser` instead + */ + readonly parser: Parser; + readonly filters: Record; + readonly tags: Record; + constructor(opts?: LiquidOptions); + parse(html: string, filepath?: string): Template[]; + _render(tpl: Template[], scope: Context | object | undefined, renderOptions: RenderOptions): IterableIterator; + render(tpl: Template[], scope?: object, renderOptions?: RenderOptions): Promise; + renderSync(tpl: Template[], scope?: object, renderOptions?: RenderOptions): any; + renderToNodeStream(tpl: Template[], scope?: object, renderOptions?: RenderOptions): NodeJS.ReadableStream; + _parseAndRender(html: string, scope: Context | object | undefined, renderOptions: RenderOptions): IterableIterator; + parseAndRender(html: string, scope?: Context | object, renderOptions?: RenderOptions): Promise; + parseAndRenderSync(html: string, scope?: Context | object, renderOptions?: RenderOptions): any; + _parsePartialFile(file: string, sync?: boolean, currentFile?: string): Generator; + _parseLayoutFile(file: string, sync?: boolean, currentFile?: string): Generator; + _parseFile(file: string, sync?: boolean, lookupType?: LookupType, currentFile?: string): Generator; + parseFile(file: string, lookupType?: LookupType): Promise; + parseFileSync(file: string, lookupType?: LookupType): Template[]; + _renderFile(file: string, ctx: Context | object | undefined, renderFileOptions: RenderFileOptions): Generator; + renderFile(file: string, ctx?: Context | object, renderFileOptions?: RenderFileOptions): Promise; + renderFileSync(file: string, ctx?: Context | object, renderFileOptions?: RenderFileOptions): any; + renderFileToNodeStream(file: string, scope?: object, renderOptions?: RenderOptions): Promise; + _evalValue(str: string, scope?: object | Context): IterableIterator; + evalValue(str: string, scope?: object | Context): Promise; + evalValueSync(str: string, scope?: object | Context): any; + registerFilter(name: string, filter: FilterImplOptions): void; + registerTag(name: string, tag: TagClass | TagImplOptions): void; + plugin(plugin: (this: Liquid, L: typeof Liquid) => void): void; + express(): (this: any, filePath: string, ctx: object, callback: (err: Error | null, rendered: string) => void) => void; + analyze(template: Template[], options?: StaticAnalysisOptions): Promise; + analyzeSync(template: Template[], options?: StaticAnalysisOptions): StaticAnalysis; + parseAndAnalyze(html: string, filename?: string, options?: StaticAnalysisOptions): Promise; + parseAndAnalyzeSync(html: string, filename?: string, options?: StaticAnalysisOptions): StaticAnalysis; + /** Return an array of all variables without their properties. */ + variables(template: string | Template[], options?: StaticAnalysisOptions): Promise; + /** Return an array of all variables without their properties. */ + variablesSync(template: string | Template[], options?: StaticAnalysisOptions): string[]; + /** Return an array of all variables including their properties/paths. */ + fullVariables(template: string | Template[], options?: StaticAnalysisOptions): Promise; + /** Return an array of all variables including their properties/paths. */ + fullVariablesSync(template: string | Template[], options?: StaticAnalysisOptions): string[]; + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegments(template: string | Template[], options?: StaticAnalysisOptions): Promise>; + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegmentsSync(template: string | Template[], options?: StaticAnalysisOptions): Array; + /** Return an array of all expected context variables without their properties. */ + globalVariables(template: string | Template[], options?: StaticAnalysisOptions): Promise; + /** Return an array of all expected context variables without their properties. */ + globalVariablesSync(template: string | Template[], options?: StaticAnalysisOptions): string[]; + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariables(template: string | Template[], options?: StaticAnalysisOptions): Promise; + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariablesSync(template: string | Template[], options?: StaticAnalysisOptions): string[]; + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegments(template: string | Template[], options?: StaticAnalysisOptions): Promise>; + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegmentsSync(template: string | Template[], options?: StaticAnalysisOptions): Array; +} diff --git a/node_modules/liquidjs/dist/liquid.node.js b/node_modules/liquidjs/dist/liquid.node.js new file mode 100644 index 00000000..d7a4daf4 --- /dev/null +++ b/node_modules/liquidjs/dist/liquid.node.js @@ -0,0 +1,5251 @@ +/* + * liquidjs@10.28.0, https://github.com/harttle/liquidjs + * (c) 2016-2026 harttle + * Released under the MIT License. + */ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var stream = require('stream'); +var path = require('path'); +var fs$1 = require('fs'); +var crypto = require('crypto'); + +class Token { + constructor(kind, input, begin, end, file) { + this.kind = kind; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } + getText() { + return this.input.slice(this.begin, this.end); + } + getPosition() { + let [row, col] = [1, 1]; + for (let i = 0; i < this.begin; i++) { + if (this.input[i] === '\n') { + row++; + col = 1; + } + else + col++; + } + return [row, col]; + } + size() { + return this.end - this.begin; + } +} + +class Drop { + liquidMethodMissing(key, context) { + return undefined; + } +} + +const toString$1 = Object.prototype.toString; +const toLowerCase = String.prototype.toLowerCase; +const hasOwnProperty = Object.hasOwnProperty; +function isString(value) { + return typeof value === 'string'; +} +// eslint-disable-next-line @typescript-eslint/ban-types +function isFunction(value) { + return typeof value === 'function'; +} +function isPromise(val) { + return val && isFunction(val.then); +} +function isIterator(val) { + return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return); +} +function promisify(fn) { + return function (...args) { + return new Promise((resolve, reject) => { + fn(...args, (err, result) => { + err ? reject(err) : resolve(result); + }); + }); + }; +} +function stringify(value) { + value = toValue(value); + if (isString(value)) + return value; + if (isNil(value)) + return ''; + if (isArray(value)) + return value.map(x => stringify(x)).join(''); + return String(value); +} +function readArrayElement(arr, index, ownPropertyOnly) { + if (index < 0) + index = arr.length + index; + if (ownPropertyOnly && !hasOwnProperty.call(arr, index)) + return undefined; + return arr[index]; +} +function toEnumerable(val) { + val = toValue(val); + if (isArray(val)) + return val; + if (isString(val) && val.length > 0) + return [val]; + if (isIterable(val)) + return Array.from(val); + if (isObject(val)) + return Object.keys(val).map((key) => [key, val[key]]); + return []; +} +function toArray(val) { + val = toValue(val); + if (isNil(val)) + return []; + if (isArray(val)) + return val; + return [val]; +} +function toValue(value) { + return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value; +} +function toNumber(value) { + return +toValue(value) || 0; +} +function isNumber(value) { + return typeof value === 'number'; +} +function toLiquid(value) { + if (value && isFunction(value.toLiquid)) + return toLiquid(value.toLiquid()); + return value; +} +function isNil(value) { + return value == null; +} +function isUndefined(value) { + return value === undefined; +} +function isArray(value) { + // be compatible with IE 8 + return toString$1.call(value) === '[object Array]'; +} +function isArrayLike(value) { + return value && isNumber(value.length); +} +function isIterable(value) { + return isObject(value) && Symbol.iterator in value; +} +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +function forOwn(obj, iteratee) { + obj = obj || {}; + for (const k in obj) { + if (hasOwnProperty.call(obj, k)) { + if (iteratee(obj[k], k, obj) === false) + break; + } + } + return obj; +} +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +function isObject(value) { + const type = typeof value; + return value !== null && (type === 'object' || type === 'function'); +} +function range(start, stop, step = 1) { + const arr = []; + for (let i = start; i < stop; i += step) { + arr.push(i); + } + return arr; +} +function padStart(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str); +} +function padEnd(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch); +} +function pad(str, length, ch, add) { + str = String(str); + const n = length - str.length; + if (n <= 0) + return str; + return add(str, ch.repeat(n)); +} +function identify(val) { + return val; +} +function changeCase(str) { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z'); + return hasLowerCase ? str.toUpperCase() : str.toLowerCase(); +} +function ellipsis(str, N) { + return str.length > N ? str.slice(0, N - 3) + '...' : str; +} +function orderedCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +// compare string in case-insensitive way, undefined values to the tail +function caseInsensitiveCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + a = toLowerCase.call(a); + b = toLowerCase.call(b); + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +function argumentsToValue(fn) { + return function (...args) { return fn.call(this, ...args.map(toValue)); }; +} +function argumentsToNumber(fn) { + return function (...args) { return fn.call(this, ...args.map(toNumber)); }; +} +/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */ +function* strictUniq(array) { + const seen = new Set(); + for (const element of array) { + const key = JSON.stringify(element); + if (!seen.has(key)) { + seen.add(key); + yield element; + } + } +} + +/** + * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes + */ +const TRAIT = '__liquidClass__'; +class LiquidError extends Error { + constructor(err, token) { + /** + * note: for ES5 targeting, `this` will be replaced by return value of Error(), + * thus everything on `this` will be lost, avoid calling `LiquidError` methods here + */ + super(typeof err === 'string' ? err : err.message); + this.context = ''; + if (typeof err !== 'string') + Object.defineProperty(this, 'originalError', { value: err, enumerable: false }); + Object.defineProperty(this, 'token', { value: token, enumerable: false }); + Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false }); + } + update() { + Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false }); + this.message = mkMessage(this.message, this.token); + this.stack = this.message + '\n' + this.context + + '\n' + this.stack; + if (this.originalError) + this.stack += '\nFrom ' + this.originalError.stack; + } + static is(obj) { + return obj?.[TRAIT] === 'LiquidError'; + } +} +class TokenizationError extends LiquidError { + constructor(message, token) { + super(message, token); + this.name = 'TokenizationError'; + super.update(); + } +} +class ParseError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'ParseError'; + this.message = err.message; + super.update(); + } +} +class RenderError extends LiquidError { + constructor(err, tpl) { + super(err, tpl.token); + this.name = 'RenderError'; + this.message = err.message; + super.update(); + } + static is(obj) { + return obj.name === 'RenderError'; + } +} +class LiquidErrors extends LiquidError { + constructor(errors) { + super(errors[0], errors[0].token); + this.errors = errors; + this.name = 'LiquidErrors'; + const s = errors.length > 1 ? 's' : ''; + this.message = `${errors.length} error${s} found`; + super.update(); + } + static is(obj) { + return obj.name === 'LiquidErrors'; + } +} +class UndefinedVariableError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'UndefinedVariableError'; + this.message = err.message; + super.update(); + } +} +// only used internally; raised where we don't have token information, +// so it can't be an UndefinedVariableError. +class InternalUndefinedVariableError extends Error { + constructor(variableName) { + super(`undefined variable: ${variableName}`); + this.name = 'InternalUndefinedVariableError'; + this.variableName = variableName; + } +} +class AssertionError extends Error { + constructor(message) { + super(message); + this.name = 'AssertionError'; + this.message = message + ''; + } +} +function mkContext(token) { + const [line, col] = token.getPosition(); + const lines = token.input.split('\n'); + const begin = Math.max(line - 2, 1); + const end = Math.min(line + 3, lines.length); + const context = range(begin, end + 1) + .map(lineNumber => { + const rowIndicator = (lineNumber === line) ? '>> ' : ' '; + const num = padStart(String(lineNumber), String(end).length); + let text = `${rowIndicator}${num}| `; + const colIndicator = lineNumber === line + ? '\n' + padStart('^', col + text.length) + : ''; + text += lines[lineNumber - 1]; + text += colIndicator; + return text; + }) + .join('\n'); + return context; +} +function mkMessage(msg, token) { + if (token.file) + msg += `, file:${token.file}`; + const [line, col] = token.getPosition(); + msg += `, line:${line}, col:${col}`; + return msg; +} + +// **DO NOT CHANGE THIS FILE** +// +// This file is generated by bin/character-gen.js +// bitmask character types to boost performance +const TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; +const WORD = 1; +const BLANK = 4; +const QUOTE = 8; +const INLINE_BLANK = 16; +const NUMBER = 32; +const SIGN = 64; +const PUNCTUATION = 128; +function isWord(char) { + const code = char.charCodeAt(0); + return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD); +} +TYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK; +TYPES[8220] = TYPES[8221] = PUNCTUATION; + +function assert(predicate, message) { + if (!predicate) { + const msg = typeof message === 'function' + ? message() + : (message || `expect ${predicate} to be true`); + throw new AssertionError(msg); + } +} +function assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) { + assert(!predicate, message); +} + +class NullDrop extends Drop { + equals(value) { + return isNil(toValue(value)); + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return null; + } +} + +class EmptyDrop extends Drop { + equals(value) { + if (value instanceof EmptyDrop) + return false; + value = toValue(value); + if (isString(value) || isArray(value)) + return value.length === 0; + if (isObject(value)) + return Object.keys(value).length === 0; + return false; + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return ''; + } + static is(value) { + return value instanceof EmptyDrop; + } +} + +class BlankDrop extends EmptyDrop { + equals(value) { + if (value === false) + return true; + if (isNil(toValue(value))) + return true; + if (isString(value)) + return /^\s*$/.test(value); + return super.equals(value); + } + static is(value) { + return value instanceof BlankDrop; + } +} + +class ForloopDrop extends Drop { + constructor(length, collection, variable) { + super(); + this.i = 0; + this.length = length; + this.name = `${variable}-${collection}`; + } + next() { + this.i++; + } + index0() { + return this.i; + } + index() { + return this.i + 1; + } + first() { + return this.i === 0; + } + last() { + return this.i === this.length - 1; + } + rindex() { + return this.length - this.i; + } + rindex0() { + return this.length - this.i - 1; + } + valueOf() { + return JSON.stringify(this); + } +} + +class SimpleEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + this.buffer += stringify(html); + } +} + +class StreamedEmitter { + constructor() { + this.buffer = ''; + this.stream = new stream.PassThrough(); + } + write(html) { + this.stream.write(stringify(html)); + } + error(err) { + this.stream.emit('error', err); + } + end() { + this.stream.end(); + } +} + +class KeepingTypeEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + html = toValue(html); + // This will only preserve the type if the value is isolated. + // I.E: + // {{ my-port }} -> 42 + // {{ my-host }}:{{ my-port }} -> 'host:42' + if (typeof html !== 'string' && this.buffer === '') { + this.buffer = html; + } + else { + this.buffer = stringify(this.buffer) + stringify(html); + } + } +} + +class BlockDrop extends Drop { + constructor( + // the block render from layout template + superBlockRender = () => '') { + super(); + this.superBlockRender = superBlockRender; + } + /** + * Provide parent access in child block by + * {{ block.super }} + */ + *super() { + const emitter = new SimpleEmitter(); + yield this.superBlockRender(emitter); + return emitter.buffer; + } +} + +function isComparable(arg) { + return (arg && + isFunction(arg.equals) && + isFunction(arg.gt) && + isFunction(arg.geq) && + isFunction(arg.lt) && + isFunction(arg.leq)); +} + +const nil = new NullDrop(); +const literalValues = { + 'true': true, + 'false': false, + 'nil': nil, + 'null': nil, + 'empty': new EmptyDrop(), + 'blank': new BlankDrop() +}; + +// Tries are built once per input object and reused: the Tokenizer rebuilds them +// on every instantiation, but `input` (operators/literalValues) is a stable +// reference. WeakMap-keying by `input` lets short-lived operator objects (and +// their tries) be garbage collected. The returned trie is treated as read-only +// by callers (matchTrie only reads it); do not mutate it. +const trieCache = new WeakMap(); +function createTrie(input) { + const cached = trieCache.get(input); + if (cached) + return cached; + const trie = {}; + for (const [name, data] of Object.entries(input)) { + let node = trie; + for (let i = 0; i < name.length; i++) { + const c = name[i]; + node[c] = node[c] || {}; + if (i === name.length - 1 && isWord(name[i])) { + node[c].needBoundary = true; + } + node = node[c]; + } + node.data = data; + node.end = true; + } + trieCache.set(input, trie); + return trie; +} + +function toLiquidAsync(asyncFn, syncFn) { + const syncImpl = syncFn || asyncFn; + return (sync, ...args) => { + return sync ? syncImpl(...args) : asyncFn(...args); + }; +} +// convert an async iterator to a Promise +async function toPromise(val) { + if (!isIterator(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + try { + if (isIterator(value)) + value = toPromise(value); + if (isPromise(value)) + value = await value; + } + catch (err) { + next = 'throw'; + value = err; + } + } while (!done); + return value; +} +// convert an async iterator to a value in a synchronous manner +function toValueSync(val) { + if (!isIterator(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + if (isIterator(value)) { + try { + value = toValueSync(value); + } + catch (err) { + next = 'throw'; + value = err; + } + } + } while (!done); + return value; +} + +const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/; +// prototype extensions +function daysInMonth(d) { + const feb = isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +} +function getDayOfYear(d) { + let num = 0; + for (let i = 0; i < d.getMonth(); ++i) { + num += daysInMonth(d)[i]; + } + return num + d.getDate(); +} +function getWeekOfYear(d, startDay) { + // Skip to startDay of this week + const now = getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + const jan1 = new Date(d.getFullYear(), 0, 1); + const then = (7 - jan1.getDay() + startDay); + return String(Math.floor((now - then) / 7) + 1); +} +function isLeapYear(d) { + const year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); +} +function ordinal(d) { + const date = d.getDate(); + if ([11, 12, 13].includes(date)) + return 'th'; + switch (date % 10) { + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; + } +} +function century(d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); +} +// default to 0 +const padWidths = { + d: 2, + e: 2, + H: 2, + I: 2, + j: 3, + k: 2, + l: 2, + L: 3, + m: 2, + M: 2, + S: 2, + U: 2, + W: 2 +}; +const padSpaceChars = new Set('aAbBceklpP'); +function getTimezoneOffset(d, opts) { + const nOffset = Math.abs(d.getTimezoneOffset()); + const h = Math.floor(nOffset / 60); + const m = nOffset % 60; + return (d.getTimezoneOffset() > 0 ? '-' : '+') + + padStart(h, 2, '0') + + (opts.flags[':'] ? ':' : '') + + padStart(m, 2, '0'); +} +const formatCodes = { + a: (d) => d.getShortWeekdayName(), + A: (d) => d.getLongWeekdayName(), + b: (d) => d.getShortMonthName(), + B: (d) => d.getLongMonthName(), + c: (d) => d.toLocaleString(), + C: (d) => century(d), + d: (d) => d.getDate(), + e: (d) => d.getDate(), + H: (d) => d.getHours(), + I: (d) => String(d.getHours() % 12 || 12), + j: (d) => getDayOfYear(d), + k: (d) => d.getHours(), + l: (d) => String(d.getHours() % 12 || 12), + L: (d) => d.getMilliseconds(), + m: (d) => d.getMonth() + 1, + M: (d) => d.getMinutes(), + N: (d, opts) => { + const width = Number(opts.width) || 9; + const str = padStart(String(d.getMilliseconds()), 3, '0').slice(0, width); + opts.memoryLimit?.use(width - str.length); + return padEnd(str, width, '0'); + }, + p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'), + P: (d) => (d.getHours() < 12 ? 'am' : 'pm'), + q: (d) => ordinal(d), + s: (d) => Math.floor(d.dateValue() / 1000), + S: (d) => d.getSeconds(), + u: (d) => d.getDay() || 7, + U: (d) => getWeekOfYear(d, 0), + w: (d) => d.getDay(), + W: (d) => getWeekOfYear(d, 1), + x: (d) => d.toLocaleDateString(), + X: (d) => d.toLocaleTimeString(), + y: (d) => d.getFullYear().toString().slice(2, 4), + Y: (d) => d.getFullYear(), + z: getTimezoneOffset, + Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts), + 't': () => '\t', + 'n': () => '\n', + '%': () => '%' +}; +formatCodes.h = formatCodes.b; +function strftime(d, formatStr, memoryLimit) { + let output = ''; + let remaining = formatStr; + let match; + while ((match = rFormat.exec(remaining))) { + output += remaining.slice(0, match.index); + remaining = remaining.slice(match.index + match[0].length); + output += format(d, match, memoryLimit); + } + return output + remaining; +} +function format(d, match, memoryLimit) { + const [input, flagStr = '', width, modifier, conversion] = match; + const convert = formatCodes[conversion]; + if (!convert) + return input; + const flags = {}; + for (const flag of flagStr) + flags[flag] = true; + let ret = String(convert(d, { flags, width, modifier, memoryLimit })); + let padChar = padSpaceChars.has(conversion) ? ' ' : '0'; + let padWidth = Number(width) || padWidths[conversion] || 0; + if (flags['^']) + ret = ret.toUpperCase(); + else if (flags['#']) + ret = changeCase(ret); + if (flags['_']) + padChar = ' '; + else if (flags['0']) + padChar = '0'; + if (flags['-']) + padWidth = 0; + memoryLimit?.use(Number(padWidth) - ret.length); + return padStart(ret, padWidth, padChar); +} + +function getDateTimeFormat() { + return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined); +} + +// one minute in milliseconds +const OneMinute = 60000; +/** + * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS + * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3 + */ +const TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):?(\d{2}))$/; +const monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' +]; +const monthNamesShort = monthNames.map(name => name.slice(0, 3)); +const dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' +]; +const dayNamesShort = dayNames.map(name => name.slice(0, 3)); +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +class LiquidDate { + constructor(init, locale, timezone) { + this.locale = locale; + this.DateTimeFormat = getDateTimeFormat(); + this.date = new Date(init); + this.timezoneFixed = timezone !== undefined; + if (timezone === undefined) { + timezone = this.date.getTimezoneOffset(); + } + this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone; + this.timezoneName = isString(timezone) ? timezone : ''; + const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute; + const time = this.date.getTime() + diff; + this.displayDate = new Date(time); + } + getTime() { + return this.displayDate.getTime(); + } + /** + * The underlying UTC timestamp in milliseconds, unaffected by the display + * timezone. Use this (not `getTime()`) for timezone-invariant values like + * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by + * the display timezone offset so wall-clock getters can delegate to Date. + */ + dateValue() { + return this.date.getTime(); + } + getMilliseconds() { + return this.displayDate.getMilliseconds(); + } + getSeconds() { + return this.displayDate.getSeconds(); + } + getMinutes() { + return this.displayDate.getMinutes(); + } + getHours() { + return this.displayDate.getHours(); + } + getDay() { + return this.displayDate.getDay(); + } + getDate() { + return this.displayDate.getDate(); + } + getMonth() { + return this.displayDate.getMonth(); + } + getFullYear() { + return this.displayDate.getFullYear(); + } + toLocaleString(locale, init) { + if (init?.timeZone) { + return this.date.toLocaleString(locale, init); + } + return this.displayDate.toLocaleString(locale, init); + } + toLocaleTimeString(locale) { + return this.displayDate.toLocaleTimeString(locale); + } + toLocaleDateString(locale) { + return this.displayDate.toLocaleDateString(locale); + } + getTimezoneOffset() { + return this.timezoneOffset; + } + getTimeZoneName() { + if (this.timezoneFixed) + return this.timezoneName; + if (!this.DateTimeFormat) + return; + return this.DateTimeFormat().resolvedOptions().timeZone; + } + getLongMonthName() { + return this.format({ month: 'long' }) ?? monthNames[this.getMonth()]; + } + getShortMonthName() { + return this.format({ month: 'short' }) ?? monthNamesShort[this.getMonth()]; + } + getLongWeekdayName() { + return this.format({ weekday: 'long' }) ?? dayNames[this.displayDate.getDay()]; + } + getShortWeekdayName() { + return this.format({ weekday: 'short' }) ?? dayNamesShort[this.displayDate.getDay()]; + } + valid() { + return !isNaN(this.getTime()); + } + format(options) { + return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate); + } + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone(dateString, locale) { + const m = dateString.match(TIMEZONE_PATTERN); + // representing a UTC timestamp + if (m && m[1] === 'Z') { + return new LiquidDate(+new Date(dateString), locale, 0); + } + // has a timezone specified + if (m && m[2] && m[3] && m[4]) { + const [, , sign, hours, minutes] = m; + const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10)); + return new LiquidDate(+new Date(dateString), locale, offset); + } + return new LiquidDate(dateString, locale); + } + static getTimezoneOffset(timezoneName, date) { + const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName }); + const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' }); + const localDate = new Date(localDateString); + const utcDate = new Date(utcDateString); + return (+utcDate - +localDate) / (60 * 1000); + } +} + +class Limiter { + constructor(resource, limit) { + this.base = 0; + this.message = `${resource} limit exceeded`; + this.limit = limit; + } + use(count) { + if (+count > 0) { + assert(this.base + +count <= this.limit, this.message); + this.base += +count; + } + } + check(count) { + if (+count > 0) { + assert(+count <= this.limit, this.message); + } + } +} + +class DelimitedToken extends Token { + constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) { + super(kind, input, begin, end, file); + this.trimLeft = false; + this.trimRight = false; + const tl = input[contentBegin] === '-'; + const tr = input[contentEnd - 1] === '-'; + let l = tl ? contentBegin + 1 : contentBegin; + let r = tr ? contentEnd - 1 : contentEnd; + while (l < r && (TYPES[input.charCodeAt(l)] & BLANK)) + l++; + while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK)) + r--; + this.contentRange = [l, r]; + this.trimLeft = tl || trimLeft; + this.trimRight = tr || trimRight; + } + get content() { + return this.input.slice(this.contentRange[0], this.contentRange[1]); + } +} + +class TagToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options; + const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length]; + super(exports.TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file); + this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions); + this.name = this.tokenizer.readTagName(); + this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`); + this.tokenizer.skipBlank(); + this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + } +} + +class OutputToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options; + const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length]; + super(exports.TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file); + } +} + +class HTMLToken extends Token { + constructor(input, begin, end, file) { + super(exports.TokenKind.HTML, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.trimLeft = 0; + this.trimRight = 0; + } + getContent() { + return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight); + } +} + +class NumberToken extends Token { + constructor(input, begin, end, file) { + super(exports.TokenKind.Number, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = Number(this.getText()); + } +} + +class IdentifierToken extends Token { + constructor(input, begin, end, file) { + super(exports.TokenKind.Word, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = this.getText(); + } +} + +class LiteralToken extends Token { + constructor(input, begin, end, file) { + super(exports.TokenKind.Literal, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.literal = this.getText(); + this.content = literalValues[this.literal]; + } +} + +const operatorPrecedences = { + '==': 2, + '!=': 2, + '>': 2, + '<': 2, + '>=': 2, + '<=': 2, + 'contains': 2, + 'not': 1, + 'and': 0, + 'or': 0 +}; +const operatorTypes = { + '==': 0 /* OperatorType.Binary */, + '!=': 0 /* OperatorType.Binary */, + '>': 0 /* OperatorType.Binary */, + '<': 0 /* OperatorType.Binary */, + '>=': 0 /* OperatorType.Binary */, + '<=': 0 /* OperatorType.Binary */, + 'contains': 0 /* OperatorType.Binary */, + 'not': 1 /* OperatorType.Unary */, + 'and': 0 /* OperatorType.Binary */, + 'or': 0 /* OperatorType.Binary */ +}; +class OperatorToken extends Token { + constructor(input, begin, end, file) { + super(exports.TokenKind.Operator, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.operator = this.getText(); + } + getPrecedence() { + return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1; + } +} + +class PropertyAccessToken extends Token { + constructor(variable, props, input, begin, end, file) { + super(exports.TokenKind.PropertyAccess, input, begin, end, file); + this.variable = variable; + this.props = props; + } +} + +class FilterToken extends Token { + constructor(name, args, input, begin, end, file) { + super(exports.TokenKind.Filter, input, begin, end, file); + this.name = name; + this.args = args; + } +} + +class HashToken extends Token { + constructor(input, begin, end, name, value, file) { + super(exports.TokenKind.Hash, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.name = name; + this.value = value; + this.file = file; + } +} + +const rHex = /[\da-fA-F]/; +const rOct = /[0-7]/; +const escapeChar = { + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t', + v: '\x0B' +}; +function hexVal(c) { + const code = c.charCodeAt(0); + if (code >= 97) + return code - 87; + if (code >= 65) + return code - 55; + return code - 48; +} +function parseStringLiteral(str) { + let ret = ''; + for (let i = 1; i < str.length - 1; i++) { + if (str[i] !== '\\') { + ret += str[i]; + continue; + } + if (escapeChar[str[i + 1]] !== undefined) { + ret += escapeChar[str[++i]]; + } + else if (str[i + 1] === 'u') { + let val = 0; + let j = i + 2; + while (j <= i + 5 && rHex.test(str[j])) { + val = val * 16 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + else if (!rOct.test(str[i + 1])) { + ret += str[++i]; + } + else { + let j = i + 1; + let val = 0; + while (j <= i + 3 && rOct.test(str[j])) { + val = val * 8 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + } + return ret; +} + +class QuotedToken extends Token { + constructor(input, begin, end, file) { + super(exports.TokenKind.Quoted, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = parseStringLiteral(this.getText()); + } +} + +class RangeToken extends Token { + constructor(input, begin, end, lhs, rhs, file) { + super(exports.TokenKind.Range, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.lhs = lhs; + this.rhs = rhs; + this.file = file; + } +} + +/** + * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}` + */ +class LiquidTagToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + super(exports.TokenKind.Tag, [begin, end], input, begin, end, false, false, file); + this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions); + this.name = this.tokenizer.readTagName(); + this.tokenizer.assert(this.name, 'illegal liquid tag syntax'); + this.tokenizer.skipBlank(); + } + get args() { + return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + } +} + +/** + * value expression with optional filters + * e.g. + * {% assign foo="bar" | append: "coo" %} + */ +class FilteredValueToken extends Token { + constructor(initial, filters, input, begin, end, file) { + super(exports.TokenKind.FilteredValue, input, begin, end, file); + this.initial = initial; + this.filters = filters; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } +} + +const polyfill = { + now: () => Date.now() +}; +function getPerformance() { + return (typeof global === 'object' && global.performance) || + (typeof window === 'object' && window.performance) || + polyfill; +} + +class Render { + renderTemplatesToNodeStream(templates, ctx) { + const emitter = new StreamedEmitter(); + Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter))) + .then(() => emitter.end(), err => emitter.error(err)); + return emitter.stream; + } + *renderTemplates(templates, ctx, emitter) { + if (!emitter) { + emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter(); + } + ctx.renderLimit.check(getPerformance().now()); + const errors = []; + for (const tpl of templates) { + ctx.renderLimit.check(getPerformance().now()); + try { + // if tpl.render supports emitter, it'll return empty `html` + const html = yield tpl.render(ctx, emitter); + // if not, it'll return an `html`, write to the emitter for it + html && emitter.write(html); + if (ctx.breakCalled || ctx.continueCalled) + break; + } + catch (e) { + const err = LiquidError.is(e) ? e : new RenderError(e, tpl); + if (ctx.opts.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) { + throw new LiquidErrors(errors); + } + return emitter.buffer; + } +} + +function isKeyValuePair(arr) { + return isArray(arr); +} + +class Filter { + constructor(token, options, liquid) { + this.token = token; + this.name = token.name; + this.handler = isFunction(options) + ? options + : (isFunction(options?.handler) ? options.handler : identify); + this.raw = !isFunction(options) && !!options?.raw; + this.args = token.args; + this.liquid = liquid; + } + *render(value, context) { + const argv = []; + for (const arg of this.args) { + if (isKeyValuePair(arg)) + argv.push([arg[0], yield evalToken(arg[1], context)]); + else + argv.push(yield evalToken(arg, context)); + } + return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]); + } +} + +class Expression { + constructor(tokens) { + this.postfix = [...toPostfix(tokens)]; + } + *evaluate(ctx, lenient) { + assert(ctx, 'unable to evaluate: context not defined'); + const operands = []; + for (const token of this.postfix) { + if (isOperatorToken(token)) { + const r = operands.pop(); + let result; + if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) { + result = yield ctx.opts.operators[token.operator](r, ctx); + } + else { + const l = operands.pop(); + result = yield ctx.opts.operators[token.operator](l, r, ctx); + } + operands.push(result); + } + else { + operands.push(yield evalToken(token, ctx, lenient)); + } + } + return operands[0]; + } + valid() { + return !!this.postfix.length; + } +} +function* evalToken(token, ctx, lenient = false) { + if (!token) + return; + if ('content' in token) + return token.content; + if (isPropertyAccessToken(token)) + return yield evalPropertyAccessToken(token, ctx, lenient); + if (isRangeToken(token)) + return yield evalRangeToken(token, ctx); + if (isFilteredValueToken(token)) + return yield evalFilteredValueToken(token, ctx, lenient); +} +function* evalFilteredValueToken(token, ctx, lenient) { + assert(ctx.liquid, 'FilteredValueToken evaluation requires liquid instance in context'); + lenient = lenient || (ctx.opts.lenientIf && token.filters.length > 0 && token.filters[0].name === 'default'); + let val = yield token.initial.evaluate(ctx, lenient); + for (const filterToken of token.filters) { + const filterImpl = ctx.liquid.filters[filterToken.name]; + assert(filterImpl || !ctx.liquid.options.strictFilters, () => `undefined filter: ${filterToken.name}`); + const filter = new Filter(filterToken, filterImpl, ctx.liquid); + val = yield filter.render(val, ctx); + } + return val; +} +function* evalPropertyAccessToken(token, ctx, lenient) { + const props = []; + for (const prop of token.props) { + props.push((yield evalToken(prop, ctx, false))); + } + try { + if (token.variable) { + const variable = yield evalToken(token.variable, ctx, lenient); + return yield ctx._getFromScope(variable, props); + } + else { + return yield ctx._get(props); + } + } + catch (e) { + if (lenient && e.name === 'InternalUndefinedVariableError') + return null; + throw (new UndefinedVariableError(e, token)); + } +} +function evalQuotedToken(token) { + return token.content; +} +function* evalRangeToken(token, ctx) { + const low = yield evalToken(token.lhs, ctx); + const high = yield evalToken(token.rhs, ctx); + ctx.memoryLimit.use(high - low + 1); + return range(+low, +high + 1); +} +function* toPostfix(tokens) { + const ops = []; + for (const token of tokens) { + if (isOperatorToken(token)) { + while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) { + yield ops.pop(); + } + ops.push(token); + } + else + yield token; + } + while (ops.length) { + yield ops.pop(); + } +} + +function isTruthy(val, ctx) { + return !isFalsy(val, ctx); +} +function isFalsy(val, ctx) { + val = toValue(val); + if (ctx.opts.jsTruthy) { + return !val; + } + else { + return val === false || undefined === val || val === null; + } +} + +const defaultOperators = { + '==': equals, + '!=': (l, r) => !equals(l, r), + '>': (l, r) => { + if (isComparable(l)) + return l.gt(r); + if (isComparable(r)) + return r.lt(l); + return toValue(l) > toValue(r); + }, + '<': (l, r) => { + if (isComparable(l)) + return l.lt(r); + if (isComparable(r)) + return r.gt(l); + return toValue(l) < toValue(r); + }, + '>=': (l, r) => { + if (isComparable(l)) + return l.geq(r); + if (isComparable(r)) + return r.leq(l); + return toValue(l) >= toValue(r); + }, + '<=': (l, r) => { + if (isComparable(l)) + return l.leq(r); + if (isComparable(r)) + return r.geq(l); + return toValue(l) <= toValue(r); + }, + 'contains': (l, r) => { + l = toValue(l); + if (isArray(l)) + return l.some((i) => equals(i, r)); + if (isFunction(l?.indexOf)) + return l.indexOf(toValue(r)) > -1; + return false; + }, + 'not': (v, ctx) => isFalsy(toValue(v), ctx), + 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx), + 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx) +}; +function equals(lhs, rhs) { + if (isComparable(lhs)) + return lhs.equals(rhs); + if (isComparable(rhs)) + return rhs.equals(lhs); + lhs = toValue(lhs); + rhs = toValue(rhs); + if (isArray(lhs)) { + return isArray(rhs) && arrayEquals(lhs, rhs); + } + return lhs === rhs; +} +function arrayEquals(lhs, rhs) { + if (lhs.length !== rhs.length) + return false; + return !lhs.some((value, i) => !equals(value, rhs[i])); +} +function arrayIncludes(arr, item) { + return arr.some(value => equals(value, item)); +} + +class Node { + constructor(key, value, next, prev) { + this.key = key; + this.value = value; + this.next = next; + this.prev = prev; + } +} +class LRU { + constructor(limit, size = 0) { + this.limit = limit; + this.size = size; + this.cache = {}; + this.head = new Node('HEAD', null, null, null); + this.tail = new Node('TAIL', null, null, null); + this.head.next = this.tail; + this.tail.prev = this.head; + } + write(key, value) { + if (this.cache[key]) { + this.cache[key].value = value; + } + else { + const node = new Node(key, value, this.head.next, this.head); + this.head.next.prev = node; + this.head.next = node; + this.cache[key] = node; + this.size++; + this.ensureLimit(); + } + } + read(key) { + if (!this.cache[key]) + return; + const { value } = this.cache[key]; + this.remove(key); + this.write(key, value); + return value; + } + remove(key) { + const node = this.cache[key]; + node.prev.next = node.next; + node.next.prev = node.prev; + delete this.cache[key]; + this.size--; + } + clear() { + this.head.next = this.tail; + this.tail.prev = this.head; + this.size = 0; + this.cache = {}; + } + ensureLimit() { + if (this.size > this.limit) + this.remove(this.tail.prev.key); + } +} + +const requireResolve = (partial) => require.resolve(partial, { paths: ['.'] }); + +const statAsync = promisify(fs$1.stat); +const readFileAsync = promisify(fs$1.readFile); +async function exists(filepath) { + try { + await statAsync(filepath); + return true; + } + catch (err) { + return false; + } +} +function readFile(filepath) { + return readFileAsync(filepath, 'utf8'); +} +function existsSync(filepath) { + try { + fs$1.statSync(filepath); + return true; + } + catch (err) { + return false; + } +} +function readFileSync(filepath) { + return fs$1.readFileSync(filepath, 'utf8'); +} +function resolve(root, file, ext) { + if (!path.extname(file)) + file += ext; + return path.resolve(root, file); +} +function fallback(file) { + try { + return requireResolve(file); + } + catch (e) { } +} +function dirname(filepath) { + return path.dirname(filepath); +} +const realpathAsync = promisify(fs$1.realpath); +async function contains(root, file) { + try { + const realRoot = await realpathAsync(root); + const realFile = await realpathAsync(file); + const prefix = realRoot.endsWith(path.sep) ? realRoot : realRoot + path.sep; + return realFile.startsWith(prefix); + } + catch { + return false; + } +} +function containsSync(root, file) { + try { + const realRoot = fs$1.realpathSync(root); + const realFile = fs$1.realpathSync(file); + const prefix = realRoot.endsWith(path.sep) ? realRoot : realRoot + path.sep; + return realFile.startsWith(prefix); + } + catch { + return false; + } +} + +var fs = /*#__PURE__*/Object.freeze({ + __proto__: null, + exists: exists, + readFile: readFile, + existsSync: existsSync, + readFileSync: readFileSync, + resolve: resolve, + fallback: fallback, + dirname: dirname, + contains: contains, + containsSync: containsSync, + sep: path.sep +}); + +function chargeJsonReplacerValue(memoryLimit, val) { + if (typeof val === 'string') { + memoryLimit.use(val.length); + } + else if (val === null || typeof val === 'number' || typeof val === 'boolean') { + memoryLimit.use(JSON.stringify(val).length); + } + else if (Array.isArray(val)) { + memoryLimit.use(val.length + 1); + } + else if (typeof val === 'object') { + memoryLimit.use(2); + } +} +function defaultFilter(value, defaultValue, ...args) { + value = toValue(value); + if (isArray(value) || isString(value)) + return value.length ? value : defaultValue; + if (value === false && (new Map(args)).get('allow_false')) + return false; + return isFalsy(value, this.context) ? defaultValue : value; +} +function json(value, space = 0) { + const memoryLimit = this.context.memoryLimit; + return JSON.stringify(value, (_key, val) => { + chargeJsonReplacerValue(memoryLimit, val); + return val; + }, space); +} +function inspect(value, space = 0) { + const memoryLimit = this.context.memoryLimit; + const ancestors = []; + return JSON.stringify(value, function (_key, value) { + if (typeof value !== 'object' || value === null) { + chargeJsonReplacerValue(memoryLimit, value); + return value; + } + // `this` is the object that value is contained in, i.e., its direct parent. + while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) + ancestors.pop(); + if (ancestors.includes(value)) { + memoryLimit.use('[Circular]'.length); + return '[Circular]'; + } + ancestors.push(value); + chargeJsonReplacerValue(memoryLimit, value); + return value; + }, space); +} +function to_integer(value) { + return Number(value); +} +const raw = { + raw: true, + handler: identify +}; +var misc = { + default: defaultFilter, + raw, + jsonify: json, + to_integer, + json, + inspect +}; + +const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; +function escape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&|<|>|"|'/g, m => escapeMap[m]); +} +function xml_escape(str) { + return escape.call(this, str); +} +function unescape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]); +} +function escape_once(str) { + return escape.call(this, unescape.call(this, str)); +} +function newline_to_br(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, '
\n'); +} +// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex +// equivalent is O(n^2) in V8 on unclosed openers. +function strip_html(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + const blocks = new Map([[''], [''], [''], ['<', '>']]); + let out = ''; + let i = 0; + while (i < str.length) { + const lt = str.indexOf('<', i); + if (lt < 0) + return out + str.slice(i); + out += str.slice(i, lt); + for (const [opener, closer] of blocks) { + if (!str.startsWith(opener, lt)) + continue; + const e = str.indexOf(closer, lt + opener.length); + if (e >= 0) { + i = e + closer.length; + break; + } + blocks.delete(opener); + } + if (i <= lt) + return out + str.slice(lt); + } + return out; +} + +var htmlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + escape: escape, + xml_escape: xml_escape, + escape_once: escape_once, + newline_to_br: newline_to_br, + strip_html: strip_html +}); + +class MapFS { + constructor(mapping) { + this.mapping = mapping; + this.sep = '/'; + } + async exists(filepath) { + return this.existsSync(filepath); + } + existsSync(filepath) { + return !isNil(this.mapping[filepath]); + } + async readFile(filepath) { + return this.readFileSync(filepath); + } + readFileSync(filepath) { + const content = this.mapping[filepath]; + if (isNil(content)) + throw new Error(`ENOENT: ${filepath}`); + return content; + } + dirname(filepath) { + const segments = filepath.split(this.sep); + segments.pop(); + return segments.join(this.sep); + } + resolve(dir, file, ext) { + file += ext; + if (dir === '.') + return file; + const segments = dir.split(/\/+/); + for (const segment of file.split(this.sep)) { + if (segment === '.' || segment === '') + continue; + else if (segment === '..') { + if (segments.length > 1 || segments[0] !== '') + segments.pop(); + } + else + segments.push(segment); + } + return segments.join(this.sep); + } +} + +const defaultOptions = { + root: ['.'], + layouts: ['.'], + partials: ['.'], + relativeReference: true, + jekyllInclude: false, + keyValueSeparator: ':', + cache: undefined, + extname: '', + fs: fs, + dynamicPartials: true, + jsTruthy: false, + dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z', + locale: '', + trimTagRight: false, + trimTagLeft: false, + trimOutputRight: false, + trimOutputLeft: false, + greedy: true, + tagDelimiterLeft: '{%', + tagDelimiterRight: '%}', + outputDelimiterLeft: '{{', + outputDelimiterRight: '}}', + preserveTimezones: false, + strictFilters: false, + strictVariables: false, + ownPropertyOnly: true, + lenientIf: false, + globals: {}, + keepOutputType: false, + operators: defaultOperators, + groupedExpressions: false, + memoryLimit: Infinity, + parseLimit: Infinity, + renderLimit: Infinity +}; +function normalize(options) { + if (options.hasOwnProperty('root')) { + if (!options.hasOwnProperty('partials')) + options.partials = options.root; + if (!options.hasOwnProperty('layouts')) + options.layouts = options.root; + } + if (options.hasOwnProperty('cache')) { + let cache; + if (typeof options.cache === 'number') + cache = options.cache > 0 ? new LRU(options.cache) : undefined; + else if (typeof options.cache === 'object') + cache = options.cache; + else + cache = options.cache ? new LRU(1024) : undefined; + options.cache = cache; + } + options = { ...defaultOptions, ...(options.jekyllInclude ? { dynamicPartials: false } : {}), ...options }; + if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) { + console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning'); + options.relativeReference = false; + } + options.root = normalizeDirectoryList(options.root); + options.partials = normalizeDirectoryList(options.partials); + options.layouts = normalizeDirectoryList(options.layouts); + options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape); + if (!options.locale) { + options.locale = getDateTimeFormat()?.().resolvedOptions().locale ?? 'en-US'; + } + if (options.templates) { + options.fs = new MapFS(options.templates); + options.relativeReference = true; + options.root = options.partials = options.layouts = '.'; + } + return options; +} +function getOutputEscapeFunction(nameOrFunction) { + if (nameOrFunction === 'escape') + return escape; + if (nameOrFunction === 'json') + return misc.json; + assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function'); + return nameOrFunction; +} +function normalizeDirectoryList(value) { + let list = []; + if (isArray(value)) + list = value; + if (isString(value)) + list = [value]; + return list; +} + +function whiteSpaceCtrl(tokens, options) { + let inRaw = false; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (!isDelimitedToken(token)) + continue; + if (!inRaw && token.trimLeft) { + trimLeft(tokens[i - 1], options.greedy); + } + if (isTagToken(token)) { + if (token.name === 'raw') + inRaw = true; + else if (token.name === 'endraw') + inRaw = false; + } + if (!inRaw && token.trimRight) { + trimRight(tokens[i + 1], options.greedy); + } + } +} +function trimLeft(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + const mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) + token.trimRight++; +} +function trimRight(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + const mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) + token.trimLeft++; + if (token.input.charAt(token.begin + token.trimLeft) === '\n') + token.trimLeft++; +} + +class Tokenizer { + constructor(input, operators = defaultOptions.operators, file, range, groupedExpressions = false) { + this.input = input; + this.file = file; + this.rawBeginAt = -1; + this.p = range ? range[0] : 0; + this.N = range ? range[1] : input.length; + this.opTrie = createTrie(operators); + this.literalTrie = createTrie(literalValues); + this.groupedExpressions = groupedExpressions; + } + readExpression() { + return new Expression(this.readExpressionTokens()); + } + *readExpressionTokens() { + while (this.p < this.N) { + const operator = this.readOperator(); + if (operator) { + yield operator; + continue; + } + const operand = this.readValue(); + if (operand) { + yield operand; + continue; + } + return; + } + } + readOperator() { + this.skipBlank(); + const end = this.matchTrie(this.opTrie); + if (end === -1) + return; + return new OperatorToken(this.input, this.p, (this.p = end), this.file); + } + matchTrie(trie) { + let node = trie; + let i = this.p; + let info; + while (node[this.input[i]] && i < this.N) { + node = node[this.input[i++]]; + if (node['end']) + info = node; + } + if (!info) + return -1; + if (info['needBoundary'] && isWord(this.peek(i - this.p))) + return -1; + return i; + } + readFilteredValue() { + const begin = this.p; + const initial = this.readExpression(); + this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`); + const filters = this.readFilters(); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + readFilters() { + const filters = []; + while (true) { + const filter = this.readFilter(); + if (!filter) + return filters; + filters.push(filter); + } + } + readFilter() { + this.skipBlank(); + if (this.end()) + return null; + if (this.peek() === ')') + return null; + this.assert(this.read() === '|', `expected "|" before filter`); + const name = this.readIdentifier(); + if (!name.size()) { + this.assert(this.end(), `expected filter name`); + return null; + } + const args = []; + this.skipBlank(); + if (this.peek() === ':') { + do { + ++this.p; + const arg = this.readFilterArg(); + arg && args.push(arg); + this.skipBlank(); + this.assert(this.end() || this.peek() === ',' || this.peek() === '|' || this.peek() === ')', () => `unexpected character ${this.snapshot()}`); + } while (this.peek() === ','); + } + else if (this.peek() === '|' || this.peek() === ')' || this.end()) ; + else { + throw this.error('expected ":" after filter name'); + } + return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file); + } + readFilterArg() { + const key = this.readValue(); + if (!key) + return; + this.skipBlank(); + if (this.peek() !== ':') + return key; + ++this.p; + const value = this.readValue(); + return [key.getText(), value]; + } + readTopLevelTokens(options = defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readTopLevelToken(options); + tokens.push(token); + } + whiteSpaceCtrl(tokens, options); + return tokens; + } + readTopLevelToken(options) { + const { tagDelimiterLeft, outputDelimiterLeft } = options; + if (this.rawBeginAt > -1) + return this.readEndrawOrRawContent(options); + if (this.match(tagDelimiterLeft)) + return this.readTagToken(options); + if (this.match(outputDelimiterLeft)) + return this.readOutputToken(options); + return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]); + } + readHTMLToken(stopStrings) { + const begin = this.p; + while (this.p < this.N) { + if (stopStrings.some(str => this.match(str))) + break; + ++this.p; + } + return new HTMLToken(this.input, begin, this.p, this.file); + } + readTagToken(options) { + const { file, input } = this; + const begin = this.p; + if (this.readToDelimiter(options.tagDelimiterRight) === -1) { + throw this.error(`tag ${this.snapshot(begin)} not closed`, begin); + } + const token = new TagToken(input, begin, this.p, options, file); + if (token.name === 'raw') + this.rawBeginAt = begin; + return token; + } + readToDelimiter(delimiter, respectQuoted = false) { + this.skipBlank(); + while (this.p < this.N) { + if (respectQuoted && (this.peekType() & QUOTE)) { + this.readQuoted(); + continue; + } + ++this.p; + if (this.rmatch(delimiter)) + return this.p; + } + return -1; + } + readOutputToken(options = defaultOptions) { + const { file, input } = this; + const { outputDelimiterRight } = options; + const begin = this.p; + if (this.readToDelimiter(outputDelimiterRight, true) === -1) { + throw this.error(`output ${this.snapshot(begin)} not closed`, begin); + } + return new OutputToken(input, begin, this.p, options, file); + } + readEndrawOrRawContent(options) { + const { tagDelimiterLeft, tagDelimiterRight } = options; + const begin = this.p; + let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + while (this.p < this.N) { + if (this.readIdentifier().getText() !== 'endraw') { + leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + continue; + } + while (this.p <= this.N) { + if (this.rmatch(tagDelimiterRight)) { + const end = this.p; + if (begin === leftPos) { + this.rawBeginAt = -1; + return new TagToken(this.input, begin, end, options, this.file); + } + else { + this.p = leftPos; + return new HTMLToken(this.input, begin, leftPos, this.file); + } + } + if (this.rmatch(tagDelimiterLeft)) + break; + this.p++; + } + } + throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin); + } + readLiquidTagTokens(options = defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readLiquidTagToken(options); + token && tokens.push(token); + } + return tokens; + } + readLiquidTagToken(options) { + this.skipBlank(); + if (this.end()) + return; + const begin = this.p; + this.readToDelimiter('\n'); + const end = this.p; + return new LiquidTagToken(this.input, begin, end, options, this.file); + } + error(msg, pos = this.p) { + return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file)); + } + assert(pred, msg, pos) { + if (!pred) + throw this.error(typeof msg === 'function' ? msg() : msg, pos); + } + snapshot(begin = this.p) { + return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32)); + } + /** + * @deprecated use #readIdentifier instead + */ + readWord() { + return this.readIdentifier(); + } + readIdentifier() { + this.skipBlank(); + const begin = this.p; + while (!this.end() && isWord(this.peek())) + ++this.p; + return new IdentifierToken(this.input, begin, this.p, this.file); + } + readNonEmptyIdentifier() { + const id = this.readIdentifier(); + return id.size() ? id : undefined; + } + readTagName() { + this.skipBlank(); + // Handle inline comment tags + if (this.input[this.p] === '#') + return this.input.slice(this.p, ++this.p); + return this.readIdentifier().getText(); + } + readHashes(jekyllStyle) { + const hashes = []; + while (true) { + const hash = this.readHash(jekyllStyle); + if (!hash) + return hashes; + hashes.push(hash); + } + } + readHash(jekyllStyle) { + this.skipBlank(); + if (this.peek() === ',') + ++this.p; + const begin = this.p; + const name = this.readNonEmptyIdentifier(); + if (!name) + return; + let value; + this.skipBlank(); + const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':'); + if (this.peek() === sep) { + ++this.p; + value = this.readValue(); + } + return new HashToken(this.input, begin, this.p, name, value, this.file); + } + remaining() { + return this.input.slice(this.p, this.N); + } + advance(step = 1) { + this.p += step; + } + end() { + return this.p >= this.N; + } + read() { + return this.input[this.p++]; + } + readTo(end) { + while (this.p < this.N) { + ++this.p; + if (this.rmatch(end)) + return this.p; + } + return -1; + } + readValue() { + this.skipBlank(); + const begin = this.p; + let variable = this.readLiteral() || this.readQuoted() || this.readNumber(); + if (!variable && this.peek() === '(') { + variable = this.readGroupOrRange(); + } + const props = this.readProperties(!variable); + if (!props.length) + return variable; + return new PropertyAccessToken(variable, props, this.input, begin, this.p); + } + readScopeValue() { + this.skipBlank(); + const begin = this.p; + const props = this.readProperties(); + if (!props.length) + return undefined; + return new PropertyAccessToken(undefined, props, this.input, begin, this.p); + } + readProperties(isBegin = true) { + const props = []; + while (true) { + if (this.peek() === '[') { + this.p++; + const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file); + this.assert(this.readTo(']') !== -1, '[ not closed'); + props.push(prop); + continue; + } + if (isBegin && !props.length) { + const prop = this.readNonEmptyIdentifier(); + if (prop) { + props.push(prop); + continue; + } + } + if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax + this.p++; + const prop = this.readNonEmptyIdentifier(); + if (!prop) + break; + props.push(prop); + continue; + } + break; + } + return props; + } + readNumber() { + this.skipBlank(); + let decimalFound = false; + let digitFound = false; + let n = 0; + if (this.peekType() & SIGN) + n++; + while (this.p + n <= this.N) { + if (this.peekType(n) & NUMBER) { + digitFound = true; + n++; + } + else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') { + if (decimalFound || !digitFound) + return; + decimalFound = true; + n++; + } + else + break; + } + if (digitFound && !isWord(this.peek(n))) { + const num = new NumberToken(this.input, this.p, this.p + n, this.file); + this.advance(n); + return num; + } + } + readLiteral() { + this.skipBlank(); + const end = this.matchTrie(this.literalTrie); + if (end === -1) + return; + const literal = new LiteralToken(this.input, this.p, end, this.file); + this.p = end; + return literal; + } + readGroupOrRange() { + this.skipBlank(); + const begin = this.p; + if (this.peek() !== '(') + return; + ++this.p; + const lhs = this.readValueOrThrow(); + this.skipBlank(); + if (this.peek() === '.' && this.peek(1) === '.') { + this.p += 2; + const rhs = this.readValueOrThrow(); + this.skipBlank(); + this.assert(this.read() === ')', 'invalid range syntax'); + return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file); + } + if (this.groupedExpressions) { + const initial = new Expression([lhs, ...this.readExpressionTokens()]); + this.assert(initial.valid(), () => `invalid value expression: ${this.snapshot()}`); + const filters = this.readFilters(); + this.skipBlank(); + this.assert(this.read() === ')', 'unbalanced parentheses'); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + throw this.error('invalid range syntax'); + } + readValueOrThrow() { + const value = this.readValue(); + this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`); + return value; + } + readQuoted() { + this.skipBlank(); + const begin = this.p; + if (!(this.peekType() & QUOTE)) + return; + ++this.p; + let escaped = false; + while (this.p < this.N) { + ++this.p; + if (this.input[this.p - 1] === this.input[begin] && !escaped) + break; + if (escaped) + escaped = false; + else if (this.input[this.p - 1] === '\\') + escaped = true; + } + return new QuotedToken(this.input, begin, this.p, this.file); + } + *readFileNameTemplate(options) { + const { outputDelimiterLeft } = options; + const htmlStopStrings = [',', ' ', '\r', '\n', '\t', outputDelimiterLeft]; + const htmlStopStringSet = new Set(htmlStopStrings); + // break on ',' and ' ', outputDelimiterLeft only stops HTML token + while (this.p < this.N && !htmlStopStringSet.has(this.peek())) { + yield this.match(outputDelimiterLeft) + ? this.readOutputToken(options) + : this.readHTMLToken(htmlStopStrings); + } + } + match(word) { + for (let i = 0; i < word.length; i++) { + if (word[i] !== this.input[this.p + i]) + return false; + } + return true; + } + rmatch(pattern) { + for (let i = 0; i < pattern.length; i++) { + if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) + return false; + } + return true; + } + peekType(n = 0) { + return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)]; + } + peek(n = 0) { + return this.p + n >= this.N ? '' : this.input[this.p + n]; + } + skipBlank() { + while (this.peekType() & BLANK) + ++this.p; + } +} + +class ParseStream { + constructor(tokens, parseToken) { + this.handlers = {}; + this.stopRequested = false; + this.tokens = tokens; + this.parseToken = parseToken; + } + on(name, cb) { + this.handlers[name] = cb; + return this; + } + trigger(event, arg) { + const h = this.handlers[event]; + return h ? (h.call(this, arg), true) : false; + } + start() { + this.trigger('start'); + let token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) { + continue; + } + const template = this.parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + } + stop() { + this.stopRequested = true; + return this; + } +} + +class TemplateImpl { + constructor(token) { + this.token = token; + } +} + +class Tag extends TemplateImpl { + constructor(token, remainTokens, liquid) { + super(token); + this.name = token.name; + this.liquid = liquid; + this.tokenizer = token.tokenizer; + } +} + +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +class Hash { + constructor(input, jekyllStyle) { + this.hash = {}; + const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {}); + for (const hash of tokenizer.readHashes(jekyllStyle)) { + this.hash[hash.name.content] = hash.value; + } + } + *render(ctx) { + const hash = {}; + for (const key of Object.keys(this.hash)) { + hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx); + } + return hash; + } +} + +function createTagClass(options) { + return class extends Tag { + constructor(token, tokens, liquid) { + super(token, tokens, liquid); + if (isFunction(options.parse)) { + options.parse.call(this, token, tokens); + } + } + *render(ctx, emitter) { + const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx)); + return yield options.render.call(this, ctx, emitter, hash); + } + }; +} + +class Value { + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + constructor(input, liquid) { + this.filters = []; + const token = typeof input === 'string' + ? new Tokenizer(input, liquid.options.operators, undefined, undefined, liquid.options.groupedExpressions).readFilteredValue() + : input; + this.initial = token.initial; + this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid)); + } + *value(ctx, lenient) { + lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default'); + let val = yield this.initial.evaluate(ctx, lenient); + for (const filter of this.filters) { + val = yield filter.render(val, ctx); + } + return val; + } + getFilter(liquid, name) { + const impl = liquid.filters[name]; + assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`); + return impl; + } +} + +class Output extends TemplateImpl { + constructor(token, liquid) { + super(token); + const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange, liquid.options.groupedExpressions); + this.value = new Value(tokenizer.readFilteredValue(), liquid); + const filters = this.value.filters; + const outputEscape = liquid.options.outputEscape; + if (!filters[filters.length - 1]?.raw && outputEscape) { + const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0); + filters.push(new Filter(token, outputEscape, liquid)); + } + } + *render(ctx, emitter) { + const val = yield this.value.value(ctx, false); + emitter.write(val); + } + *arguments() { + yield this.value; + } +} + +class HTML extends TemplateImpl { + constructor(token) { + super(token); + this.str = token.getContent(); + } + *render(ctx, emitter) { + emitter.write(this.str); + } +} + +/** + * A variable's segments and location, which can be coerced to a string. + */ +class Variable { + constructor(segments, location) { + this.segments = segments; + this.location = location; + } + toString() { + return segmentsString(this.segments, true); + } + /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */ + toArray() { + function* _visit(...segments) { + for (const segment of segments) { + if (segment instanceof Variable) { + yield Array.from(_visit(...segment.segments)); + } + else { + yield segment; + } + } + } + return Array.from(_visit(...this.segments)); + } +} +/** + * Group variables by the string representation of their root segment. + */ +class VariableMap { + constructor() { + this.map = new Map(); + } + get(key) { + const k = segmentsString([key.segments[0]]); + if (!this.map.has(k)) { + this.map.set(k, []); + } + return this.map.get(k); + } + has(key) { + return this.map.has(segmentsString([key.segments[0]])); + } + push(variable) { + this.get(variable).push(variable); + } + asObject() { + return Object.fromEntries(this.map); + } +} +const defaultStaticAnalysisOptions = { + partials: true +}; +function* _analyze(templates, partials, sync) { + const variables = new VariableMap(); + const globals = new VariableMap(); + const locals = new VariableMap(); + const rootScope = new DummyScope(new Set()); + // Names of partial templates that we've already analyzed. + const seen = new Set(); + function updateVariables(variable, scope) { + variables.push(variable); + const aliased = scope.alias(variable); + if (aliased !== undefined) { + const root = aliased.segments[0]; + // TODO: What if a a template renders a rendered template? Do we need scope.parent? + if (isString(root) && !rootScope.has(root)) { + globals.push(aliased); + } + } + else { + const root = variable.segments[0]; + if (isString(root) && !scope.has(root)) { + globals.push(variable); + } + } + // Recurse for nested Variables + for (const segment of variable.segments) { + if (segment instanceof Variable) { + updateVariables(segment, scope); + } + } + } + function* visit(template, scope) { + if (template.arguments) { + for (const arg of template.arguments()) { + for (const variable of extractVariables(arg)) { + updateVariables(variable, scope); + } + } + } + if (template.localScope) { + for (const ident of template.localScope()) { + scope.add(ident.content); + scope.deleteAlias(ident.content); + const [row, col] = ident.getPosition(); + locals.push(new Variable([ident.content], { row, col, file: ident.file })); + } + } + if (template.children) { + if (template.partialScope) { + const partial = template.partialScope(); + if (partial === undefined) { + // Layouts, for example, can have children that are not partials. + for (const child of (yield template.children(partials, sync))) { + yield visit(child, scope); + } + return; + } + if (seen.has(partial.name)) + return; + const partialScopeNames = new Set(); + const partialScope = partial.isolated + ? new DummyScope(partialScopeNames) + : scope.push(partialScopeNames); + for (const name of partial.scope) { + if (isString(name)) { + partialScopeNames.add(name); + } + else { + const [alias, argument] = name; + partialScopeNames.add(alias); + const variables = Array.from(extractVariables(argument)); + if (variables.length) { + partialScope.setAlias(alias, variables[0].segments); + } + } + } + for (const child of (yield template.children(partials, sync))) { + yield visit(child, partialScope); + seen.add(partial.name); + } + partialScope.pop(); + } + else { + if (template.blockScope) { + scope.push(new Set(template.blockScope())); + } + for (const child of (yield template.children(partials, sync))) { + yield visit(child, scope); + } + if (template.blockScope) { + scope.pop(); + } + } + } + } + for (const template of templates) { + yield visit(template, rootScope); + } + return { + variables: variables.asObject(), + globals: globals.asObject(), + locals: locals.asObject() + }; +} +/** + * Statically analyze a template and report variable usage. + */ +function analyze(template, options = {}) { + const opts = { ...defaultStaticAnalysisOptions, ...options }; + return toPromise(_analyze(template, opts.partials, false)); +} +/** + * Statically analyze a template and report variable usage. + */ +function analyzeSync(template, options = {}) { + const opts = { ...defaultStaticAnalysisOptions, ...options }; + return toValueSync(_analyze(template, opts.partials, true)); +} +/** + * A stack to manage scopes while traversing templates during static analysis. + */ +class DummyScope { + constructor(globals) { + this.stack = [{ names: globals, aliases: new Map() }]; + } + /** Return true if `name` is in scope. */ + has(name) { + for (const scope of this.stack) { + if (scope.names.has(name)) { + return true; + } + } + return false; + } + push(scope) { + this.stack.push({ names: scope, aliases: new Map() }); + return this; + } + pop() { + return this.stack.pop()?.names; + } + // Add a name to the template scope. + add(name) { + this.stack[0].names.add(name); + } + /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */ + alias(variable) { + const root = variable.segments[0]; + if (!isString(root)) + return undefined; + const alias = this.getAlias(root); + if (alias === undefined) + return undefined; + return new Variable([...alias, ...variable.segments.slice(1)], variable.location); + } + // TODO: `from` could be a path with multiple segments, like `include.x`. + setAlias(from, to) { + this.stack[this.stack.length - 1].aliases.set(from, to); + } + deleteAlias(name) { + this.stack[this.stack.length - 1].aliases.delete(name); + } + getAlias(name) { + for (const scope of this.stack) { + if (scope.aliases.has(name)) { + return scope.aliases.get(name); + } + // If a scope has defined `name`, then it masks aliases in parent scopes. + if (scope.names.has(name)) { + return undefined; + } + } + return undefined; + } +} +function* extractVariables(value) { + if (isValueToken(value)) { + yield* extractValueTokenVariables(value); + } + else if (value instanceof Value) { + yield* extractFilteredValueVariables(value); + } +} +function* extractFilteredValueVariables(value) { + for (const token of value.initial.postfix) { + if (isValueToken(token)) { + yield* extractValueTokenVariables(token); + } + } + for (const filter of value.filters) { + for (const arg of filter.args) { + if (isKeyValuePair(arg) && arg[1]) { + yield* extractValueTokenVariables(arg[1]); + } + else if (isValueToken(arg)) { + yield* extractValueTokenVariables(arg); + } + } + } +} +function* extractValueTokenVariables(token) { + if (isRangeToken(token)) { + yield* extractValueTokenVariables(token.lhs); + yield* extractValueTokenVariables(token.rhs); + } + else if (isFilteredValueToken(token)) { + yield* extractGroupedExpressionTokenVariables(token); + } + else if (isPropertyAccessToken(token)) { + yield extractPropertyAccessVariable(token); + } +} +function* extractGroupedExpressionTokenVariables(token) { + if (!isFilteredValueToken(token)) + return; + for (const t of token.initial.postfix) { + if (isValueToken(t)) + yield* extractValueTokenVariables(t); + } + for (const filter of token.filters) { + for (const arg of filter.args) { + if (isKeyValuePair(arg) && arg[1]) { + yield* extractValueTokenVariables(arg[1]); + } + else if (isValueToken(arg)) { + yield* extractValueTokenVariables(arg); + } + } + } +} +function extractPropertyAccessVariable(token) { + const segments = []; + // token is not guaranteed to have `file` set. We'll try to get it from a prop if not. + let file = token.file; + // Here we're flattening the first segment of a path if it is a nested path. + const root = token.props[0]; + file = file || root.file; + if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) { + segments.push(root.content); + } + else if (isPropertyAccessToken(root)) { + // Flatten paths that start with a nested path. + segments.push(...extractPropertyAccessVariable(root).segments); + } + for (const prop of token.props.slice(1)) { + file = file || prop.file; + if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) { + segments.push(prop.content); + } + else if (isPropertyAccessToken(prop)) { + segments.push(extractPropertyAccessVariable(prop)); + } + } + const [row, col] = token.getPosition(); + return new Variable(segments, { + row, + col, + file + }); +} +// This is used to detect segments that can be represented with dot notation +// when creating a string representation of VariableSegments. +const RE_PROPERTY = /^[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*$/; +/** + * Return a string representation of segments using dot notation where possible. + * @param segments - The property names and array indices that make up a path to a variable. + * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets. + */ +function segmentsString(segments, bracketedRoot = false) { + const buf = []; + const root = segments[0]; + if (isString(root)) { + if (!bracketedRoot || root.match(RE_PROPERTY)) { + buf.push(`${root}`); + } + else { + buf.push(`['${root}']`); + } + } + for (const segment of segments.slice(1)) { + if (segment instanceof Variable) { + buf.push(`[${segmentsString(segment.segments)}]`); + } + else if (isString(segment)) { + if (segment.match(RE_PROPERTY)) { + buf.push(`.${segment}`); + } + else { + buf.push(`['${segment}']`); + } + } + else { + buf.push(`[${segment}]`); + } + } + return buf.join(''); +} + +(function (LookupType) { + LookupType["Partials"] = "partials"; + LookupType["Layouts"] = "layouts"; + LookupType["Root"] = "root"; +})(exports.LookupType || (exports.LookupType = {})); +class Loader { + constructor(options) { + this.options = options; + if (options.relativeReference) { + const sep = options.fs.sep; + assert(sep, '`fs.sep` is required for relative reference'); + const prefixes = ['.' + sep, '..' + sep, './', '../']; + this.shouldLoadRelative = (referencedFile) => prefixes.some(prefix => referencedFile.startsWith(prefix)); + } + else { + this.shouldLoadRelative = (_referencedFile) => false; + } + const fs = options.fs; + this.contains = toLiquidAsync(fs.contains?.bind(fs) || (async () => true), fs.containsSync?.bind(fs) || (() => true)); + this.exists = toLiquidAsync(fs.exists?.bind(fs) || (async () => false), fs.existsSync?.bind(fs)); + } + *lookup(file, type, sync, currentFile) { + const dirs = this.options[type]; + for (const filepath of this.candidates(file, dirs, currentFile)) { + let allowed = false; + for (const dir of dirs) { + if (yield this.contains(!!sync, dir, filepath)) { + allowed = true; + break; + } + } + if (!allowed) + continue; + if (yield this.exists(!!sync, filepath)) + return filepath; + } + throw this.lookupError(file, dirs); + } + *candidates(file, dirs, currentFile) { + const { fs, extname } = this.options; + if (this.shouldLoadRelative(file) && currentFile) { + const referenced = fs.resolve(this.dirname(currentFile), file, extname); + yield referenced; + } + for (const dir of dirs) { + const referenced = fs.resolve(dir, file, extname); + yield referenced; + } + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file); + if (filepath !== undefined) + yield filepath; + } + } + dirname(path) { + const fs = this.options.fs; + assert(fs.dirname, '`fs.dirname` is required for relative reference'); + return fs.dirname(path); + } + lookupError(file, roots) { + const err = new Error('ENOENT'); + err.message = `ENOENT: Failed to lookup "${file}" in "${roots}"`; + err.code = 'ENOENT'; + return err; + } +} + +class Parser { + constructor(liquid) { + this.liquid = liquid; + this.cache = this.liquid.options.cache; + this.fs = this.liquid.options.fs; + this.parseFile = this.cache ? this._parseFileCached : this._parseFile; + this.loader = new Loader(this.liquid.options); + this.parseLimit = new Limiter('parse length', liquid.options.parseLimit); + this.readFile = toLiquidAsync(this.fs.readFile?.bind(this.fs) || (async () => { throw new Error('readFile not implemented'); }), this.fs.readFileSync?.bind(this.fs)); + } + parse(html, filepath) { + html = String(html); + this.parseLimit.use(html.length); + const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath, undefined, this.liquid.options.groupedExpressions); + const tokens = tokenizer.readTopLevelTokens(this.liquid.options); + return this.parseTokens(tokens); + } + parseTokens(tokens) { + let token; + const templates = []; + const errors = []; + while ((token = tokens.shift())) { + try { + templates.push(this.parseToken(token, tokens)); + } + catch (err) { + if (this.liquid.options.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) + throw new LiquidErrors(errors); + return templates; + } + parseToken(token, remainTokens) { + try { + if (isTagToken(token)) { + const TagClass = this.liquid.tags[token.name]; + assert(TagClass, `tag "${token.name}" not found`); + return new TagClass(token, remainTokens, this.liquid, this); + } + if (isOutputToken(token)) { + return new Output(token, this.liquid); + } + return new HTML(token); + } + catch (e) { + if (LiquidError.is(e)) + throw e; + throw new ParseError(e, token); + } + } + parseStream(tokens) { + return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens)); + } + *_parseFileCached(file, sync, type = exports.LookupType.Root, currentFile) { + const cache = this.cache; + const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file; + const tpls = yield cache.read(key); + if (tpls) + return tpls; + const task = this._parseFile(file, sync, type, currentFile); + // sync mode: exec the task and cache the result + // async mode: cache the task before exec + const taskOrTpl = sync ? yield task : toPromise(task); + cache.write(key, taskOrTpl); + // note: concurrent tasks will be reused, cache for failed task is removed until its end + try { + return yield taskOrTpl; + } + catch (err) { + cache.remove(key); + throw err; + } + } + *_parseFile(file, sync, type = exports.LookupType.Root, currentFile) { + const filepath = yield this.loader.lookup(file, type, sync, currentFile); + return this.parse(yield this.readFile(!!sync, filepath), filepath); + } +} + +(function (TokenKind) { + TokenKind[TokenKind["Number"] = 1] = "Number"; + TokenKind[TokenKind["Literal"] = 2] = "Literal"; + TokenKind[TokenKind["Tag"] = 4] = "Tag"; + TokenKind[TokenKind["Output"] = 8] = "Output"; + TokenKind[TokenKind["HTML"] = 16] = "HTML"; + TokenKind[TokenKind["Filter"] = 32] = "Filter"; + TokenKind[TokenKind["Hash"] = 64] = "Hash"; + TokenKind[TokenKind["PropertyAccess"] = 128] = "PropertyAccess"; + TokenKind[TokenKind["Word"] = 256] = "Word"; + TokenKind[TokenKind["Range"] = 512] = "Range"; + TokenKind[TokenKind["Quoted"] = 1024] = "Quoted"; + TokenKind[TokenKind["Operator"] = 2048] = "Operator"; + TokenKind[TokenKind["FilteredValue"] = 4096] = "FilteredValue"; + TokenKind[TokenKind["GroupedExpression"] = 8192] = "GroupedExpression"; + TokenKind[TokenKind["Delimited"] = 12] = "Delimited"; +})(exports.TokenKind || (exports.TokenKind = {})); + +function isDelimitedToken(val) { + return !!(getKind(val) & exports.TokenKind.Delimited); +} +function isOperatorToken(val) { + return getKind(val) === exports.TokenKind.Operator; +} +function isHTMLToken(val) { + return getKind(val) === exports.TokenKind.HTML; +} +function isOutputToken(val) { + return getKind(val) === exports.TokenKind.Output; +} +function isTagToken(val) { + return getKind(val) === exports.TokenKind.Tag; +} +function isQuotedToken(val) { + return getKind(val) === exports.TokenKind.Quoted; +} +function isLiteralToken(val) { + return getKind(val) === exports.TokenKind.Literal; +} +function isNumberToken(val) { + return getKind(val) === exports.TokenKind.Number; +} +function isPropertyAccessToken(val) { + return getKind(val) === exports.TokenKind.PropertyAccess; +} +function isWordToken(val) { + return getKind(val) === exports.TokenKind.Word; +} +function isRangeToken(val) { + return getKind(val) === exports.TokenKind.Range; +} +function isFilteredValueToken(val) { + return getKind(val) === exports.TokenKind.FilteredValue; +} +function isValueToken(val) { + // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range | TokenKind.FilteredValue + return (getKind(val) & 5763) > 0; +} +function getKind(val) { + return val ? val.kind : -1; +} + +var typeGuards = /*#__PURE__*/Object.freeze({ + __proto__: null, + isDelimitedToken: isDelimitedToken, + isOperatorToken: isOperatorToken, + isHTMLToken: isHTMLToken, + isOutputToken: isOutputToken, + isTagToken: isTagToken, + isQuotedToken: isQuotedToken, + isLiteralToken: isLiteralToken, + isNumberToken: isNumberToken, + isPropertyAccessToken: isPropertyAccessToken, + isWordToken: isWordToken, + isRangeToken: isRangeToken, + isFilteredValueToken: isFilteredValueToken, + isValueToken: isValueToken +}); + +/****************************************************************************** +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. +***************************************************************************** */ + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function createScope(from) { + const scope = Object.create(null); + if (from) + Object.assign(scope, from); + return scope; +} + +class Context { + constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit, liquid } = {}) { + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + this.scopes = [createScope()]; + this.registers = {}; + this.breakCalled = false; + this.continueCalled = false; + this.sync = !!renderOptions.sync; + this.opts = opts; + this.globals = renderOptions.globals ?? opts.globals; + this.environments = isObject(env) ? env : Object(env); + this.strictVariables = renderOptions.strictVariables ?? this.opts.strictVariables; + this.ownPropertyOnly = renderOptions.ownPropertyOnly ?? opts.ownPropertyOnly; + this.memoryLimit = memoryLimit ?? new Limiter('memory alloc', renderOptions.memoryLimit ?? opts.memoryLimit); + this.renderLimit = renderLimit ?? new Limiter('template render', getPerformance().now() + (renderOptions.renderLimit ?? opts.renderLimit)); + this.liquid = liquid; + } + getRegister(key, defaultValue = undefined) { + return (this.registers[key] = this.registers[key] || defaultValue); + } + setRegister(key, value) { + return (this.registers[key] = value); + } + saveRegister(...keys) { + return keys.map(key => [key, this.getRegister(key)]); + } + restoreRegister(keyValues) { + return keyValues.forEach(([key, value]) => this.setRegister(key, value)); + } + getAll() { + return [this.globals, this.environments, ...this.scopes] + .reduce((ctx, val) => __assign(ctx, val), {}); + } + /** + * @deprecated use `_get()` or `getSync()` instead + */ + get(paths) { + return this.getSync(paths); + } + getSync(paths) { + return toValueSync(this._get(paths)); + } + *_get(paths) { + const scope = this.findScope(paths[0]); // first prop should always be a string + return yield this._getFromScope(scope, paths); + } + /** + * @deprecated use `_get()` instead + */ + getFromScope(scope, paths) { + return toValueSync(this._getFromScope(scope, paths)); + } + *_getFromScope(scope, paths, strictVariables = this.strictVariables) { + if (isString(paths)) + paths = paths.split('.'); + for (let i = 0; i < paths.length; i++) { + scope = yield this.readProperty(scope, paths[i]); + if (strictVariables && isUndefined(scope)) { + throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.')); + } + } + return scope; + } + push(ctx) { + return this.scopes.push(ctx); + } + pop() { + return this.scopes.pop(); + } + bottom() { + return this.scopes[0]; + } + spawn(scope = {}) { + return new Context(scope, this.opts, { + sync: this.sync, + globals: this.globals, + strictVariables: this.strictVariables, + ownPropertyOnly: this.ownPropertyOnly + }, { + renderLimit: this.renderLimit, + memoryLimit: this.memoryLimit, + liquid: this.liquid + }); + } + findScope(key) { + for (let i = this.scopes.length - 1; i >= 0; i--) { + const candidate = this.scopes[i]; + if (key in candidate) + return candidate; + } + if (key in this.environments) + return this.environments; + return this.globals; + } + readProperty(obj, key) { + obj = toLiquid(obj); + key = toValue(key); + if (isNil(obj)) + return obj; + if (isArray(obj) && isNumber(key)) + return readArrayElement(obj, key, this.ownPropertyOnly); + const value = readJSProperty(obj, key, this.ownPropertyOnly); + if (value === undefined && obj instanceof Drop) + return obj.liquidMethodMissing(key, this); + if (isFunction(value)) + return value.call(obj); + if (key === 'size') + return readSize(obj); + else if (key === 'first') + return readFirst(obj, this.ownPropertyOnly); + else if (key === 'last') + return readLast(obj, this.ownPropertyOnly); + return value; + } +} +function readJSProperty(obj, key, ownPropertyOnly) { + if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop)) + return undefined; + return obj[key]; +} +function readFirst(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, 0, ownPropertyOnly); + return readJSProperty(obj, 'first', ownPropertyOnly); +} +function readLast(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, -1, ownPropertyOnly); + return readJSProperty(obj, 'last', ownPropertyOnly); +} +function readSize(obj) { + if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined) + return obj['size']; + if (isArray(obj) || isString(obj)) + return obj.length; + if (typeof obj === 'object') + return Object.keys(obj).length; +} + +var BlockMode; +(function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; +})(BlockMode || (BlockMode = {})); + +const abs = argumentsToNumber(Math.abs); +const at_least = argumentsToNumber(Math.max); +const at_most = argumentsToNumber(Math.min); +const ceil = argumentsToNumber(Math.ceil); +const divided_by = argumentsToNumber((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor); +const floor = argumentsToNumber(Math.floor); +const minus = argumentsToNumber((v, arg) => v - arg); +const plus = argumentsToNumber((lhs, rhs) => lhs + rhs); +const modulo = argumentsToNumber((v, arg) => ((v % arg) + arg) % arg); +const times = argumentsToNumber((v, arg) => v * arg); +function round(v, arg = 0) { + v = toNumber(v); + arg = toNumber(arg); + const amp = Math.pow(10, arg); + const scaled = (v * amp) * (1 + Number.EPSILON); + return Math.round(scaled) / amp; +} + +var mathFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + abs: abs, + at_least: at_least, + at_most: at_most, + ceil: ceil, + divided_by: divided_by, + floor: floor, + minus: minus, + plus: plus, + modulo: modulo, + times: times, + round: round +}); + +const url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\+/g, ' '); +const url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+'); +const cgi_escape = (x) => encodeURIComponent(stringify(x)) + .replace(/%20/g, '+') + .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase()); +const uri_escape = (x) => encodeURI(stringify(x)) + .replace(/%5B/g, '[') + .replace(/%5D/g, ']'); +const rSlugifyDefault = /[^\p{M}\p{L}\p{Nd}]+/ug; +const rSlugifyReplacers = { + 'raw': /\s+/g, + 'default': rSlugifyDefault, + 'pretty': /[^\p{M}\p{L}\p{Nd}._~!$&'()+,;=@]+/ug, + 'ascii': /[^A-Za-z0-9]+/g, + 'latin': rSlugifyDefault, + 'none': null +}; +function slugify(str, mode = 'default', cased = false) { + str = stringify(str); + const replacer = rSlugifyReplacers[mode]; + if (replacer) { + if (mode === 'latin') + str = removeAccents(str); + str = str.replace(replacer, '-').replace(/^-|-$/g, ''); + } + return cased ? str : str.toLowerCase(); +} +function removeAccents(str) { + return str.replace(/[àáâãäå]/g, 'a') + .replace(/[æ]/g, 'ae') + .replace(/[ç]/g, 'c') + .replace(/[èéêë]/g, 'e') + .replace(/[ìíîï]/g, 'i') + .replace(/[ð]/g, 'd') + .replace(/[ñ]/g, 'n') + .replace(/[òóôõöø]/g, 'o') + .replace(/[ùúûü]/g, 'u') + .replace(/[ýÿ]/g, 'y') + .replace(/[ß]/g, 'ss') + .replace(/[œ]/g, 'oe') + .replace(/[þ]/g, 'th') + .replace(/[ẞ]/g, 'SS') + .replace(/[Œ]/g, 'OE') + .replace(/[Þ]/g, 'TH'); +} + +var urlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + url_decode: url_decode, + url_encode: url_encode, + cgi_escape: cgi_escape, + uri_escape: uri_escape, + slugify: slugify +}); + +const join = argumentsToValue(function (v, arg) { + const array = toArray(v); + const sep = isNil(arg) ? ' ' : stringify(arg); + let outputSize = sep.length * Math.max(array.length - 1, 0); + for (let i = 0; i < array.length; i++) + outputSize += String(array[i]).length; + this.context.memoryLimit.use(outputSize); + return Array.prototype.join.call(array, sep); +}); +const last = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, -1, this.context.ownPropertyOnly) : ''; +}); +const first = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, 0, this.context.ownPropertyOnly) : ''; +}); +const reverse = argumentsToValue(function (v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + return [...array].reverse(); +}); +function* sortBy(arr, property, comparator) { + const values = []; + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + values.push([ + item, + property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item + ]); + } + return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0]); +} +function* sort(arr, property) { + return yield* sortBy.call(this, arr, property, orderedCompare); +} +function* sort_natural(arr, property) { + return yield* sortBy.call(this, arr, property, caseInsensitiveCompare); +} +const size = (v) => (v && v.length) || 0; +function* map(arr, property) { + const results = []; + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + results.push(yield this.context._getFromScope(item, stringify(property), false)); + } + return results; +} +function* sum(arr, property) { + let sum = 0; + const array = toArray(arr); + for (const item of array) { + const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item); + sum += Number.isNaN(data) ? 0 : data; + } + return sum; +} +function compact(arr) { + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + return Array.prototype.filter.call(array, x => !isNil(toValue(x))); +} +function concat(v, arg = []) { + const lhs = toArray(v); + const rhs = toArray(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return Array.prototype.concat.call(lhs, rhs); +} +function push(v, arg) { + return concat.call(this, v, [arg]); +} +function unshift(v, arg) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.unshift(arg); + return clone; +} +function pop(v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.pop(); + return clone; +} +function shift(v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.shift(); + return clone; +} +function slice(v, begin, length = 1) { + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + begin = begin < 0 ? v.length + begin : begin; + if (begin < 0 || length < 0) + return isArray(v) ? [] : ''; + this.context.memoryLimit.use(length); + return isArray(v) + ? Array.prototype.slice.call(v, begin, begin + length) + : String.prototype.slice.call(v, begin, begin + length); +} +function expectedMatcher(expected) { + if (this.context.opts.jekyllWhere) { + return (v) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected)); + } + else if (expected === undefined) { + return (v) => isTruthy(v, this.context); + } + else { + return (v) => equals(v, expected); + } +} +function* filter(include, arr, property, expected) { + const values = []; + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + const token = new Tokenizer(stringify(property)).readScopeValue(); + for (const item of arr) { + values.push(yield evalToken(token, this.context.spawn(item))); + } + const matcher = expectedMatcher.call(this, expected); + return Array.prototype.filter.call(arr, (_, i) => matcher(values[i]) === include); +} +function* filter_exp(include, arr, itemName, exp) { + const filtered = []; + const keyTemplate = new Value(stringify(exp), this.liquid); + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + this.context.push({ [itemName]: item }); + const value = yield keyTemplate.value(this.context); + this.context.pop(); + if (value === include) + filtered.push(item); + } + return filtered; +} +function* where(arr, property, expected) { + return yield* filter.call(this, true, arr, property, expected); +} +function* reject(arr, property, expected) { + return yield* filter.call(this, false, arr, property, expected); +} +function* where_exp(arr, itemName, exp) { + return yield* filter_exp.call(this, true, arr, itemName, exp); +} +function* reject_exp(arr, itemName, exp) { + return yield* filter_exp.call(this, false, arr, itemName, exp); +} +function* group_by(arr, property) { + const map = new Map(); + arr = toEnumerable(arr); + const token = new Tokenizer(stringify(property)).readScopeValue(); + this.context.memoryLimit.use(arr.length); + for (const item of arr) { + const key = yield evalToken(token, this.context.spawn(item)); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + } + return [...map.entries()].map(([name, items]) => ({ name, items })); +} +function* group_by_exp(arr, itemName, exp) { + const map = new Map(); + const keyTemplate = new Value(stringify(exp), this.liquid); + arr = toEnumerable(arr); + this.context.memoryLimit.use(arr.length); + for (const item of arr) { + this.context.push({ [itemName]: item }); + const key = yield keyTemplate.value(this.context); + this.context.pop(); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + } + return [...map.entries()].map(([name, items]) => ({ name, items })); +} +function* search(arr, property, expected) { + const token = new Tokenizer(stringify(property)).readScopeValue(); + const array = toArray(arr); + const matcher = expectedMatcher.call(this, expected); + for (let index = 0; index < array.length; index++) { + const value = yield evalToken(token, this.context.spawn(array[index])); + if (matcher(value)) + return [index, array[index]]; + } +} +function* search_exp(arr, itemName, exp) { + const predicate = new Value(stringify(exp), this.liquid); + const array = toArray(arr); + for (let index = 0; index < array.length; index++) { + this.context.push({ [itemName]: array[index] }); + const value = yield predicate.value(this.context); + this.context.pop(); + if (value) + return [index, array[index]]; + } +} +function* has(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return !!result; +} +function* has_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return !!result; +} +function* find_index(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return result ? result[0] : undefined; +} +function* find_index_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return result ? result[0] : undefined; +} +function* find(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return result ? result[1] : undefined; +} +function* find_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return result ? result[1] : undefined; +} +function uniq(arr) { + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + return [...new Set(arr)]; +} +function sample(v, count = 1) { + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + this.context.memoryLimit.use(v.length); + const shuffled = [...v].sort(() => Math.random() - 0.5); + if (count === 1) + return shuffled[0]; + return shuffled.slice(0, count); +} + +var arrayFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + join: join, + last: last, + first: first, + reverse: reverse, + sort: sort, + sort_natural: sort_natural, + size: size, + map: map, + sum: sum, + compact: compact, + concat: concat, + push: push, + unshift: unshift, + pop: pop, + shift: shift, + slice: slice, + where: where, + reject: reject, + where_exp: where_exp, + reject_exp: reject_exp, + group_by: group_by, + group_by_exp: group_by_exp, + has: has, + has_exp: has_exp, + find_index: find_index, + find_index_exp: find_index_exp, + find: find, + find_exp: find_exp, + uniq: uniq, + sample: sample +}); + +function date(v, format, timezoneOffset) { + const size = (v?.length ?? 0) + (timezoneOffset?.length ?? 0); + this.context.memoryLimit.use(size); + const date = parseDate(v, this.context.opts, timezoneOffset); + if (!date) + return v; + format = toValue(format); + format = isNil(format) ? this.context.opts.dateFormat : stringify(format); + this.context.memoryLimit.use(format.length); + return strftime(date, format, this.context.memoryLimit); +} +function date_to_xmlschema(v) { + return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z'); +} +function date_to_rfc822(v) { + return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z'); +} +function date_to_string(v, type, style) { + return stringify_date.call(this, v, '%b', type, style); +} +function date_to_long_string(v, type, style) { + return stringify_date.call(this, v, '%B', type, style); +} +function stringify_date(v, month_type, type, style) { + const date = parseDate(v, this.context.opts); + if (!date) + return v; + const ml = this.context.memoryLimit; + if (type === 'ordinal') { + const d = date.getDate(); + return style === 'US' + ? strftime(date, `${month_type} ${d}%q, %Y`, ml) + : strftime(date, `${d}%q ${month_type} %Y`, ml); + } + return strftime(date, `%d ${month_type} %Y`, ml); +} +function parseDate(v, opts, timezoneOffset) { + let date; + const defaultTimezoneOffset = timezoneOffset ?? opts.timezoneOffset; + const locale = opts.locale; + v = toValue(v); + if (isNil(v)) { + return undefined; + } + else if (v === 'now' || v === 'today') { + date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset); + } + else if (isNumber(v)) { + date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset); + } + else if (isString(v)) { + if (/^\d+$/.test(v)) { + date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset); + } + else if (opts.preserveTimezones && timezoneOffset === undefined) { + date = LiquidDate.createDateFixedToTimezone(v, locale); + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + return date.valid() ? date : undefined; +} + +var dateFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + date: date, + date_to_xmlschema: date_to_xmlschema, + date_to_rfc822: date_to_rfc822, + date_to_string: date_to_string, + date_to_long_string: date_to_long_string +}); + +/** + * String related filters + * + * * prefer stringify() to String() since `undefined`, `null` should eval '' + */ +const rCJKWord = /[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF]/gu; +// Word boundary followed by word characters (for detecting words) +const rNonCJKWord = /[^\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF\s]+/gu; +function append(v, arg) { + assert(arguments.length === 2, 'append expect 2 arguments'); + const lhs = stringify(v); + const rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return lhs + rhs; +} +function prepend(v, arg) { + assert(arguments.length === 2, 'prepend expect 2 arguments'); + const lhs = stringify(v); + const rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return rhs + lhs; +} +function lstrip(v, chars) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (let i = 0, set = new Set(chars); i < str.length; i++) { + if (!set.has(str[i])) + return str.slice(i); + } + return ''; + } + return str.trimStart(); +} +function downcase(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.toLowerCase(); +} +function upcase(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return stringify(str).toUpperCase(); +} +function remove(v, arg) { + const str = stringify(v); + arg = stringify(arg); + this.context.memoryLimit.use(str.length + arg.length); + return str.split(arg).join(''); +} +function remove_first(v, l) { + const str = stringify(v); + l = stringify(l); + this.context.memoryLimit.use(str.length + l.length); + return str.replace(l, ''); +} +function remove_last(v, l) { + const str = stringify(v); + const pattern = stringify(l); + this.context.memoryLimit.use(str.length + pattern.length); + const index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + str.substring(index + pattern.length); +} +function rstrip(str, chars) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) { + if (!set.has(str[i])) + return str.slice(0, i + 1); + } + return ''; + } + return str.trimEnd(); +} +function split(v, arg) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + const arr = str.split(stringify(arg)); + // align to ruby split, which is the behavior of shopify/liquid + // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split + while (arr.length && arr[arr.length - 1] === '') + arr.pop(); + return arr; +} +function strip(v, chars) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + const set = new Set(stringify(chars)); + this.context.memoryLimit.use(set.size); + let i = 0; + let j = str.length - 1; + while (set.has(str[i])) + i++; + while (j >= i && set.has(str[j])) + j--; + return str.slice(i, j + 1); + } + return str.trim(); +} +function strip_newlines(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, ''); +} +function capitalize(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +} +function replace(v, pattern, replacement) { + const str = stringify(v); + pattern = stringify(pattern); + replacement = stringify(replacement); + const parts = str.split(pattern); + const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length); + this.context.memoryLimit.use(outputSize); + return parts.join(replacement); +} +function replace_first(v, arg1, arg2) { + const str = stringify(v); + arg1 = stringify(arg1); + arg2 = stringify(arg2); + this.context.memoryLimit.use(str.length + arg1.length + arg2.length); + return str.replace(arg1, () => arg2); +} +function replace_last(v, arg1, arg2) { + const str = stringify(v); + const pattern = stringify(arg1); + const replacement = stringify(arg2); + this.context.memoryLimit.use(str.length + pattern.length + replacement.length); + const index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + replacement + str.substring(index + pattern.length); +} +function truncate(v, l = 50, o = '...') { + const str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + if (str.length <= l) + return v; + return str.substring(0, l - o.length) + o; +} +function truncatewords(v, words = 15, o = '...') { + const str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + const arr = str.split(/\s+/); + if (words <= 0) + words = 1; + let ret = arr.slice(0, words).join(' '); + if (arr.length >= words) + ret += o; + return ret; +} +function normalize_whitespace(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\s+/g, ' '); +} +function number_of_words(input, mode) { + const str = stringify(input); + this.context.memoryLimit.use(str.length); + input = str.trim(); + if (!input) + return 0; + switch (mode) { + case 'cjk': + // Count CJK characters and words + return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length; + case 'auto': + // Count CJK characters, if none, count words + return rCJKWord.test(input) + ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length + : input.split(/\s+/).length; + default: + // Count words only + return input.split(/\s+/).length; + } +} +function array_to_sentence_string(array, connector = 'and') { + connector = stringify(connector); + let outputSize = connector.length + array.length * 2; + for (let i = 0; i < array.length; i++) + outputSize += stringify(array[i]).length; + this.context.memoryLimit.use(outputSize); + switch (array.length) { + case 0: + return ''; + case 1: + return array[0]; + case 2: + return `${array[0]} ${connector} ${array[1]}`; + default: + return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`; + } +} + +var stringFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + append: append, + prepend: prepend, + lstrip: lstrip, + downcase: downcase, + upcase: upcase, + remove: remove, + remove_first: remove_first, + remove_last: remove_last, + rstrip: rstrip, + split: split, + strip: strip, + strip_newlines: strip_newlines, + capitalize: capitalize, + replace: replace, + replace_first: replace_first, + replace_last: replace_last, + truncate: truncate, + truncatewords: truncatewords, + normalize_whitespace: normalize_whitespace, + number_of_words: number_of_words, + array_to_sentence_string: array_to_sentence_string +}); + +function base64Encode(str) { + return Buffer.from(str, 'utf8').toString('base64'); +} +function base64Decode(str) { + return Buffer.from(str, 'base64').toString('utf8'); +} + +/** + * Base64 related filters + * + * Implements base64_encode and base64_decode filters for Shopify compatibility + */ +function base64_encode(value) { + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + this.context.memoryLimit.use(value.byteLength); + return value.toString('base64'); + } + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Encode(str); +} +function base64_decode(value) { + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Decode(str); +} + +var base64Filters = /*#__PURE__*/Object.freeze({ + __proto__: null, + base64_encode: base64_encode, + base64_decode: base64_decode +}); + +function sha256(str) { + return crypto.createHash('sha256').update(str, 'utf8').digest('hex'); +} +function hmacSha256(str, key) { + return crypto.createHmac('sha256', key).update(str, 'utf8').digest('hex'); +} + +/** + * Crypto related filters + * + * Implements sha256 and hmac_sha256 filters for Shopify compatibility + */ +function sha256$1(value) { + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return sha256(str); +} +function hmac_sha256(value, key) { + const str = stringify(value); + const keyStr = stringify(key); + this.context.memoryLimit.use(str.length + keyStr.length); + return hmacSha256(str, keyStr); +} + +var cryptoFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + sha256: sha256$1, + hmac_sha256: hmac_sha256 +}); + +const filters = { + ...htmlFilters, + ...mathFilters, + ...urlFilters, + ...arrayFilters, + ...dateFilters, + ...stringFilters, + ...base64Filters, + ...cryptoFilters, + ...misc +}; + +class AssignTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.key = this.identifier.content; + this.tokenizer.assert(this.key, 'expected variable name'); + this.tokenizer.skipBlank(); + this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected "="'); + this.tokenizer.advance(); + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + } + *render(ctx) { + ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf); + } + *arguments() { + yield this.value; + } + *localScope() { + yield this.identifier; + } +} + +const MODIFIERS = ['offset', 'limit', 'reversed']; +class ForTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const variable = this.tokenizer.readIdentifier(); + const inStr = this.tokenizer.readIdentifier(); + const collection = this.tokenizer.readValue(); + if (!variable.size() || inStr.content !== 'in' || !collection) { + throw new Error(`illegal tag: ${token.getText()}`); + } + this.variable = variable.content; + this.collection = collection; + this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = []; + this.elseTemplates = []; + let p; + const stream = parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; }) + .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); }); + stream.start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + let collection = toEnumerable(yield evalToken(this.collection, ctx)); + if (!collection.length) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + return; + } + const continueKey = 'continue-' + this.variable + '-' + this.collection.getText(); + ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) })); + const hash = (yield this.hash.render(ctx)); + ctx.pop(); + const modifiers = this.liquid.options.orderedFilterParameters + ? Object.keys(hash).filter(x => MODIFIERS.includes(x)) + : MODIFIERS.filter(x => hash[x] !== undefined); + collection = modifiers.reduce((collection, modifier) => { + if (modifier === 'offset') + return offset(collection, hash['offset']); + if (modifier === 'limit') + return limit(collection, hash['limit']); + return reversed(collection); + }, collection); + ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length); + const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) }); + ctx.push(scope); + for (const item of collection) { + scope[this.variable] = item; + ctx.continueCalled = ctx.breakCalled = false; + yield r.renderTemplates(this.templates, ctx, emitter); + if (ctx.breakCalled) + break; + scope.forloop.next(); + } + ctx.continueCalled = ctx.breakCalled = false; + ctx.pop(); + } + *children() { + const templates = this.templates.slice(); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } + *arguments() { + yield this.collection; + for (const v of Object.values(this.hash.hash)) { + if (isValueToken(v)) { + yield v; + } + } + } + blockScope() { + return [this.variable, 'forloop']; + } +} +function reversed(arr) { + return [...arr].reverse(); +} +function offset(arr, count) { + return arr.slice(count); +} +function limit(arr, count) { + return arr.slice(0, count); +} + +class CaptureTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.templates = []; + this.identifier = this.readVariable(); + this.variable = this.identifier.content; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcapture') + return; + this.templates.push(parser.parseToken(token, remainTokens)); + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + readVariable() { + let ident = this.tokenizer.readIdentifier(); + if (ident.content) + return ident; + ident = this.tokenizer.readQuoted(); + if (ident) + return ident; + throw this.tokenizer.error('invalid capture name'); + } + *render(ctx) { + const r = this.liquid.renderer; + const html = yield r.renderTemplates(this.templates, ctx); + ctx.bottom()[this.variable] = html; + } + *children() { + return this.templates; + } + *localScope() { + yield this.identifier; + } +} + +class CaseTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + this.elseTemplates = []; + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + this.elseTemplates = []; + let p = []; + let elseCount = 0; + const stream = parser.parseStream(remainTokens) + .on('tag:when', (token) => { + if (elseCount > 0) { + return; + } + p = []; + const values = []; + while (!token.tokenizer.end()) { + values.push(token.tokenizer.readValueOrThrow()); + token.tokenizer.skipBlank(); + if (token.tokenizer.peek() === ',') { + token.tokenizer.readTo(','); + } + else { + token.tokenizer.readTo('or'); + } + } + this.branches.push({ + values, + templates: p + }); + }) + .on('tag:else', () => { + elseCount++; + p = this.elseTemplates; + }) + .on('tag:endcase', () => stream.stop()) + .on('template', (tpl) => { + if (p !== this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf)); + let branchHit = false; + for (const branch of this.branches) { + for (const valueToken of branch.values) { + const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf); + if (equals(target, value)) { + yield r.renderTemplates(branch.templates, ctx, emitter); + branchHit = true; + break; + } + } + } + if (!branchHit) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } + } + *arguments() { + yield this.value; + yield* this.branches.flatMap(b => b.values); + } + *children() { + const templates = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } +} + +class CommentTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcomment') + return; + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + render() { } +} + +class RenderTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const tokenizer = this.tokenizer; + this.file = parseFilePath(tokenizer, this.liquid, parser); + this.currentFile = token.file; + while (!tokenizer.end()) { + tokenizer.skipBlank(); + const begin = tokenizer.p; + const keyword = tokenizer.readIdentifier(); + if (keyword.content === 'with' || keyword.content === 'for') { + tokenizer.skipBlank(); + // can be normal key/value pair, like "with: true" + if (tokenizer.peek() !== ':') { + const value = tokenizer.readValue(); + // can be normal key, like "with," + if (value) { + const beforeAs = tokenizer.p; + const asStr = tokenizer.readIdentifier(); + let alias; + if (asStr.content === 'as') + alias = tokenizer.readIdentifier(); + else + tokenizer.p = beforeAs; + const binding = { value, alias: alias && alias.content }; + if (keyword.content === 'with') + this.with = binding; + else + this.forBinding = binding; + tokenizer.skipBlank(); + if (tokenizer.peek() === ',') + tokenizer.advance(); + continue; // matched! + } + } + } + /** + * restore cursor if with/for not matched + */ + tokenizer.p = begin; + break; + } + this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator); + } + *render(ctx, emitter) { + const { liquid, hash } = this; + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const childCtx = ctx.spawn(); + const scope = childCtx.bottom(); + __assign(scope, yield hash.render(ctx)); + if (this.with) { + const { value, alias } = this.with; + scope[alias || filepath] = yield evalToken(value, ctx); + } + if (this.forBinding) { + const { value, alias } = this.forBinding; + const collection = toEnumerable(yield evalToken(value, ctx)); + scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias); + for (const item of collection) { + scope[alias] = item; + const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + scope['forloop'].next(); + } + } + else { + const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + } + } + *children(partials, sync) { + if (partials && isString(this.file)) { + return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)); + } + return []; + } + partialScope() { + if (isString(this.file)) { + const names = Object.keys(this.hash.hash); + if (this.with) { + const { value, alias } = this.with; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + if (this.forBinding) { + const { value, alias } = this.forBinding; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + return { name: this.file, isolated: true, scope: names }; + } + } + *arguments() { + for (const v of Object.values(this.hash.hash)) { + if (isValueToken(v)) { + yield v; + } + } + if (this.with) { + const { value } = this.with; + if (isValueToken(value)) { + yield value; + } + } + if (this.forBinding) { + const { value } = this.forBinding; + if (isValueToken(value)) { + yield value; + } + } + } +} +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +function parseFilePath(tokenizer, liquid, parser) { + if (liquid.options.dynamicPartials) { + const file = tokenizer.readValue(); + tokenizer.assert(file, 'illegal file path'); + if (file.getText() === 'none') + return; + if (isQuotedToken(file)) { + // for filenames like "files/{{file}}", eval as liquid template + const templates = parser.parse(evalQuotedToken(file)); + return optimize(templates); + } + return file; + } + const tokens = [...tokenizer.readFileNameTemplate(liquid.options)]; + const templates = optimize(parser.parseTokens(tokens)); + return templates === 'none' ? undefined : templates; +} +function optimize(templates) { + // for filenames like "files/file.liquid", extract the string directly + if (templates.length === 1 && isHTMLToken(templates[0].token)) + return templates[0].token.getContent(); + return templates; +} +function* renderFilePath(file, ctx, liquid) { + if (typeof file === 'string') + return file; + if (Array.isArray(file)) + return liquid.renderer.renderTemplates(file, ctx); + return yield evalToken(file, ctx); +} + +class IncludeTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const { tokenizer } = token; + this.file = parseFilePath(tokenizer, this.liquid, parser); + this.currentFile = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator); + } + *render(ctx, emitter) { + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + const scope = createScope((yield hash.render(ctx))); + if (withVar) + scope[filepath] = yield evalToken(withVar, ctx); + const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile)); + ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + ctx.restoreRegister(saved); + } + *children(partials, sync) { + if (partials && isString(this.file)) { + return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)); + } + return []; + } + partialScope() { + if (isString(this.file)) { + let names; + if (this.liquid.options.jekyllInclude) { + names = ['include']; + } + else { + names = Object.keys(this.hash.hash); + if (this.withVar) { + names.push([this.file, this.withVar]); + } + } + return { name: this.file, isolated: false, scope: names }; + } + } + *arguments() { + yield* Object.values(this.hash.hash).filter(isValueToken); + if (isValueToken(this.file)) { + yield this.file; + } + if (isValueToken(this.withVar)) { + yield this.withVar; + } + } +} + +class DecrementTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.variable = this.identifier.content; + } + render(context, emitter) { + const scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + emitter.write(stringify(--scope[this.variable])); + } + *localScope() { + yield this.identifier; + } +} + +class CycleTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.candidates = []; + const group = this.tokenizer.readValue(); + this.tokenizer.skipBlank(); + if (group) { + if (this.tokenizer.peek() === ':') { + this.group = group; + this.tokenizer.advance(); + } + else + this.candidates.push(group); + } + while (!this.tokenizer.end()) { + const value = this.tokenizer.readValue(); + if (value) + this.candidates.push(value); + this.tokenizer.readTo(','); + } + this.tokenizer.assert(this.candidates.length, () => `empty candidates: "${token.getText()}"`); + } + *render(ctx, emitter) { + const group = (yield evalToken(this.group, ctx)); + const fingerprint = `cycle:${group}:` + this.candidates.join(','); + const groups = ctx.getRegister('cycle', {}); + let idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + const candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return yield evalToken(candidate, ctx); + } + *arguments() { + yield* this.candidates; + if (this.group) { + yield this.group; + } + } +} + +class IfTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + let p = []; + parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid), + templates: (p = []) + })) + .on('tag:elsif', (token) => { + assert(!this.elseTemplates, 'unexpected elsif after else'); + this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), this.liquid), + templates: (p = []) + }); + }) + .on('tag:else', tag => { + assertEmpty(tag.args); + assert(!this.elseTemplates, 'duplicated else'); + p = this.elseTemplates = []; + }) + .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + for (const { value, templates } of this.branches) { + const v = yield value.value(ctx, ctx.opts.lenientIf); + if (isTruthy(v, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates || [], ctx, emitter); + } + *children() { + const templates = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } + arguments() { + return this.branches.map(b => b.value); + } +} + +class IncrementTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.variable = this.identifier.content; + } + render(context, emitter) { + const scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + const val = scope[this.variable]; + scope[this.variable]++; + emitter.write(stringify(val)); + } + *localScope() { + yield this.identifier; + } +} + +class LayoutTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + this.file = parseFilePath(this.tokenizer, this.liquid, parser); + this.currentFile = token.file; + this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = parser.parseTokens(remainTokens); + } + *render(ctx, emitter) { + const { liquid, args, file } = this; + const { renderer } = liquid; + if (file === undefined) { + ctx.setRegister('blockMode', BlockMode.OUTPUT); + yield renderer.renderTemplates(this.templates, ctx, emitter); + return; + } + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile)); + // render remaining contents and store rendered results + ctx.setRegister('blockMode', BlockMode.STORE); + const html = yield renderer.renderTemplates(this.templates, ctx); + const blocks = ctx.getRegister('blocks', {}); + // set whole content to anonymous block if anonymous doesn't specified + if (blocks[''] === undefined) + blocks[''] = (parent, emitter) => emitter.write(html); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + // render the layout file use stored blocks + ctx.push(createScope((yield args.render(ctx)))); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + } + *children(partials) { + const templates = this.templates.slice(); + if (partials && isString(this.file)) { + templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile))); + } + return templates; + } + *arguments() { + for (const v of Object.values(this.args.hash)) { + if (isValueToken(v)) { + yield v; + } + } + if (isValueToken(this.file)) { + yield this.file; + } + } + partialScope() { + if (isString(this.file)) { + return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) }; + } + } +} + +class BlockTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + this.templates = []; + const match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endblock') + return; + const template = parser.parseToken(token, remainTokens); + this.templates.push(template); + } + throw new Error(`tag ${token.getText()} not closed`); + } + *render(ctx, emitter) { + const blockRender = this.getBlockRender(ctx); + if (ctx.getRegister('blockMode') === BlockMode.STORE) { + ctx.getRegister('blocks', {})[this.block] = blockRender; + } + else { + yield blockRender(new BlockDrop(), emitter); + } + } + getBlockRender(ctx) { + const self = this; + const { liquid, templates } = this; + const renderChild = ctx.getRegister('blocks', {})[this.block]; + const renderCurrent = function* (superBlock, emitter) { + const stack = ctx.getRegister('blockStack', []); + if (stack.includes(self)) + throw new Error('block tag cannot be nested'); + stack.push(self); + ctx.push(createScope({ block: superBlock })); + yield liquid.renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + stack.pop(); + }; + return renderChild + ? (superBlock, emitter) => renderChild(new BlockDrop((emitter) => renderCurrent(superBlock, emitter)), emitter) + : renderCurrent; + } + *children() { + return this.templates; + } + blockScope() { + return ['block']; + } +} + +class RawTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + this.tokens = []; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endraw') + return; + this.tokens.push(token); + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + render() { + return this.tokens.map((token) => token.getText()).join(''); + } +} + +class TablerowloopDrop extends ForloopDrop { + constructor(length, cols, collection, variable) { + super(length, collection, variable); + this.length = length; + this.cols = cols; + } + row() { + return Math.floor(this.i / this.cols) + 1; + } + col0() { + return (this.i % this.cols); + } + col() { + return this.col0() + 1; + } + col_first() { + return this.col0() === 0; + } + col_last() { + return this.col() === this.cols; + } +} + +class TablerowTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + const variable = this.tokenizer.readIdentifier(); + this.tokenizer.skipBlank(); + const predicate = this.tokenizer.readIdentifier(); + const collectionToken = this.tokenizer.readValue(); + if (predicate.content !== 'in' || !collectionToken) { + throw new Error(`illegal tag: ${tagToken.getText()}`); + } + this.variable = variable.content; + this.collection = collectionToken; + this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = []; + let p; + const stream = parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:endtablerow', () => stream.stop()) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } + *render(ctx, emitter) { + let collection = toEnumerable(yield evalToken(this.collection, ctx)); + const args = (yield this.args.render(ctx)); + const offset = args.offset || 0; + const limit = (args.limit === undefined) ? collection.length : args.limit; + collection = collection.slice(offset, offset + limit); + const cols = args.cols || collection.length; + const r = this.liquid.renderer; + const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable); + const scope = createScope({ tablerowloop }); + ctx.push(scope); + for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) { + scope[this.variable] = collection[idx]; + if (tablerowloop.col0() === 0) { + if (tablerowloop.row() !== 1) + emitter.write(''); + emitter.write(``); + } + emitter.write(``); + yield r.renderTemplates(this.templates, ctx, emitter); + emitter.write(''); + } + if (collection.length) + emitter.write(''); + ctx.pop(); + } + *children() { + return this.templates; + } + *arguments() { + yield this.collection; + for (const v of Object.values(this.args.hash)) { + if (isValueToken(v)) { + yield v; + } + } + } + blockScope() { + return [this.variable, 'tablerowloop']; + } +} + +class UnlessTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + this.elseTemplates = []; + let p = []; + let elseCount = 0; + parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid), + test: isFalsy, + templates: (p = []) + })) + .on('tag:elsif', (token) => { + if (elseCount > 0) { + p = []; + return; + } + this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), this.liquid), + test: isTruthy, + templates: (p = []) + }); + }) + .on('tag:else', () => { + elseCount++; + p = this.elseTemplates; + }) + .on('tag:endunless', function () { this.stop(); }) + .on('template', (tpl) => { + if (p !== this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + for (const { value, test, templates } of this.branches) { + const v = yield value.value(ctx, ctx.opts.lenientIf); + if (test(v, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } + *children() { + const children = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + children.push(...this.elseTemplates); + } + return children; + } + arguments() { + return this.branches.map(b => b.value); + } +} + +class BreakTag extends Tag { + render(ctx, _emitter) { + ctx.breakCalled = true; + } +} + +class ContinueTag extends Tag { + render(ctx, _emitter) { + ctx.continueCalled = true; + } +} + +class EchoTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.tokenizer.skipBlank(); + if (!this.tokenizer.end()) { + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + } + } + *render(ctx, emitter) { + if (!this.value) + return; + const val = yield this.value.value(ctx, false); + emitter.write(val); + } + *arguments() { + if (this.value) { + yield this.value; + } + } +} + +class LiquidTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options); + this.templates = parser.parseTokens(tokens); + } + *render(ctx, emitter) { + yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter); + } + *children() { + return this.templates; + } +} + +class InlineCommentTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + if (tagToken.args.search(/\n\s*[^#\s]/g) !== -1) { + throw new Error('every line of an inline comment must start with a \'#\' character'); + } + } + render() { } +} + +const tags = { + assign: AssignTag, + 'for': ForTag, + capture: CaptureTag, + 'case': CaseTag, + comment: CommentTag, + include: IncludeTag, + render: RenderTag, + decrement: DecrementTag, + increment: IncrementTag, + cycle: CycleTag, + 'if': IfTag, + layout: LayoutTag, + block: BlockTag, + raw: RawTag, + tablerow: TablerowTag, + unless: UnlessTag, + 'break': BreakTag, + 'continue': ContinueTag, + echo: EchoTag, + liquid: LiquidTag, + '#': InlineCommentTag +}; + +class Liquid { + constructor(opts = {}) { + this.renderer = new Render(); + this.filters = Object.create(null); + this.tags = Object.create(null); + this.options = normalize(opts); + // eslint-disable-next-line deprecation/deprecation + this.parser = new Parser(this); + forOwn(tags, (conf, name) => this.registerTag(name, conf)); + forOwn(filters, (handler, name) => this.registerFilter(name, handler)); + } + parse(html, filepath) { + const parser = new Parser(this); + return parser.parse(html, filepath); + } + _render(tpl, scope, renderOptions) { + const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplates(tpl, ctx); + } + async render(tpl, scope, renderOptions) { + return toPromise(this._render(tpl, scope, { ...renderOptions, sync: false })); + } + renderSync(tpl, scope, renderOptions) { + return toValueSync(this._render(tpl, scope, { ...renderOptions, sync: true })); + } + renderToNodeStream(tpl, scope, renderOptions = {}) { + const ctx = new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplatesToNodeStream(tpl, ctx); + } + _parseAndRender(html, scope, renderOptions) { + const tpl = this.parse(html); + return this._render(tpl, scope, renderOptions); + } + async parseAndRender(html, scope, renderOptions) { + return toPromise(this._parseAndRender(html, scope, { ...renderOptions, sync: false })); + } + parseAndRenderSync(html, scope, renderOptions) { + return toValueSync(this._parseAndRender(html, scope, { ...renderOptions, sync: true })); + } + _parsePartialFile(file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, exports.LookupType.Partials, currentFile); + } + _parseLayoutFile(file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, exports.LookupType.Layouts, currentFile); + } + _parseFile(file, sync, lookupType, currentFile) { + return new Parser(this).parseFile(file, sync, lookupType, currentFile); + } + async parseFile(file, lookupType) { + return toPromise(new Parser(this).parseFile(file, false, lookupType)); + } + parseFileSync(file, lookupType) { + return toValueSync(new Parser(this).parseFile(file, true, lookupType)); + } + *_renderFile(file, ctx, renderFileOptions) { + const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType)); + return yield this._render(templates, ctx, renderFileOptions); + } + async renderFile(file, ctx, renderFileOptions) { + return toPromise(this._renderFile(file, ctx, { ...renderFileOptions, sync: false })); + } + renderFileSync(file, ctx, renderFileOptions) { + return toValueSync(this._renderFile(file, ctx, { ...renderFileOptions, sync: true })); + } + async renderFileToNodeStream(file, scope, renderOptions) { + const templates = await this.parseFile(file); + return this.renderToNodeStream(templates, scope, renderOptions); + } + _evalValue(str, scope) { + const value = new Value(str, this); + const ctx = scope instanceof Context ? scope : new Context(scope, this.options, {}, { liquid: this }); + return value.value(ctx); + } + async evalValue(str, scope) { + return toPromise(this._evalValue(str, scope)); + } + evalValueSync(str, scope) { + return toValueSync(this._evalValue(str, scope)); + } + registerFilter(name, filter) { + this.filters[name] = filter; + } + registerTag(name, tag) { + this.tags[name] = isFunction(tag) ? tag : createTagClass(tag); + } + plugin(plugin) { + return plugin.call(this, Liquid); + } + express() { + const self = this; // eslint-disable-line + let firstCall = true; + return function (filePath, ctx, callback) { + if (firstCall) { + firstCall = false; + const dirs = normalizeDirectoryList(this.root); + self.options.root.unshift(...dirs); + self.options.layouts.unshift(...dirs); + self.options.partials.unshift(...dirs); + } + self.renderFile(filePath, ctx).then(html => callback(null, html), callback); + }; + } + async analyze(template, options = {}) { + return analyze(template, options); + } + analyzeSync(template, options = {}) { + return analyzeSync(template, options); + } + async parseAndAnalyze(html, filename, options = {}) { + return analyze(this.parse(html, filename), options); + } + parseAndAnalyzeSync(html, filename, options = {}) { + return analyzeSync(this.parse(html, filename), options); + } + /** Return an array of all variables without their properties. */ + async variables(template, options = {}) { + const analysis = await analyze(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + } + /** Return an array of all variables without their properties. */ + variablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + } + /** Return an array of all variables including their properties/paths. */ + async fullVariables(template, options = {}) { + const analysis = await analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all variables including their properties/paths. */ + fullVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all variables, each as an array of properties/segments. */ + async variableSegments(template, options = {}) { + const analysis = await analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray())))); + } + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegmentsSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray())))); + } + /** Return an array of all expected context variables without their properties. */ + async globalVariables(template, options = {}) { + const analysis = await analyze(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + } + /** Return an array of all expected context variables without their properties. */ + globalVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + } + /** Return an array of all expected context variables including their properties/paths. */ + async globalFullVariables(template, options = {}) { + const analysis = await analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all expected context variables, each as an array of properties/segments. */ + async globalVariableSegments(template, options = {}) { + const analysis = await analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray())))); + } + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegmentsSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray())))); + } +} + +/* istanbul ignore file */ +const version = '10.28.0'; + +exports.AssertionError = AssertionError; +exports.AssignTag = AssignTag; +exports.BlockTag = BlockTag; +exports.BreakTag = BreakTag; +exports.CaptureTag = CaptureTag; +exports.CaseTag = CaseTag; +exports.CommentTag = CommentTag; +exports.Context = Context; +exports.ContinueTag = ContinueTag; +exports.CycleTag = CycleTag; +exports.DecrementTag = DecrementTag; +exports.Drop = Drop; +exports.EchoTag = EchoTag; +exports.Expression = Expression; +exports.Filter = Filter; +exports.ForTag = ForTag; +exports.Hash = Hash; +exports.IfTag = IfTag; +exports.IncludeTag = IncludeTag; +exports.IncrementTag = IncrementTag; +exports.InlineCommentTag = InlineCommentTag; +exports.LayoutTag = LayoutTag; +exports.Liquid = Liquid; +exports.LiquidError = LiquidError; +exports.LiquidTag = LiquidTag; +exports.Output = Output; +exports.ParseError = ParseError; +exports.ParseStream = ParseStream; +exports.Parser = Parser; +exports.RawTag = RawTag; +exports.RenderError = RenderError; +exports.RenderTag = RenderTag; +exports.TablerowTag = TablerowTag; +exports.Tag = Tag; +exports.TagToken = TagToken; +exports.Token = Token; +exports.TokenizationError = TokenizationError; +exports.Tokenizer = Tokenizer; +exports.TypeGuards = typeGuards; +exports.UndefinedVariableError = UndefinedVariableError; +exports.UnlessTag = UnlessTag; +exports.Value = Value; +exports.Variable = Variable; +exports.analyze = analyze; +exports.analyzeSync = analyzeSync; +exports.assert = assert; +exports.createTrie = createTrie; +exports.defaultOperators = defaultOperators; +exports.defaultOptions = defaultOptions; +exports.evalQuotedToken = evalQuotedToken; +exports.evalToken = evalToken; +exports.filters = filters; +exports.isFalsy = isFalsy; +exports.isTruthy = isTruthy; +exports.tags = tags; +exports.toPromise = toPromise; +exports.toValue = toValue; +exports.toValueSync = toValueSync; +exports.version = version; diff --git a/node_modules/liquidjs/dist/liquid.node.mjs b/node_modules/liquidjs/dist/liquid.node.mjs new file mode 100644 index 00000000..0c2b9c4e --- /dev/null +++ b/node_modules/liquidjs/dist/liquid.node.mjs @@ -0,0 +1,5245 @@ +/* + * liquidjs@10.28.0, https://github.com/harttle/liquidjs + * (c) 2016-2026 harttle + * Released under the MIT License. + */ +import { PassThrough } from 'stream'; +import { sep, extname, resolve as resolve$1, dirname as dirname$1 } from 'path'; +import { statSync, readFileSync as readFileSync$1, realpathSync, stat, readFile as readFile$1, realpath } from 'fs'; +import { createRequire } from 'module'; +import { createHash, createHmac } from 'crypto'; + +class Token { + constructor(kind, input, begin, end, file) { + this.kind = kind; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } + getText() { + return this.input.slice(this.begin, this.end); + } + getPosition() { + let [row, col] = [1, 1]; + for (let i = 0; i < this.begin; i++) { + if (this.input[i] === '\n') { + row++; + col = 1; + } + else + col++; + } + return [row, col]; + } + size() { + return this.end - this.begin; + } +} + +class Drop { + liquidMethodMissing(key, context) { + return undefined; + } +} + +const toString$1 = Object.prototype.toString; +const toLowerCase = String.prototype.toLowerCase; +const hasOwnProperty = Object.hasOwnProperty; +function isString(value) { + return typeof value === 'string'; +} +// eslint-disable-next-line @typescript-eslint/ban-types +function isFunction(value) { + return typeof value === 'function'; +} +function isPromise(val) { + return val && isFunction(val.then); +} +function isIterator(val) { + return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return); +} +function promisify(fn) { + return function (...args) { + return new Promise((resolve, reject) => { + fn(...args, (err, result) => { + err ? reject(err) : resolve(result); + }); + }); + }; +} +function stringify(value) { + value = toValue(value); + if (isString(value)) + return value; + if (isNil(value)) + return ''; + if (isArray(value)) + return value.map(x => stringify(x)).join(''); + return String(value); +} +function readArrayElement(arr, index, ownPropertyOnly) { + if (index < 0) + index = arr.length + index; + if (ownPropertyOnly && !hasOwnProperty.call(arr, index)) + return undefined; + return arr[index]; +} +function toEnumerable(val) { + val = toValue(val); + if (isArray(val)) + return val; + if (isString(val) && val.length > 0) + return [val]; + if (isIterable(val)) + return Array.from(val); + if (isObject(val)) + return Object.keys(val).map((key) => [key, val[key]]); + return []; +} +function toArray(val) { + val = toValue(val); + if (isNil(val)) + return []; + if (isArray(val)) + return val; + return [val]; +} +function toValue(value) { + return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value; +} +function toNumber(value) { + return +toValue(value) || 0; +} +function isNumber(value) { + return typeof value === 'number'; +} +function toLiquid(value) { + if (value && isFunction(value.toLiquid)) + return toLiquid(value.toLiquid()); + return value; +} +function isNil(value) { + return value == null; +} +function isUndefined(value) { + return value === undefined; +} +function isArray(value) { + // be compatible with IE 8 + return toString$1.call(value) === '[object Array]'; +} +function isArrayLike(value) { + return value && isNumber(value.length); +} +function isIterable(value) { + return isObject(value) && Symbol.iterator in value; +} +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +function forOwn(obj, iteratee) { + obj = obj || {}; + for (const k in obj) { + if (hasOwnProperty.call(obj, k)) { + if (iteratee(obj[k], k, obj) === false) + break; + } + } + return obj; +} +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +function isObject(value) { + const type = typeof value; + return value !== null && (type === 'object' || type === 'function'); +} +function range(start, stop, step = 1) { + const arr = []; + for (let i = start; i < stop; i += step) { + arr.push(i); + } + return arr; +} +function padStart(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str); +} +function padEnd(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch); +} +function pad(str, length, ch, add) { + str = String(str); + const n = length - str.length; + if (n <= 0) + return str; + return add(str, ch.repeat(n)); +} +function identify(val) { + return val; +} +function changeCase(str) { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z'); + return hasLowerCase ? str.toUpperCase() : str.toLowerCase(); +} +function ellipsis(str, N) { + return str.length > N ? str.slice(0, N - 3) + '...' : str; +} +function orderedCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +// compare string in case-insensitive way, undefined values to the tail +function caseInsensitiveCompare(a, b) { + if (isNil(a) && isNil(b)) + return 0; + if (isNil(a)) + return 1; + if (isNil(b)) + return -1; + a = toLowerCase.call(a); + b = toLowerCase.call(b); + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +function argumentsToValue(fn) { + return function (...args) { return fn.call(this, ...args.map(toValue)); }; +} +function argumentsToNumber(fn) { + return function (...args) { return fn.call(this, ...args.map(toNumber)); }; +} +/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */ +function* strictUniq(array) { + const seen = new Set(); + for (const element of array) { + const key = JSON.stringify(element); + if (!seen.has(key)) { + seen.add(key); + yield element; + } + } +} + +/** + * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes + */ +const TRAIT = '__liquidClass__'; +class LiquidError extends Error { + constructor(err, token) { + /** + * note: for ES5 targeting, `this` will be replaced by return value of Error(), + * thus everything on `this` will be lost, avoid calling `LiquidError` methods here + */ + super(typeof err === 'string' ? err : err.message); + this.context = ''; + if (typeof err !== 'string') + Object.defineProperty(this, 'originalError', { value: err, enumerable: false }); + Object.defineProperty(this, 'token', { value: token, enumerable: false }); + Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false }); + } + update() { + Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false }); + this.message = mkMessage(this.message, this.token); + this.stack = this.message + '\n' + this.context + + '\n' + this.stack; + if (this.originalError) + this.stack += '\nFrom ' + this.originalError.stack; + } + static is(obj) { + return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError'; + } +} +class TokenizationError extends LiquidError { + constructor(message, token) { + super(message, token); + this.name = 'TokenizationError'; + super.update(); + } +} +class ParseError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'ParseError'; + this.message = err.message; + super.update(); + } +} +class RenderError extends LiquidError { + constructor(err, tpl) { + super(err, tpl.token); + this.name = 'RenderError'; + this.message = err.message; + super.update(); + } + static is(obj) { + return obj.name === 'RenderError'; + } +} +class LiquidErrors extends LiquidError { + constructor(errors) { + super(errors[0], errors[0].token); + this.errors = errors; + this.name = 'LiquidErrors'; + const s = errors.length > 1 ? 's' : ''; + this.message = `${errors.length} error${s} found`; + super.update(); + } + static is(obj) { + return obj.name === 'LiquidErrors'; + } +} +class UndefinedVariableError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'UndefinedVariableError'; + this.message = err.message; + super.update(); + } +} +// only used internally; raised where we don't have token information, +// so it can't be an UndefinedVariableError. +class InternalUndefinedVariableError extends Error { + constructor(variableName) { + super(`undefined variable: ${variableName}`); + this.name = 'InternalUndefinedVariableError'; + this.variableName = variableName; + } +} +class AssertionError extends Error { + constructor(message) { + super(message); + this.name = 'AssertionError'; + this.message = message + ''; + } +} +function mkContext(token) { + const [line, col] = token.getPosition(); + const lines = token.input.split('\n'); + const begin = Math.max(line - 2, 1); + const end = Math.min(line + 3, lines.length); + const context = range(begin, end + 1) + .map(lineNumber => { + const rowIndicator = (lineNumber === line) ? '>> ' : ' '; + const num = padStart(String(lineNumber), String(end).length); + let text = `${rowIndicator}${num}| `; + const colIndicator = lineNumber === line + ? '\n' + padStart('^', col + text.length) + : ''; + text += lines[lineNumber - 1]; + text += colIndicator; + return text; + }) + .join('\n'); + return context; +} +function mkMessage(msg, token) { + if (token.file) + msg += `, file:${token.file}`; + const [line, col] = token.getPosition(); + msg += `, line:${line}, col:${col}`; + return msg; +} + +// **DO NOT CHANGE THIS FILE** +// +// This file is generated by bin/character-gen.js +// bitmask character types to boost performance +const TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; +const WORD = 1; +const BLANK = 4; +const QUOTE = 8; +const INLINE_BLANK = 16; +const NUMBER = 32; +const SIGN = 64; +const PUNCTUATION = 128; +function isWord(char) { + const code = char.charCodeAt(0); + return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD); +} +TYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK; +TYPES[8220] = TYPES[8221] = PUNCTUATION; + +function assert(predicate, message) { + if (!predicate) { + const msg = typeof message === 'function' + ? message() + : (message || `expect ${predicate} to be true`); + throw new AssertionError(msg); + } +} +function assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) { + assert(!predicate, message); +} + +class NullDrop extends Drop { + equals(value) { + return isNil(toValue(value)); + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return null; + } +} + +class EmptyDrop extends Drop { + equals(value) { + if (value instanceof EmptyDrop) + return false; + value = toValue(value); + if (isString(value) || isArray(value)) + return value.length === 0; + if (isObject(value)) + return Object.keys(value).length === 0; + return false; + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return ''; + } + static is(value) { + return value instanceof EmptyDrop; + } +} + +class BlankDrop extends EmptyDrop { + equals(value) { + if (value === false) + return true; + if (isNil(toValue(value))) + return true; + if (isString(value)) + return /^\s*$/.test(value); + return super.equals(value); + } + static is(value) { + return value instanceof BlankDrop; + } +} + +class ForloopDrop extends Drop { + constructor(length, collection, variable) { + super(); + this.i = 0; + this.length = length; + this.name = `${variable}-${collection}`; + } + next() { + this.i++; + } + index0() { + return this.i; + } + index() { + return this.i + 1; + } + first() { + return this.i === 0; + } + last() { + return this.i === this.length - 1; + } + rindex() { + return this.length - this.i; + } + rindex0() { + return this.length - this.i - 1; + } + valueOf() { + return JSON.stringify(this); + } +} + +class SimpleEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + this.buffer += stringify(html); + } +} + +class StreamedEmitter { + constructor() { + this.buffer = ''; + this.stream = new PassThrough(); + } + write(html) { + this.stream.write(stringify(html)); + } + error(err) { + this.stream.emit('error', err); + } + end() { + this.stream.end(); + } +} + +class KeepingTypeEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + html = toValue(html); + // This will only preserve the type if the value is isolated. + // I.E: + // {{ my-port }} -> 42 + // {{ my-host }}:{{ my-port }} -> 'host:42' + if (typeof html !== 'string' && this.buffer === '') { + this.buffer = html; + } + else { + this.buffer = stringify(this.buffer) + stringify(html); + } + } +} + +class BlockDrop extends Drop { + constructor( + // the block render from layout template + superBlockRender = () => '') { + super(); + this.superBlockRender = superBlockRender; + } + /** + * Provide parent access in child block by + * {{ block.super }} + */ + *super() { + const emitter = new SimpleEmitter(); + yield this.superBlockRender(emitter); + return emitter.buffer; + } +} + +function isComparable(arg) { + return (arg && + isFunction(arg.equals) && + isFunction(arg.gt) && + isFunction(arg.geq) && + isFunction(arg.lt) && + isFunction(arg.leq)); +} + +const nil = new NullDrop(); +const literalValues = { + 'true': true, + 'false': false, + 'nil': nil, + 'null': nil, + 'empty': new EmptyDrop(), + 'blank': new BlankDrop() +}; + +// Tries are built once per input object and reused: the Tokenizer rebuilds them +// on every instantiation, but `input` (operators/literalValues) is a stable +// reference. WeakMap-keying by `input` lets short-lived operator objects (and +// their tries) be garbage collected. The returned trie is treated as read-only +// by callers (matchTrie only reads it); do not mutate it. +const trieCache = new WeakMap(); +function createTrie(input) { + const cached = trieCache.get(input); + if (cached) + return cached; + const trie = {}; + for (const [name, data] of Object.entries(input)) { + let node = trie; + for (let i = 0; i < name.length; i++) { + const c = name[i]; + node[c] = node[c] || {}; + if (i === name.length - 1 && isWord(name[i])) { + node[c].needBoundary = true; + } + node = node[c]; + } + node.data = data; + node.end = true; + } + trieCache.set(input, trie); + return trie; +} + +/****************************************************************************** +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. +***************************************************************************** */ + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function toLiquidAsync(asyncFn, syncFn) { + const syncImpl = syncFn || asyncFn; + return (sync, ...args) => { + return sync ? syncImpl(...args) : asyncFn(...args); + }; +} +// convert an async iterator to a Promise +function toPromise(val) { + return __awaiter(this, void 0, void 0, function* () { + if (!isIterator(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + try { + if (isIterator(value)) + value = toPromise(value); + if (isPromise(value)) + value = yield value; + } + catch (err) { + next = 'throw'; + value = err; + } + } while (!done); + return value; + }); +} +// convert an async iterator to a value in a synchronous manner +function toValueSync(val) { + if (!isIterator(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = !!state.done; + value = state.value; + next = 'next'; + if (isIterator(value)) { + try { + value = toValueSync(value); + } + catch (err) { + next = 'throw'; + value = err; + } + } + } while (!done); + return value; +} + +const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/; +// prototype extensions +function daysInMonth(d) { + const feb = isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +} +function getDayOfYear(d) { + let num = 0; + for (let i = 0; i < d.getMonth(); ++i) { + num += daysInMonth(d)[i]; + } + return num + d.getDate(); +} +function getWeekOfYear(d, startDay) { + // Skip to startDay of this week + const now = getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + const jan1 = new Date(d.getFullYear(), 0, 1); + const then = (7 - jan1.getDay() + startDay); + return String(Math.floor((now - then) / 7) + 1); +} +function isLeapYear(d) { + const year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); +} +function ordinal(d) { + const date = d.getDate(); + if ([11, 12, 13].includes(date)) + return 'th'; + switch (date % 10) { + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; + } +} +function century(d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); +} +// default to 0 +const padWidths = { + d: 2, + e: 2, + H: 2, + I: 2, + j: 3, + k: 2, + l: 2, + L: 3, + m: 2, + M: 2, + S: 2, + U: 2, + W: 2 +}; +const padSpaceChars = new Set('aAbBceklpP'); +function getTimezoneOffset(d, opts) { + const nOffset = Math.abs(d.getTimezoneOffset()); + const h = Math.floor(nOffset / 60); + const m = nOffset % 60; + return (d.getTimezoneOffset() > 0 ? '-' : '+') + + padStart(h, 2, '0') + + (opts.flags[':'] ? ':' : '') + + padStart(m, 2, '0'); +} +const formatCodes = { + a: (d) => d.getShortWeekdayName(), + A: (d) => d.getLongWeekdayName(), + b: (d) => d.getShortMonthName(), + B: (d) => d.getLongMonthName(), + c: (d) => d.toLocaleString(), + C: (d) => century(d), + d: (d) => d.getDate(), + e: (d) => d.getDate(), + H: (d) => d.getHours(), + I: (d) => String(d.getHours() % 12 || 12), + j: (d) => getDayOfYear(d), + k: (d) => d.getHours(), + l: (d) => String(d.getHours() % 12 || 12), + L: (d) => d.getMilliseconds(), + m: (d) => d.getMonth() + 1, + M: (d) => d.getMinutes(), + N: (d, opts) => { + var _a; + const width = Number(opts.width) || 9; + const str = padStart(String(d.getMilliseconds()), 3, '0').slice(0, width); + (_a = opts.memoryLimit) === null || _a === void 0 ? void 0 : _a.use(width - str.length); + return padEnd(str, width, '0'); + }, + p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'), + P: (d) => (d.getHours() < 12 ? 'am' : 'pm'), + q: (d) => ordinal(d), + s: (d) => Math.floor(d.dateValue() / 1000), + S: (d) => d.getSeconds(), + u: (d) => d.getDay() || 7, + U: (d) => getWeekOfYear(d, 0), + w: (d) => d.getDay(), + W: (d) => getWeekOfYear(d, 1), + x: (d) => d.toLocaleDateString(), + X: (d) => d.toLocaleTimeString(), + y: (d) => d.getFullYear().toString().slice(2, 4), + Y: (d) => d.getFullYear(), + z: getTimezoneOffset, + Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts), + 't': () => '\t', + 'n': () => '\n', + '%': () => '%' +}; +formatCodes.h = formatCodes.b; +function strftime(d, formatStr, memoryLimit) { + let output = ''; + let remaining = formatStr; + let match; + while ((match = rFormat.exec(remaining))) { + output += remaining.slice(0, match.index); + remaining = remaining.slice(match.index + match[0].length); + output += format(d, match, memoryLimit); + } + return output + remaining; +} +function format(d, match, memoryLimit) { + const [input, flagStr = '', width, modifier, conversion] = match; + const convert = formatCodes[conversion]; + if (!convert) + return input; + const flags = {}; + for (const flag of flagStr) + flags[flag] = true; + let ret = String(convert(d, { flags, width, modifier, memoryLimit })); + let padChar = padSpaceChars.has(conversion) ? ' ' : '0'; + let padWidth = Number(width) || padWidths[conversion] || 0; + if (flags['^']) + ret = ret.toUpperCase(); + else if (flags['#']) + ret = changeCase(ret); + if (flags['_']) + padChar = ' '; + else if (flags['0']) + padChar = '0'; + if (flags['-']) + padWidth = 0; + memoryLimit === null || memoryLimit === void 0 ? void 0 : memoryLimit.use(Number(padWidth) - ret.length); + return padStart(ret, padWidth, padChar); +} + +function getDateTimeFormat() { + return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined); +} + +// one minute in milliseconds +const OneMinute = 60000; +/** + * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS + * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3 + */ +const TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):?(\d{2}))$/; +const monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' +]; +const monthNamesShort = monthNames.map(name => name.slice(0, 3)); +const dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' +]; +const dayNamesShort = dayNames.map(name => name.slice(0, 3)); +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +class LiquidDate { + constructor(init, locale, timezone) { + this.locale = locale; + this.DateTimeFormat = getDateTimeFormat(); + this.date = new Date(init); + this.timezoneFixed = timezone !== undefined; + if (timezone === undefined) { + timezone = this.date.getTimezoneOffset(); + } + this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone; + this.timezoneName = isString(timezone) ? timezone : ''; + const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute; + const time = this.date.getTime() + diff; + this.displayDate = new Date(time); + } + getTime() { + return this.displayDate.getTime(); + } + /** + * The underlying UTC timestamp in milliseconds, unaffected by the display + * timezone. Use this (not `getTime()`) for timezone-invariant values like + * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by + * the display timezone offset so wall-clock getters can delegate to Date. + */ + dateValue() { + return this.date.getTime(); + } + getMilliseconds() { + return this.displayDate.getMilliseconds(); + } + getSeconds() { + return this.displayDate.getSeconds(); + } + getMinutes() { + return this.displayDate.getMinutes(); + } + getHours() { + return this.displayDate.getHours(); + } + getDay() { + return this.displayDate.getDay(); + } + getDate() { + return this.displayDate.getDate(); + } + getMonth() { + return this.displayDate.getMonth(); + } + getFullYear() { + return this.displayDate.getFullYear(); + } + toLocaleString(locale, init) { + if (init === null || init === void 0 ? void 0 : init.timeZone) { + return this.date.toLocaleString(locale, init); + } + return this.displayDate.toLocaleString(locale, init); + } + toLocaleTimeString(locale) { + return this.displayDate.toLocaleTimeString(locale); + } + toLocaleDateString(locale) { + return this.displayDate.toLocaleDateString(locale); + } + getTimezoneOffset() { + return this.timezoneOffset; + } + getTimeZoneName() { + if (this.timezoneFixed) + return this.timezoneName; + if (!this.DateTimeFormat) + return; + return this.DateTimeFormat().resolvedOptions().timeZone; + } + getLongMonthName() { + var _a; + return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()]; + } + getShortMonthName() { + var _a; + return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()]; + } + getLongWeekdayName() { + var _a; + return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()]; + } + getShortWeekdayName() { + var _a; + return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()]; + } + valid() { + return !isNaN(this.getTime()); + } + format(options) { + return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate); + } + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone(dateString, locale) { + const m = dateString.match(TIMEZONE_PATTERN); + // representing a UTC timestamp + if (m && m[1] === 'Z') { + return new LiquidDate(+new Date(dateString), locale, 0); + } + // has a timezone specified + if (m && m[2] && m[3] && m[4]) { + const [, , sign, hours, minutes] = m; + const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10)); + return new LiquidDate(+new Date(dateString), locale, offset); + } + return new LiquidDate(dateString, locale); + } + static getTimezoneOffset(timezoneName, date) { + const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName }); + const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' }); + const localDate = new Date(localDateString); + const utcDate = new Date(utcDateString); + return (+utcDate - +localDate) / (60 * 1000); + } +} + +class Limiter { + constructor(resource, limit) { + this.base = 0; + this.message = `${resource} limit exceeded`; + this.limit = limit; + } + use(count) { + if (+count > 0) { + assert(this.base + +count <= this.limit, this.message); + this.base += +count; + } + } + check(count) { + if (+count > 0) { + assert(+count <= this.limit, this.message); + } + } +} + +class DelimitedToken extends Token { + constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) { + super(kind, input, begin, end, file); + this.trimLeft = false; + this.trimRight = false; + const tl = input[contentBegin] === '-'; + const tr = input[contentEnd - 1] === '-'; + let l = tl ? contentBegin + 1 : contentBegin; + let r = tr ? contentEnd - 1 : contentEnd; + while (l < r && (TYPES[input.charCodeAt(l)] & BLANK)) + l++; + while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK)) + r--; + this.contentRange = [l, r]; + this.trimLeft = tl || trimLeft; + this.trimRight = tr || trimRight; + } + get content() { + return this.input.slice(this.contentRange[0], this.contentRange[1]); + } +} + +class TagToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options; + const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length]; + super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file); + this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions); + this.name = this.tokenizer.readTagName(); + this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`); + this.tokenizer.skipBlank(); + this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + } +} + +class OutputToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options; + const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length]; + super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file); + } +} + +class HTMLToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.HTML, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.trimLeft = 0; + this.trimRight = 0; + } + getContent() { + return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight); + } +} + +class NumberToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Number, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = Number(this.getText()); + } +} + +class IdentifierToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Word, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = this.getText(); + } +} + +class LiteralToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Literal, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.literal = this.getText(); + this.content = literalValues[this.literal]; + } +} + +const operatorPrecedences = { + '==': 2, + '!=': 2, + '>': 2, + '<': 2, + '>=': 2, + '<=': 2, + 'contains': 2, + 'not': 1, + 'and': 0, + 'or': 0 +}; +const operatorTypes = { + '==': 0 /* OperatorType.Binary */, + '!=': 0 /* OperatorType.Binary */, + '>': 0 /* OperatorType.Binary */, + '<': 0 /* OperatorType.Binary */, + '>=': 0 /* OperatorType.Binary */, + '<=': 0 /* OperatorType.Binary */, + 'contains': 0 /* OperatorType.Binary */, + 'not': 1 /* OperatorType.Unary */, + 'and': 0 /* OperatorType.Binary */, + 'or': 0 /* OperatorType.Binary */ +}; +class OperatorToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Operator, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.operator = this.getText(); + } + getPrecedence() { + return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1; + } +} + +class PropertyAccessToken extends Token { + constructor(variable, props, input, begin, end, file) { + super(TokenKind.PropertyAccess, input, begin, end, file); + this.variable = variable; + this.props = props; + } +} + +class FilterToken extends Token { + constructor(name, args, input, begin, end, file) { + super(TokenKind.Filter, input, begin, end, file); + this.name = name; + this.args = args; + } +} + +class HashToken extends Token { + constructor(input, begin, end, name, value, file) { + super(TokenKind.Hash, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.name = name; + this.value = value; + this.file = file; + } +} + +const rHex = /[\da-fA-F]/; +const rOct = /[0-7]/; +const escapeChar = { + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t', + v: '\x0B' +}; +function hexVal(c) { + const code = c.charCodeAt(0); + if (code >= 97) + return code - 87; + if (code >= 65) + return code - 55; + return code - 48; +} +function parseStringLiteral(str) { + let ret = ''; + for (let i = 1; i < str.length - 1; i++) { + if (str[i] !== '\\') { + ret += str[i]; + continue; + } + if (escapeChar[str[i + 1]] !== undefined) { + ret += escapeChar[str[++i]]; + } + else if (str[i + 1] === 'u') { + let val = 0; + let j = i + 2; + while (j <= i + 5 && rHex.test(str[j])) { + val = val * 16 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + else if (!rOct.test(str[i + 1])) { + ret += str[++i]; + } + else { + let j = i + 1; + let val = 0; + while (j <= i + 3 && rOct.test(str[j])) { + val = val * 8 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + } + return ret; +} + +class QuotedToken extends Token { + constructor(input, begin, end, file) { + super(TokenKind.Quoted, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = parseStringLiteral(this.getText()); + } +} + +class RangeToken extends Token { + constructor(input, begin, end, lhs, rhs, file) { + super(TokenKind.Range, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.lhs = lhs; + this.rhs = rhs; + this.file = file; + } +} + +/** + * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}` + */ +class LiquidTagToken extends DelimitedToken { + constructor(input, begin, end, options, file) { + super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file); + this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange, options.groupedExpressions); + this.name = this.tokenizer.readTagName(); + this.tokenizer.assert(this.name, 'illegal liquid tag syntax'); + this.tokenizer.skipBlank(); + } + get args() { + return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]); + } +} + +/** + * value expression with optional filters + * e.g. + * {% assign foo="bar" | append: "coo" %} + */ +class FilteredValueToken extends Token { + constructor(initial, filters, input, begin, end, file) { + super(TokenKind.FilteredValue, input, begin, end, file); + this.initial = initial; + this.filters = filters; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } +} + +const polyfill = { + now: () => Date.now() +}; +function getPerformance() { + return (typeof global === 'object' && global.performance) || + (typeof window === 'object' && window.performance) || + polyfill; +} + +class Render { + renderTemplatesToNodeStream(templates, ctx) { + const emitter = new StreamedEmitter(); + Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter))) + .then(() => emitter.end(), err => emitter.error(err)); + return emitter.stream; + } + *renderTemplates(templates, ctx, emitter) { + if (!emitter) { + emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter(); + } + ctx.renderLimit.check(getPerformance().now()); + const errors = []; + for (const tpl of templates) { + ctx.renderLimit.check(getPerformance().now()); + try { + // if tpl.render supports emitter, it'll return empty `html` + const html = yield tpl.render(ctx, emitter); + // if not, it'll return an `html`, write to the emitter for it + html && emitter.write(html); + if (ctx.breakCalled || ctx.continueCalled) + break; + } + catch (e) { + const err = LiquidError.is(e) ? e : new RenderError(e, tpl); + if (ctx.opts.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) { + throw new LiquidErrors(errors); + } + return emitter.buffer; + } +} + +function isKeyValuePair(arr) { + return isArray(arr); +} + +class Filter { + constructor(token, options, liquid) { + this.token = token; + this.name = token.name; + this.handler = isFunction(options) + ? options + : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify); + this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw); + this.args = token.args; + this.liquid = liquid; + } + *render(value, context) { + const argv = []; + for (const arg of this.args) { + if (isKeyValuePair(arg)) + argv.push([arg[0], yield evalToken(arg[1], context)]); + else + argv.push(yield evalToken(arg, context)); + } + return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]); + } +} + +class Expression { + constructor(tokens) { + this.postfix = [...toPostfix(tokens)]; + } + *evaluate(ctx, lenient) { + assert(ctx, 'unable to evaluate: context not defined'); + const operands = []; + for (const token of this.postfix) { + if (isOperatorToken(token)) { + const r = operands.pop(); + let result; + if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) { + result = yield ctx.opts.operators[token.operator](r, ctx); + } + else { + const l = operands.pop(); + result = yield ctx.opts.operators[token.operator](l, r, ctx); + } + operands.push(result); + } + else { + operands.push(yield evalToken(token, ctx, lenient)); + } + } + return operands[0]; + } + valid() { + return !!this.postfix.length; + } +} +function* evalToken(token, ctx, lenient = false) { + if (!token) + return; + if ('content' in token) + return token.content; + if (isPropertyAccessToken(token)) + return yield evalPropertyAccessToken(token, ctx, lenient); + if (isRangeToken(token)) + return yield evalRangeToken(token, ctx); + if (isFilteredValueToken(token)) + return yield evalFilteredValueToken(token, ctx, lenient); +} +function* evalFilteredValueToken(token, ctx, lenient) { + assert(ctx.liquid, 'FilteredValueToken evaluation requires liquid instance in context'); + lenient = lenient || (ctx.opts.lenientIf && token.filters.length > 0 && token.filters[0].name === 'default'); + let val = yield token.initial.evaluate(ctx, lenient); + for (const filterToken of token.filters) { + const filterImpl = ctx.liquid.filters[filterToken.name]; + assert(filterImpl || !ctx.liquid.options.strictFilters, () => `undefined filter: ${filterToken.name}`); + const filter = new Filter(filterToken, filterImpl, ctx.liquid); + val = yield filter.render(val, ctx); + } + return val; +} +function* evalPropertyAccessToken(token, ctx, lenient) { + const props = []; + for (const prop of token.props) { + props.push((yield evalToken(prop, ctx, false))); + } + try { + if (token.variable) { + const variable = yield evalToken(token.variable, ctx, lenient); + return yield ctx._getFromScope(variable, props); + } + else { + return yield ctx._get(props); + } + } + catch (e) { + if (lenient && e.name === 'InternalUndefinedVariableError') + return null; + throw (new UndefinedVariableError(e, token)); + } +} +function evalQuotedToken(token) { + return token.content; +} +function* evalRangeToken(token, ctx) { + const low = yield evalToken(token.lhs, ctx); + const high = yield evalToken(token.rhs, ctx); + ctx.memoryLimit.use(high - low + 1); + return range(+low, +high + 1); +} +function* toPostfix(tokens) { + const ops = []; + for (const token of tokens) { + if (isOperatorToken(token)) { + while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) { + yield ops.pop(); + } + ops.push(token); + } + else + yield token; + } + while (ops.length) { + yield ops.pop(); + } +} + +function isTruthy(val, ctx) { + return !isFalsy(val, ctx); +} +function isFalsy(val, ctx) { + val = toValue(val); + if (ctx.opts.jsTruthy) { + return !val; + } + else { + return val === false || undefined === val || val === null; + } +} + +const defaultOperators = { + '==': equals, + '!=': (l, r) => !equals(l, r), + '>': (l, r) => { + if (isComparable(l)) + return l.gt(r); + if (isComparable(r)) + return r.lt(l); + return toValue(l) > toValue(r); + }, + '<': (l, r) => { + if (isComparable(l)) + return l.lt(r); + if (isComparable(r)) + return r.gt(l); + return toValue(l) < toValue(r); + }, + '>=': (l, r) => { + if (isComparable(l)) + return l.geq(r); + if (isComparable(r)) + return r.leq(l); + return toValue(l) >= toValue(r); + }, + '<=': (l, r) => { + if (isComparable(l)) + return l.leq(r); + if (isComparable(r)) + return r.geq(l); + return toValue(l) <= toValue(r); + }, + 'contains': (l, r) => { + l = toValue(l); + if (isArray(l)) + return l.some((i) => equals(i, r)); + if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf)) + return l.indexOf(toValue(r)) > -1; + return false; + }, + 'not': (v, ctx) => isFalsy(toValue(v), ctx), + 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx), + 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx) +}; +function equals(lhs, rhs) { + if (isComparable(lhs)) + return lhs.equals(rhs); + if (isComparable(rhs)) + return rhs.equals(lhs); + lhs = toValue(lhs); + rhs = toValue(rhs); + if (isArray(lhs)) { + return isArray(rhs) && arrayEquals(lhs, rhs); + } + return lhs === rhs; +} +function arrayEquals(lhs, rhs) { + if (lhs.length !== rhs.length) + return false; + return !lhs.some((value, i) => !equals(value, rhs[i])); +} +function arrayIncludes(arr, item) { + return arr.some(value => equals(value, item)); +} + +class Node { + constructor(key, value, next, prev) { + this.key = key; + this.value = value; + this.next = next; + this.prev = prev; + } +} +class LRU { + constructor(limit, size = 0) { + this.limit = limit; + this.size = size; + this.cache = {}; + this.head = new Node('HEAD', null, null, null); + this.tail = new Node('TAIL', null, null, null); + this.head.next = this.tail; + this.tail.prev = this.head; + } + write(key, value) { + if (this.cache[key]) { + this.cache[key].value = value; + } + else { + const node = new Node(key, value, this.head.next, this.head); + this.head.next.prev = node; + this.head.next = node; + this.cache[key] = node; + this.size++; + this.ensureLimit(); + } + } + read(key) { + if (!this.cache[key]) + return; + const { value } = this.cache[key]; + this.remove(key); + this.write(key, value); + return value; + } + remove(key) { + const node = this.cache[key]; + node.prev.next = node.next; + node.next.prev = node.prev; + delete this.cache[key]; + this.size--; + } + clear() { + this.head.next = this.tail; + this.tail.prev = this.head; + this.size = 0; + this.cache = {}; + } + ensureLimit() { + if (this.size > this.limit) + this.remove(this.tail.prev.key); + } +} + +function requireResolve (file) { + const require = createRequire(process.cwd() + '/'); + return require.resolve(file) +} + +const statAsync = promisify(stat); +const readFileAsync = promisify(readFile$1); +function exists(filepath) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield statAsync(filepath); + return true; + } + catch (err) { + return false; + } + }); +} +function readFile(filepath) { + return readFileAsync(filepath, 'utf8'); +} +function existsSync(filepath) { + try { + statSync(filepath); + return true; + } + catch (err) { + return false; + } +} +function readFileSync(filepath) { + return readFileSync$1(filepath, 'utf8'); +} +function resolve(root, file, ext) { + if (!extname(file)) + file += ext; + return resolve$1(root, file); +} +function fallback(file) { + try { + return requireResolve(file); + } + catch (e) { } +} +function dirname(filepath) { + return dirname$1(filepath); +} +const realpathAsync = promisify(realpath); +function contains(root, file) { + return __awaiter(this, void 0, void 0, function* () { + try { + const realRoot = yield realpathAsync(root); + const realFile = yield realpathAsync(file); + const prefix = realRoot.endsWith(sep) ? realRoot : realRoot + sep; + return realFile.startsWith(prefix); + } + catch (_a) { + return false; + } + }); +} +function containsSync(root, file) { + try { + const realRoot = realpathSync(root); + const realFile = realpathSync(file); + const prefix = realRoot.endsWith(sep) ? realRoot : realRoot + sep; + return realFile.startsWith(prefix); + } + catch (_a) { + return false; + } +} + +var fs = /*#__PURE__*/Object.freeze({ + __proto__: null, + exists: exists, + readFile: readFile, + existsSync: existsSync, + readFileSync: readFileSync, + resolve: resolve, + fallback: fallback, + dirname: dirname, + contains: contains, + containsSync: containsSync, + sep: sep +}); + +function chargeJsonReplacerValue(memoryLimit, val) { + if (typeof val === 'string') { + memoryLimit.use(val.length); + } + else if (val === null || typeof val === 'number' || typeof val === 'boolean') { + memoryLimit.use(JSON.stringify(val).length); + } + else if (Array.isArray(val)) { + memoryLimit.use(val.length + 1); + } + else if (typeof val === 'object') { + memoryLimit.use(2); + } +} +function defaultFilter(value, defaultValue, ...args) { + value = toValue(value); + if (isArray(value) || isString(value)) + return value.length ? value : defaultValue; + if (value === false && (new Map(args)).get('allow_false')) + return false; + return isFalsy(value, this.context) ? defaultValue : value; +} +function json(value, space = 0) { + const memoryLimit = this.context.memoryLimit; + return JSON.stringify(value, (_key, val) => { + chargeJsonReplacerValue(memoryLimit, val); + return val; + }, space); +} +function inspect(value, space = 0) { + const memoryLimit = this.context.memoryLimit; + const ancestors = []; + return JSON.stringify(value, function (_key, value) { + if (typeof value !== 'object' || value === null) { + chargeJsonReplacerValue(memoryLimit, value); + return value; + } + // `this` is the object that value is contained in, i.e., its direct parent. + while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) + ancestors.pop(); + if (ancestors.includes(value)) { + memoryLimit.use('[Circular]'.length); + return '[Circular]'; + } + ancestors.push(value); + chargeJsonReplacerValue(memoryLimit, value); + return value; + }, space); +} +function to_integer(value) { + return Number(value); +} +const raw = { + raw: true, + handler: identify +}; +var misc = { + default: defaultFilter, + raw, + jsonify: json, + to_integer, + json, + inspect +}; + +const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; +function escape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&|<|>|"|'/g, m => escapeMap[m]); +} +function xml_escape(str) { + return escape.call(this, str); +} +function unescape(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]); +} +function escape_once(str) { + return escape.call(this, unescape.call(this, str)); +} +function newline_to_br(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, '
\n'); +} +// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex +// equivalent is O(n^2) in V8 on unclosed openers. +function strip_html(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + const blocks = new Map([[''], [''], [''], ['<', '>']]); + let out = ''; + let i = 0; + while (i < str.length) { + const lt = str.indexOf('<', i); + if (lt < 0) + return out + str.slice(i); + out += str.slice(i, lt); + for (const [opener, closer] of blocks) { + if (!str.startsWith(opener, lt)) + continue; + const e = str.indexOf(closer, lt + opener.length); + if (e >= 0) { + i = e + closer.length; + break; + } + blocks.delete(opener); + } + if (i <= lt) + return out + str.slice(lt); + } + return out; +} + +var htmlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + escape: escape, + xml_escape: xml_escape, + escape_once: escape_once, + newline_to_br: newline_to_br, + strip_html: strip_html +}); + +class MapFS { + constructor(mapping) { + this.mapping = mapping; + this.sep = '/'; + } + exists(filepath) { + return __awaiter(this, void 0, void 0, function* () { + return this.existsSync(filepath); + }); + } + existsSync(filepath) { + return !isNil(this.mapping[filepath]); + } + readFile(filepath) { + return __awaiter(this, void 0, void 0, function* () { + return this.readFileSync(filepath); + }); + } + readFileSync(filepath) { + const content = this.mapping[filepath]; + if (isNil(content)) + throw new Error(`ENOENT: ${filepath}`); + return content; + } + dirname(filepath) { + const segments = filepath.split(this.sep); + segments.pop(); + return segments.join(this.sep); + } + resolve(dir, file, ext) { + file += ext; + if (dir === '.') + return file; + const segments = dir.split(/\/+/); + for (const segment of file.split(this.sep)) { + if (segment === '.' || segment === '') + continue; + else if (segment === '..') { + if (segments.length > 1 || segments[0] !== '') + segments.pop(); + } + else + segments.push(segment); + } + return segments.join(this.sep); + } +} + +const defaultOptions = { + root: ['.'], + layouts: ['.'], + partials: ['.'], + relativeReference: true, + jekyllInclude: false, + keyValueSeparator: ':', + cache: undefined, + extname: '', + fs: fs, + dynamicPartials: true, + jsTruthy: false, + dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z', + locale: '', + trimTagRight: false, + trimTagLeft: false, + trimOutputRight: false, + trimOutputLeft: false, + greedy: true, + tagDelimiterLeft: '{%', + tagDelimiterRight: '%}', + outputDelimiterLeft: '{{', + outputDelimiterRight: '}}', + preserveTimezones: false, + strictFilters: false, + strictVariables: false, + ownPropertyOnly: true, + lenientIf: false, + globals: {}, + keepOutputType: false, + operators: defaultOperators, + groupedExpressions: false, + memoryLimit: Infinity, + parseLimit: Infinity, + renderLimit: Infinity +}; +function normalize(options) { + var _a, _b; + if (options.hasOwnProperty('root')) { + if (!options.hasOwnProperty('partials')) + options.partials = options.root; + if (!options.hasOwnProperty('layouts')) + options.layouts = options.root; + } + if (options.hasOwnProperty('cache')) { + let cache; + if (typeof options.cache === 'number') + cache = options.cache > 0 ? new LRU(options.cache) : undefined; + else if (typeof options.cache === 'object') + cache = options.cache; + else + cache = options.cache ? new LRU(1024) : undefined; + options.cache = cache; + } + options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options); + if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) { + console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning'); + options.relativeReference = false; + } + options.root = normalizeDirectoryList(options.root); + options.partials = normalizeDirectoryList(options.partials); + options.layouts = normalizeDirectoryList(options.layouts); + options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape); + if (!options.locale) { + options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US'; + } + if (options.templates) { + options.fs = new MapFS(options.templates); + options.relativeReference = true; + options.root = options.partials = options.layouts = '.'; + } + return options; +} +function getOutputEscapeFunction(nameOrFunction) { + if (nameOrFunction === 'escape') + return escape; + if (nameOrFunction === 'json') + return misc.json; + assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function'); + return nameOrFunction; +} +function normalizeDirectoryList(value) { + let list = []; + if (isArray(value)) + list = value; + if (isString(value)) + list = [value]; + return list; +} + +function whiteSpaceCtrl(tokens, options) { + let inRaw = false; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (!isDelimitedToken(token)) + continue; + if (!inRaw && token.trimLeft) { + trimLeft(tokens[i - 1], options.greedy); + } + if (isTagToken(token)) { + if (token.name === 'raw') + inRaw = true; + else if (token.name === 'endraw') + inRaw = false; + } + if (!inRaw && token.trimRight) { + trimRight(tokens[i + 1], options.greedy); + } + } +} +function trimLeft(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + const mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) + token.trimRight++; +} +function trimRight(token, greedy) { + if (!token || !isHTMLToken(token)) + return; + const mask = greedy ? BLANK : INLINE_BLANK; + while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) + token.trimLeft++; + if (token.input.charAt(token.begin + token.trimLeft) === '\n') + token.trimLeft++; +} + +class Tokenizer { + constructor(input, operators = defaultOptions.operators, file, range, groupedExpressions = false) { + this.input = input; + this.file = file; + this.rawBeginAt = -1; + this.p = range ? range[0] : 0; + this.N = range ? range[1] : input.length; + this.opTrie = createTrie(operators); + this.literalTrie = createTrie(literalValues); + this.groupedExpressions = groupedExpressions; + } + readExpression() { + return new Expression(this.readExpressionTokens()); + } + *readExpressionTokens() { + while (this.p < this.N) { + const operator = this.readOperator(); + if (operator) { + yield operator; + continue; + } + const operand = this.readValue(); + if (operand) { + yield operand; + continue; + } + return; + } + } + readOperator() { + this.skipBlank(); + const end = this.matchTrie(this.opTrie); + if (end === -1) + return; + return new OperatorToken(this.input, this.p, (this.p = end), this.file); + } + matchTrie(trie) { + let node = trie; + let i = this.p; + let info; + while (node[this.input[i]] && i < this.N) { + node = node[this.input[i++]]; + if (node['end']) + info = node; + } + if (!info) + return -1; + if (info['needBoundary'] && isWord(this.peek(i - this.p))) + return -1; + return i; + } + readFilteredValue() { + const begin = this.p; + const initial = this.readExpression(); + this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`); + const filters = this.readFilters(); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + readFilters() { + const filters = []; + while (true) { + const filter = this.readFilter(); + if (!filter) + return filters; + filters.push(filter); + } + } + readFilter() { + this.skipBlank(); + if (this.end()) + return null; + if (this.peek() === ')') + return null; + this.assert(this.read() === '|', `expected "|" before filter`); + const name = this.readIdentifier(); + if (!name.size()) { + this.assert(this.end(), `expected filter name`); + return null; + } + const args = []; + this.skipBlank(); + if (this.peek() === ':') { + do { + ++this.p; + const arg = this.readFilterArg(); + arg && args.push(arg); + this.skipBlank(); + this.assert(this.end() || this.peek() === ',' || this.peek() === '|' || this.peek() === ')', () => `unexpected character ${this.snapshot()}`); + } while (this.peek() === ','); + } + else if (this.peek() === '|' || this.peek() === ')' || this.end()) ; + else { + throw this.error('expected ":" after filter name'); + } + return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file); + } + readFilterArg() { + const key = this.readValue(); + if (!key) + return; + this.skipBlank(); + if (this.peek() !== ':') + return key; + ++this.p; + const value = this.readValue(); + return [key.getText(), value]; + } + readTopLevelTokens(options = defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readTopLevelToken(options); + tokens.push(token); + } + whiteSpaceCtrl(tokens, options); + return tokens; + } + readTopLevelToken(options) { + const { tagDelimiterLeft, outputDelimiterLeft } = options; + if (this.rawBeginAt > -1) + return this.readEndrawOrRawContent(options); + if (this.match(tagDelimiterLeft)) + return this.readTagToken(options); + if (this.match(outputDelimiterLeft)) + return this.readOutputToken(options); + return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]); + } + readHTMLToken(stopStrings) { + const begin = this.p; + while (this.p < this.N) { + if (stopStrings.some(str => this.match(str))) + break; + ++this.p; + } + return new HTMLToken(this.input, begin, this.p, this.file); + } + readTagToken(options) { + const { file, input } = this; + const begin = this.p; + if (this.readToDelimiter(options.tagDelimiterRight) === -1) { + throw this.error(`tag ${this.snapshot(begin)} not closed`, begin); + } + const token = new TagToken(input, begin, this.p, options, file); + if (token.name === 'raw') + this.rawBeginAt = begin; + return token; + } + readToDelimiter(delimiter, respectQuoted = false) { + this.skipBlank(); + while (this.p < this.N) { + if (respectQuoted && (this.peekType() & QUOTE)) { + this.readQuoted(); + continue; + } + ++this.p; + if (this.rmatch(delimiter)) + return this.p; + } + return -1; + } + readOutputToken(options = defaultOptions) { + const { file, input } = this; + const { outputDelimiterRight } = options; + const begin = this.p; + if (this.readToDelimiter(outputDelimiterRight, true) === -1) { + throw this.error(`output ${this.snapshot(begin)} not closed`, begin); + } + return new OutputToken(input, begin, this.p, options, file); + } + readEndrawOrRawContent(options) { + const { tagDelimiterLeft, tagDelimiterRight } = options; + const begin = this.p; + let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + while (this.p < this.N) { + if (this.readIdentifier().getText() !== 'endraw') { + leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + continue; + } + while (this.p <= this.N) { + if (this.rmatch(tagDelimiterRight)) { + const end = this.p; + if (begin === leftPos) { + this.rawBeginAt = -1; + return new TagToken(this.input, begin, end, options, this.file); + } + else { + this.p = leftPos; + return new HTMLToken(this.input, begin, leftPos, this.file); + } + } + if (this.rmatch(tagDelimiterLeft)) + break; + this.p++; + } + } + throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin); + } + readLiquidTagTokens(options = defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readLiquidTagToken(options); + token && tokens.push(token); + } + return tokens; + } + readLiquidTagToken(options) { + this.skipBlank(); + if (this.end()) + return; + const begin = this.p; + this.readToDelimiter('\n'); + const end = this.p; + return new LiquidTagToken(this.input, begin, end, options, this.file); + } + error(msg, pos = this.p) { + return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file)); + } + assert(pred, msg, pos) { + if (!pred) + throw this.error(typeof msg === 'function' ? msg() : msg, pos); + } + snapshot(begin = this.p) { + return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32)); + } + /** + * @deprecated use #readIdentifier instead + */ + readWord() { + return this.readIdentifier(); + } + readIdentifier() { + this.skipBlank(); + const begin = this.p; + while (!this.end() && isWord(this.peek())) + ++this.p; + return new IdentifierToken(this.input, begin, this.p, this.file); + } + readNonEmptyIdentifier() { + const id = this.readIdentifier(); + return id.size() ? id : undefined; + } + readTagName() { + this.skipBlank(); + // Handle inline comment tags + if (this.input[this.p] === '#') + return this.input.slice(this.p, ++this.p); + return this.readIdentifier().getText(); + } + readHashes(jekyllStyle) { + const hashes = []; + while (true) { + const hash = this.readHash(jekyllStyle); + if (!hash) + return hashes; + hashes.push(hash); + } + } + readHash(jekyllStyle) { + this.skipBlank(); + if (this.peek() === ',') + ++this.p; + const begin = this.p; + const name = this.readNonEmptyIdentifier(); + if (!name) + return; + let value; + this.skipBlank(); + const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':'); + if (this.peek() === sep) { + ++this.p; + value = this.readValue(); + } + return new HashToken(this.input, begin, this.p, name, value, this.file); + } + remaining() { + return this.input.slice(this.p, this.N); + } + advance(step = 1) { + this.p += step; + } + end() { + return this.p >= this.N; + } + read() { + return this.input[this.p++]; + } + readTo(end) { + while (this.p < this.N) { + ++this.p; + if (this.rmatch(end)) + return this.p; + } + return -1; + } + readValue() { + this.skipBlank(); + const begin = this.p; + let variable = this.readLiteral() || this.readQuoted() || this.readNumber(); + if (!variable && this.peek() === '(') { + variable = this.readGroupOrRange(); + } + const props = this.readProperties(!variable); + if (!props.length) + return variable; + return new PropertyAccessToken(variable, props, this.input, begin, this.p); + } + readScopeValue() { + this.skipBlank(); + const begin = this.p; + const props = this.readProperties(); + if (!props.length) + return undefined; + return new PropertyAccessToken(undefined, props, this.input, begin, this.p); + } + readProperties(isBegin = true) { + const props = []; + while (true) { + if (this.peek() === '[') { + this.p++; + const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file); + this.assert(this.readTo(']') !== -1, '[ not closed'); + props.push(prop); + continue; + } + if (isBegin && !props.length) { + const prop = this.readNonEmptyIdentifier(); + if (prop) { + props.push(prop); + continue; + } + } + if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax + this.p++; + const prop = this.readNonEmptyIdentifier(); + if (!prop) + break; + props.push(prop); + continue; + } + break; + } + return props; + } + readNumber() { + this.skipBlank(); + let decimalFound = false; + let digitFound = false; + let n = 0; + if (this.peekType() & SIGN) + n++; + while (this.p + n <= this.N) { + if (this.peekType(n) & NUMBER) { + digitFound = true; + n++; + } + else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') { + if (decimalFound || !digitFound) + return; + decimalFound = true; + n++; + } + else + break; + } + if (digitFound && !isWord(this.peek(n))) { + const num = new NumberToken(this.input, this.p, this.p + n, this.file); + this.advance(n); + return num; + } + } + readLiteral() { + this.skipBlank(); + const end = this.matchTrie(this.literalTrie); + if (end === -1) + return; + const literal = new LiteralToken(this.input, this.p, end, this.file); + this.p = end; + return literal; + } + readGroupOrRange() { + this.skipBlank(); + const begin = this.p; + if (this.peek() !== '(') + return; + ++this.p; + const lhs = this.readValueOrThrow(); + this.skipBlank(); + if (this.peek() === '.' && this.peek(1) === '.') { + this.p += 2; + const rhs = this.readValueOrThrow(); + this.skipBlank(); + this.assert(this.read() === ')', 'invalid range syntax'); + return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file); + } + if (this.groupedExpressions) { + const initial = new Expression([lhs, ...this.readExpressionTokens()]); + this.assert(initial.valid(), () => `invalid value expression: ${this.snapshot()}`); + const filters = this.readFilters(); + this.skipBlank(); + this.assert(this.read() === ')', 'unbalanced parentheses'); + return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file); + } + throw this.error('invalid range syntax'); + } + readValueOrThrow() { + const value = this.readValue(); + this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`); + return value; + } + readQuoted() { + this.skipBlank(); + const begin = this.p; + if (!(this.peekType() & QUOTE)) + return; + ++this.p; + let escaped = false; + while (this.p < this.N) { + ++this.p; + if (this.input[this.p - 1] === this.input[begin] && !escaped) + break; + if (escaped) + escaped = false; + else if (this.input[this.p - 1] === '\\') + escaped = true; + } + return new QuotedToken(this.input, begin, this.p, this.file); + } + *readFileNameTemplate(options) { + const { outputDelimiterLeft } = options; + const htmlStopStrings = [',', ' ', '\r', '\n', '\t', outputDelimiterLeft]; + const htmlStopStringSet = new Set(htmlStopStrings); + // break on ',' and ' ', outputDelimiterLeft only stops HTML token + while (this.p < this.N && !htmlStopStringSet.has(this.peek())) { + yield this.match(outputDelimiterLeft) + ? this.readOutputToken(options) + : this.readHTMLToken(htmlStopStrings); + } + } + match(word) { + for (let i = 0; i < word.length; i++) { + if (word[i] !== this.input[this.p + i]) + return false; + } + return true; + } + rmatch(pattern) { + for (let i = 0; i < pattern.length; i++) { + if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) + return false; + } + return true; + } + peekType(n = 0) { + return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)]; + } + peek(n = 0) { + return this.p + n >= this.N ? '' : this.input[this.p + n]; + } + skipBlank() { + while (this.peekType() & BLANK) + ++this.p; + } +} + +class ParseStream { + constructor(tokens, parseToken) { + this.handlers = {}; + this.stopRequested = false; + this.tokens = tokens; + this.parseToken = parseToken; + } + on(name, cb) { + this.handlers[name] = cb; + return this; + } + trigger(event, arg) { + const h = this.handlers[event]; + return h ? (h.call(this, arg), true) : false; + } + start() { + this.trigger('start'); + let token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) { + continue; + } + const template = this.parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + } + stop() { + this.stopRequested = true; + return this; + } +} + +class TemplateImpl { + constructor(token) { + this.token = token; + } +} + +class Tag extends TemplateImpl { + constructor(token, remainTokens, liquid) { + super(token); + this.name = token.name; + this.liquid = liquid; + this.tokenizer = token.tokenizer; + } +} + +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +class Hash { + constructor(input, jekyllStyle) { + this.hash = {}; + const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {}); + for (const hash of tokenizer.readHashes(jekyllStyle)) { + this.hash[hash.name.content] = hash.value; + } + } + *render(ctx) { + const hash = {}; + for (const key of Object.keys(this.hash)) { + hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx); + } + return hash; + } +} + +function createTagClass(options) { + return class extends Tag { + constructor(token, tokens, liquid) { + super(token, tokens, liquid); + if (isFunction(options.parse)) { + options.parse.call(this, token, tokens); + } + } + *render(ctx, emitter) { + const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx)); + return yield options.render.call(this, ctx, emitter, hash); + } + }; +} + +class Value { + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + constructor(input, liquid) { + this.filters = []; + const token = typeof input === 'string' + ? new Tokenizer(input, liquid.options.operators, undefined, undefined, liquid.options.groupedExpressions).readFilteredValue() + : input; + this.initial = token.initial; + this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid)); + } + *value(ctx, lenient) { + lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default'); + let val = yield this.initial.evaluate(ctx, lenient); + for (const filter of this.filters) { + val = yield filter.render(val, ctx); + } + return val; + } + getFilter(liquid, name) { + const impl = liquid.filters[name]; + assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`); + return impl; + } +} + +class Output extends TemplateImpl { + constructor(token, liquid) { + var _a; + super(token); + const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange, liquid.options.groupedExpressions); + this.value = new Value(tokenizer.readFilteredValue(), liquid); + const filters = this.value.filters; + const outputEscape = liquid.options.outputEscape; + if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) { + const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0); + filters.push(new Filter(token, outputEscape, liquid)); + } + } + *render(ctx, emitter) { + const val = yield this.value.value(ctx, false); + emitter.write(val); + } + *arguments() { + yield this.value; + } +} + +class HTML extends TemplateImpl { + constructor(token) { + super(token); + this.str = token.getContent(); + } + *render(ctx, emitter) { + emitter.write(this.str); + } +} + +/** + * A variable's segments and location, which can be coerced to a string. + */ +class Variable { + constructor(segments, location) { + this.segments = segments; + this.location = location; + } + toString() { + return segmentsString(this.segments, true); + } + /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */ + toArray() { + function* _visit(...segments) { + for (const segment of segments) { + if (segment instanceof Variable) { + yield Array.from(_visit(...segment.segments)); + } + else { + yield segment; + } + } + } + return Array.from(_visit(...this.segments)); + } +} +/** + * Group variables by the string representation of their root segment. + */ +class VariableMap { + constructor() { + this.map = new Map(); + } + get(key) { + const k = segmentsString([key.segments[0]]); + if (!this.map.has(k)) { + this.map.set(k, []); + } + return this.map.get(k); + } + has(key) { + return this.map.has(segmentsString([key.segments[0]])); + } + push(variable) { + this.get(variable).push(variable); + } + asObject() { + return Object.fromEntries(this.map); + } +} +const defaultStaticAnalysisOptions = { + partials: true +}; +function* _analyze(templates, partials, sync) { + const variables = new VariableMap(); + const globals = new VariableMap(); + const locals = new VariableMap(); + const rootScope = new DummyScope(new Set()); + // Names of partial templates that we've already analyzed. + const seen = new Set(); + function updateVariables(variable, scope) { + variables.push(variable); + const aliased = scope.alias(variable); + if (aliased !== undefined) { + const root = aliased.segments[0]; + // TODO: What if a a template renders a rendered template? Do we need scope.parent? + if (isString(root) && !rootScope.has(root)) { + globals.push(aliased); + } + } + else { + const root = variable.segments[0]; + if (isString(root) && !scope.has(root)) { + globals.push(variable); + } + } + // Recurse for nested Variables + for (const segment of variable.segments) { + if (segment instanceof Variable) { + updateVariables(segment, scope); + } + } + } + function* visit(template, scope) { + if (template.arguments) { + for (const arg of template.arguments()) { + for (const variable of extractVariables(arg)) { + updateVariables(variable, scope); + } + } + } + if (template.localScope) { + for (const ident of template.localScope()) { + scope.add(ident.content); + scope.deleteAlias(ident.content); + const [row, col] = ident.getPosition(); + locals.push(new Variable([ident.content], { row, col, file: ident.file })); + } + } + if (template.children) { + if (template.partialScope) { + const partial = template.partialScope(); + if (partial === undefined) { + // Layouts, for example, can have children that are not partials. + for (const child of (yield template.children(partials, sync))) { + yield visit(child, scope); + } + return; + } + if (seen.has(partial.name)) + return; + const partialScopeNames = new Set(); + const partialScope = partial.isolated + ? new DummyScope(partialScopeNames) + : scope.push(partialScopeNames); + for (const name of partial.scope) { + if (isString(name)) { + partialScopeNames.add(name); + } + else { + const [alias, argument] = name; + partialScopeNames.add(alias); + const variables = Array.from(extractVariables(argument)); + if (variables.length) { + partialScope.setAlias(alias, variables[0].segments); + } + } + } + for (const child of (yield template.children(partials, sync))) { + yield visit(child, partialScope); + seen.add(partial.name); + } + partialScope.pop(); + } + else { + if (template.blockScope) { + scope.push(new Set(template.blockScope())); + } + for (const child of (yield template.children(partials, sync))) { + yield visit(child, scope); + } + if (template.blockScope) { + scope.pop(); + } + } + } + } + for (const template of templates) { + yield visit(template, rootScope); + } + return { + variables: variables.asObject(), + globals: globals.asObject(), + locals: locals.asObject() + }; +} +/** + * Statically analyze a template and report variable usage. + */ +function analyze(template, options = {}) { + const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options); + return toPromise(_analyze(template, opts.partials, false)); +} +/** + * Statically analyze a template and report variable usage. + */ +function analyzeSync(template, options = {}) { + const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options); + return toValueSync(_analyze(template, opts.partials, true)); +} +/** + * A stack to manage scopes while traversing templates during static analysis. + */ +class DummyScope { + constructor(globals) { + this.stack = [{ names: globals, aliases: new Map() }]; + } + /** Return true if `name` is in scope. */ + has(name) { + for (const scope of this.stack) { + if (scope.names.has(name)) { + return true; + } + } + return false; + } + push(scope) { + this.stack.push({ names: scope, aliases: new Map() }); + return this; + } + pop() { + var _a; + return (_a = this.stack.pop()) === null || _a === void 0 ? void 0 : _a.names; + } + // Add a name to the template scope. + add(name) { + this.stack[0].names.add(name); + } + /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */ + alias(variable) { + const root = variable.segments[0]; + if (!isString(root)) + return undefined; + const alias = this.getAlias(root); + if (alias === undefined) + return undefined; + return new Variable([...alias, ...variable.segments.slice(1)], variable.location); + } + // TODO: `from` could be a path with multiple segments, like `include.x`. + setAlias(from, to) { + this.stack[this.stack.length - 1].aliases.set(from, to); + } + deleteAlias(name) { + this.stack[this.stack.length - 1].aliases.delete(name); + } + getAlias(name) { + for (const scope of this.stack) { + if (scope.aliases.has(name)) { + return scope.aliases.get(name); + } + // If a scope has defined `name`, then it masks aliases in parent scopes. + if (scope.names.has(name)) { + return undefined; + } + } + return undefined; + } +} +function* extractVariables(value) { + if (isValueToken(value)) { + yield* extractValueTokenVariables(value); + } + else if (value instanceof Value) { + yield* extractFilteredValueVariables(value); + } +} +function* extractFilteredValueVariables(value) { + for (const token of value.initial.postfix) { + if (isValueToken(token)) { + yield* extractValueTokenVariables(token); + } + } + for (const filter of value.filters) { + for (const arg of filter.args) { + if (isKeyValuePair(arg) && arg[1]) { + yield* extractValueTokenVariables(arg[1]); + } + else if (isValueToken(arg)) { + yield* extractValueTokenVariables(arg); + } + } + } +} +function* extractValueTokenVariables(token) { + if (isRangeToken(token)) { + yield* extractValueTokenVariables(token.lhs); + yield* extractValueTokenVariables(token.rhs); + } + else if (isFilteredValueToken(token)) { + yield* extractGroupedExpressionTokenVariables(token); + } + else if (isPropertyAccessToken(token)) { + yield extractPropertyAccessVariable(token); + } +} +function* extractGroupedExpressionTokenVariables(token) { + if (!isFilteredValueToken(token)) + return; + for (const t of token.initial.postfix) { + if (isValueToken(t)) + yield* extractValueTokenVariables(t); + } + for (const filter of token.filters) { + for (const arg of filter.args) { + if (isKeyValuePair(arg) && arg[1]) { + yield* extractValueTokenVariables(arg[1]); + } + else if (isValueToken(arg)) { + yield* extractValueTokenVariables(arg); + } + } + } +} +function extractPropertyAccessVariable(token) { + const segments = []; + // token is not guaranteed to have `file` set. We'll try to get it from a prop if not. + let file = token.file; + // Here we're flattening the first segment of a path if it is a nested path. + const root = token.props[0]; + file = file || root.file; + if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) { + segments.push(root.content); + } + else if (isPropertyAccessToken(root)) { + // Flatten paths that start with a nested path. + segments.push(...extractPropertyAccessVariable(root).segments); + } + for (const prop of token.props.slice(1)) { + file = file || prop.file; + if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) { + segments.push(prop.content); + } + else if (isPropertyAccessToken(prop)) { + segments.push(extractPropertyAccessVariable(prop)); + } + } + const [row, col] = token.getPosition(); + return new Variable(segments, { + row, + col, + file + }); +} +// This is used to detect segments that can be represented with dot notation +// when creating a string representation of VariableSegments. +const RE_PROPERTY = /^[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*$/; +/** + * Return a string representation of segments using dot notation where possible. + * @param segments - The property names and array indices that make up a path to a variable. + * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets. + */ +function segmentsString(segments, bracketedRoot = false) { + const buf = []; + const root = segments[0]; + if (isString(root)) { + if (!bracketedRoot || root.match(RE_PROPERTY)) { + buf.push(`${root}`); + } + else { + buf.push(`['${root}']`); + } + } + for (const segment of segments.slice(1)) { + if (segment instanceof Variable) { + buf.push(`[${segmentsString(segment.segments)}]`); + } + else if (isString(segment)) { + if (segment.match(RE_PROPERTY)) { + buf.push(`.${segment}`); + } + else { + buf.push(`['${segment}']`); + } + } + else { + buf.push(`[${segment}]`); + } + } + return buf.join(''); +} + +var LookupType; +(function (LookupType) { + LookupType["Partials"] = "partials"; + LookupType["Layouts"] = "layouts"; + LookupType["Root"] = "root"; +})(LookupType || (LookupType = {})); +class Loader { + constructor(options) { + var _a, _b, _c, _d; + this.options = options; + if (options.relativeReference) { + const sep = options.fs.sep; + assert(sep, '`fs.sep` is required for relative reference'); + const prefixes = ['.' + sep, '..' + sep, './', '../']; + this.shouldLoadRelative = (referencedFile) => prefixes.some(prefix => referencedFile.startsWith(prefix)); + } + else { + this.shouldLoadRelative = (_referencedFile) => false; + } + const fs = options.fs; + this.contains = toLiquidAsync(((_a = fs.contains) === null || _a === void 0 ? void 0 : _a.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return true; })), ((_b = fs.containsSync) === null || _b === void 0 ? void 0 : _b.bind(fs)) || (() => true)); + this.exists = toLiquidAsync(((_c = fs.exists) === null || _c === void 0 ? void 0 : _c.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return false; })), (_d = fs.existsSync) === null || _d === void 0 ? void 0 : _d.bind(fs)); + } + *lookup(file, type, sync, currentFile) { + const dirs = this.options[type]; + for (const filepath of this.candidates(file, dirs, currentFile)) { + let allowed = false; + for (const dir of dirs) { + if (yield this.contains(!!sync, dir, filepath)) { + allowed = true; + break; + } + } + if (!allowed) + continue; + if (yield this.exists(!!sync, filepath)) + return filepath; + } + throw this.lookupError(file, dirs); + } + *candidates(file, dirs, currentFile) { + const { fs, extname } = this.options; + if (this.shouldLoadRelative(file) && currentFile) { + const referenced = fs.resolve(this.dirname(currentFile), file, extname); + yield referenced; + } + for (const dir of dirs) { + const referenced = fs.resolve(dir, file, extname); + yield referenced; + } + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file); + if (filepath !== undefined) + yield filepath; + } + } + dirname(path) { + const fs = this.options.fs; + assert(fs.dirname, '`fs.dirname` is required for relative reference'); + return fs.dirname(path); + } + lookupError(file, roots) { + const err = new Error('ENOENT'); + err.message = `ENOENT: Failed to lookup "${file}" in "${roots}"`; + err.code = 'ENOENT'; + return err; + } +} + +class Parser { + constructor(liquid) { + var _a, _b; + this.liquid = liquid; + this.cache = this.liquid.options.cache; + this.fs = this.liquid.options.fs; + this.parseFile = this.cache ? this._parseFileCached : this._parseFile; + this.loader = new Loader(this.liquid.options); + this.parseLimit = new Limiter('parse length', liquid.options.parseLimit); + this.readFile = toLiquidAsync(((_a = this.fs.readFile) === null || _a === void 0 ? void 0 : _a.bind(this.fs)) || (() => __awaiter(this, void 0, void 0, function* () { throw new Error('readFile not implemented'); })), (_b = this.fs.readFileSync) === null || _b === void 0 ? void 0 : _b.bind(this.fs)); + } + parse(html, filepath) { + html = String(html); + this.parseLimit.use(html.length); + const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath, undefined, this.liquid.options.groupedExpressions); + const tokens = tokenizer.readTopLevelTokens(this.liquid.options); + return this.parseTokens(tokens); + } + parseTokens(tokens) { + let token; + const templates = []; + const errors = []; + while ((token = tokens.shift())) { + try { + templates.push(this.parseToken(token, tokens)); + } + catch (err) { + if (this.liquid.options.catchAllErrors) + errors.push(err); + else + throw err; + } + } + if (errors.length) + throw new LiquidErrors(errors); + return templates; + } + parseToken(token, remainTokens) { + try { + if (isTagToken(token)) { + const TagClass = this.liquid.tags[token.name]; + assert(TagClass, `tag "${token.name}" not found`); + return new TagClass(token, remainTokens, this.liquid, this); + } + if (isOutputToken(token)) { + return new Output(token, this.liquid); + } + return new HTML(token); + } + catch (e) { + if (LiquidError.is(e)) + throw e; + throw new ParseError(e, token); + } + } + parseStream(tokens) { + return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens)); + } + *_parseFileCached(file, sync, type = LookupType.Root, currentFile) { + const cache = this.cache; + const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file; + const tpls = yield cache.read(key); + if (tpls) + return tpls; + const task = this._parseFile(file, sync, type, currentFile); + // sync mode: exec the task and cache the result + // async mode: cache the task before exec + const taskOrTpl = sync ? yield task : toPromise(task); + cache.write(key, taskOrTpl); + // note: concurrent tasks will be reused, cache for failed task is removed until its end + try { + return yield taskOrTpl; + } + catch (err) { + cache.remove(key); + throw err; + } + } + *_parseFile(file, sync, type = LookupType.Root, currentFile) { + const filepath = yield this.loader.lookup(file, type, sync, currentFile); + return this.parse(yield this.readFile(!!sync, filepath), filepath); + } +} + +var TokenKind; +(function (TokenKind) { + TokenKind[TokenKind["Number"] = 1] = "Number"; + TokenKind[TokenKind["Literal"] = 2] = "Literal"; + TokenKind[TokenKind["Tag"] = 4] = "Tag"; + TokenKind[TokenKind["Output"] = 8] = "Output"; + TokenKind[TokenKind["HTML"] = 16] = "HTML"; + TokenKind[TokenKind["Filter"] = 32] = "Filter"; + TokenKind[TokenKind["Hash"] = 64] = "Hash"; + TokenKind[TokenKind["PropertyAccess"] = 128] = "PropertyAccess"; + TokenKind[TokenKind["Word"] = 256] = "Word"; + TokenKind[TokenKind["Range"] = 512] = "Range"; + TokenKind[TokenKind["Quoted"] = 1024] = "Quoted"; + TokenKind[TokenKind["Operator"] = 2048] = "Operator"; + TokenKind[TokenKind["FilteredValue"] = 4096] = "FilteredValue"; + TokenKind[TokenKind["GroupedExpression"] = 8192] = "GroupedExpression"; + TokenKind[TokenKind["Delimited"] = 12] = "Delimited"; +})(TokenKind || (TokenKind = {})); + +function isDelimitedToken(val) { + return !!(getKind(val) & TokenKind.Delimited); +} +function isOperatorToken(val) { + return getKind(val) === TokenKind.Operator; +} +function isHTMLToken(val) { + return getKind(val) === TokenKind.HTML; +} +function isOutputToken(val) { + return getKind(val) === TokenKind.Output; +} +function isTagToken(val) { + return getKind(val) === TokenKind.Tag; +} +function isQuotedToken(val) { + return getKind(val) === TokenKind.Quoted; +} +function isLiteralToken(val) { + return getKind(val) === TokenKind.Literal; +} +function isNumberToken(val) { + return getKind(val) === TokenKind.Number; +} +function isPropertyAccessToken(val) { + return getKind(val) === TokenKind.PropertyAccess; +} +function isWordToken(val) { + return getKind(val) === TokenKind.Word; +} +function isRangeToken(val) { + return getKind(val) === TokenKind.Range; +} +function isFilteredValueToken(val) { + return getKind(val) === TokenKind.FilteredValue; +} +function isValueToken(val) { + // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range | TokenKind.FilteredValue + return (getKind(val) & 5763) > 0; +} +function getKind(val) { + return val ? val.kind : -1; +} + +var typeGuards = /*#__PURE__*/Object.freeze({ + __proto__: null, + isDelimitedToken: isDelimitedToken, + isOperatorToken: isOperatorToken, + isHTMLToken: isHTMLToken, + isOutputToken: isOutputToken, + isTagToken: isTagToken, + isQuotedToken: isQuotedToken, + isLiteralToken: isLiteralToken, + isNumberToken: isNumberToken, + isPropertyAccessToken: isPropertyAccessToken, + isWordToken: isWordToken, + isRangeToken: isRangeToken, + isFilteredValueToken: isFilteredValueToken, + isValueToken: isValueToken +}); + +function createScope(from) { + const scope = Object.create(null); + if (from) + Object.assign(scope, from); + return scope; +} + +class Context { + constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit, liquid } = {}) { + var _a, _b, _c, _d, _e; + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + this.scopes = [createScope()]; + this.registers = {}; + this.breakCalled = false; + this.continueCalled = false; + this.sync = !!renderOptions.sync; + this.opts = opts; + this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals; + this.environments = isObject(env) ? env : Object(env); + this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables; + this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly; + this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit); + this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit)); + this.liquid = liquid; + } + getRegister(key, defaultValue = undefined) { + return (this.registers[key] = this.registers[key] || defaultValue); + } + setRegister(key, value) { + return (this.registers[key] = value); + } + saveRegister(...keys) { + return keys.map(key => [key, this.getRegister(key)]); + } + restoreRegister(keyValues) { + return keyValues.forEach(([key, value]) => this.setRegister(key, value)); + } + getAll() { + return [this.globals, this.environments, ...this.scopes] + .reduce((ctx, val) => __assign(ctx, val), {}); + } + /** + * @deprecated use `_get()` or `getSync()` instead + */ + get(paths) { + return this.getSync(paths); + } + getSync(paths) { + return toValueSync(this._get(paths)); + } + *_get(paths) { + const scope = this.findScope(paths[0]); // first prop should always be a string + return yield this._getFromScope(scope, paths); + } + /** + * @deprecated use `_get()` instead + */ + getFromScope(scope, paths) { + return toValueSync(this._getFromScope(scope, paths)); + } + *_getFromScope(scope, paths, strictVariables = this.strictVariables) { + if (isString(paths)) + paths = paths.split('.'); + for (let i = 0; i < paths.length; i++) { + scope = yield this.readProperty(scope, paths[i]); + if (strictVariables && isUndefined(scope)) { + throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.')); + } + } + return scope; + } + push(ctx) { + return this.scopes.push(ctx); + } + pop() { + return this.scopes.pop(); + } + bottom() { + return this.scopes[0]; + } + spawn(scope = {}) { + return new Context(scope, this.opts, { + sync: this.sync, + globals: this.globals, + strictVariables: this.strictVariables, + ownPropertyOnly: this.ownPropertyOnly + }, { + renderLimit: this.renderLimit, + memoryLimit: this.memoryLimit, + liquid: this.liquid + }); + } + findScope(key) { + for (let i = this.scopes.length - 1; i >= 0; i--) { + const candidate = this.scopes[i]; + if (key in candidate) + return candidate; + } + if (key in this.environments) + return this.environments; + return this.globals; + } + readProperty(obj, key) { + obj = toLiquid(obj); + key = toValue(key); + if (isNil(obj)) + return obj; + if (isArray(obj) && isNumber(key)) + return readArrayElement(obj, key, this.ownPropertyOnly); + const value = readJSProperty(obj, key, this.ownPropertyOnly); + if (value === undefined && obj instanceof Drop) + return obj.liquidMethodMissing(key, this); + if (isFunction(value)) + return value.call(obj); + if (key === 'size') + return readSize(obj); + else if (key === 'first') + return readFirst(obj, this.ownPropertyOnly); + else if (key === 'last') + return readLast(obj, this.ownPropertyOnly); + return value; + } +} +function readJSProperty(obj, key, ownPropertyOnly) { + if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop)) + return undefined; + return obj[key]; +} +function readFirst(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, 0, ownPropertyOnly); + return readJSProperty(obj, 'first', ownPropertyOnly); +} +function readLast(obj, ownPropertyOnly) { + if (isArray(obj)) + return readArrayElement(obj, -1, ownPropertyOnly); + return readJSProperty(obj, 'last', ownPropertyOnly); +} +function readSize(obj) { + if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined) + return obj['size']; + if (isArray(obj) || isString(obj)) + return obj.length; + if (typeof obj === 'object') + return Object.keys(obj).length; +} + +var BlockMode; +(function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; +})(BlockMode || (BlockMode = {})); + +const abs = argumentsToNumber(Math.abs); +const at_least = argumentsToNumber(Math.max); +const at_most = argumentsToNumber(Math.min); +const ceil = argumentsToNumber(Math.ceil); +const divided_by = argumentsToNumber((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor); +const floor = argumentsToNumber(Math.floor); +const minus = argumentsToNumber((v, arg) => v - arg); +const plus = argumentsToNumber((lhs, rhs) => lhs + rhs); +const modulo = argumentsToNumber((v, arg) => ((v % arg) + arg) % arg); +const times = argumentsToNumber((v, arg) => v * arg); +function round(v, arg = 0) { + v = toNumber(v); + arg = toNumber(arg); + const amp = Math.pow(10, arg); + const scaled = (v * amp) * (1 + Number.EPSILON); + return Math.round(scaled) / amp; +} + +var mathFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + abs: abs, + at_least: at_least, + at_most: at_most, + ceil: ceil, + divided_by: divided_by, + floor: floor, + minus: minus, + plus: plus, + modulo: modulo, + times: times, + round: round +}); + +const url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\+/g, ' '); +const url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+'); +const cgi_escape = (x) => encodeURIComponent(stringify(x)) + .replace(/%20/g, '+') + .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase()); +const uri_escape = (x) => encodeURI(stringify(x)) + .replace(/%5B/g, '[') + .replace(/%5D/g, ']'); +const rSlugifyDefault = /[^\p{M}\p{L}\p{Nd}]+/ug; +const rSlugifyReplacers = { + 'raw': /\s+/g, + 'default': rSlugifyDefault, + 'pretty': /[^\p{M}\p{L}\p{Nd}._~!$&'()+,;=@]+/ug, + 'ascii': /[^A-Za-z0-9]+/g, + 'latin': rSlugifyDefault, + 'none': null +}; +function slugify(str, mode = 'default', cased = false) { + str = stringify(str); + const replacer = rSlugifyReplacers[mode]; + if (replacer) { + if (mode === 'latin') + str = removeAccents(str); + str = str.replace(replacer, '-').replace(/^-|-$/g, ''); + } + return cased ? str : str.toLowerCase(); +} +function removeAccents(str) { + return str.replace(/[àáâãäå]/g, 'a') + .replace(/[æ]/g, 'ae') + .replace(/[ç]/g, 'c') + .replace(/[èéêë]/g, 'e') + .replace(/[ìíîï]/g, 'i') + .replace(/[ð]/g, 'd') + .replace(/[ñ]/g, 'n') + .replace(/[òóôõöø]/g, 'o') + .replace(/[ùúûü]/g, 'u') + .replace(/[ýÿ]/g, 'y') + .replace(/[ß]/g, 'ss') + .replace(/[œ]/g, 'oe') + .replace(/[þ]/g, 'th') + .replace(/[ẞ]/g, 'SS') + .replace(/[Œ]/g, 'OE') + .replace(/[Þ]/g, 'TH'); +} + +var urlFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + url_decode: url_decode, + url_encode: url_encode, + cgi_escape: cgi_escape, + uri_escape: uri_escape, + slugify: slugify +}); + +const join = argumentsToValue(function (v, arg) { + const array = toArray(v); + const sep = isNil(arg) ? ' ' : stringify(arg); + let outputSize = sep.length * Math.max(array.length - 1, 0); + for (let i = 0; i < array.length; i++) + outputSize += String(array[i]).length; + this.context.memoryLimit.use(outputSize); + return Array.prototype.join.call(array, sep); +}); +const last = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, -1, this.context.ownPropertyOnly) : ''; +}); +const first = argumentsToValue(function (v) { + return isArrayLike(v) ? readArrayElement(v, 0, this.context.ownPropertyOnly) : ''; +}); +const reverse = argumentsToValue(function (v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + return [...array].reverse(); +}); +function* sortBy(arr, property, comparator) { + const values = []; + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + values.push([ + item, + property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item + ]); + } + return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0]); +} +function* sort(arr, property) { + return yield* sortBy.call(this, arr, property, orderedCompare); +} +function* sort_natural(arr, property) { + return yield* sortBy.call(this, arr, property, caseInsensitiveCompare); +} +const size = (v) => (v && v.length) || 0; +function* map(arr, property) { + const results = []; + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + results.push(yield this.context._getFromScope(item, stringify(property), false)); + } + return results; +} +function* sum(arr, property) { + let sum = 0; + const array = toArray(arr); + for (const item of array) { + const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item); + sum += Number.isNaN(data) ? 0 : data; + } + return sum; +} +function compact(arr) { + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + return Array.prototype.filter.call(array, x => !isNil(toValue(x))); +} +function concat(v, arg = []) { + const lhs = toArray(v); + const rhs = toArray(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return Array.prototype.concat.call(lhs, rhs); +} +function push(v, arg) { + return concat.call(this, v, [arg]); +} +function unshift(v, arg) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.unshift(arg); + return clone; +} +function pop(v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.pop(); + return clone; +} +function shift(v) { + const array = toArray(v); + this.context.memoryLimit.use(array.length); + const clone = [...array]; + clone.shift(); + return clone; +} +function slice(v, begin, length = 1) { + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + begin = begin < 0 ? v.length + begin : begin; + if (begin < 0 || length < 0) + return isArray(v) ? [] : ''; + this.context.memoryLimit.use(length); + return isArray(v) + ? Array.prototype.slice.call(v, begin, begin + length) + : String.prototype.slice.call(v, begin, begin + length); +} +function expectedMatcher(expected) { + if (this.context.opts.jekyllWhere) { + return (v) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected)); + } + else if (expected === undefined) { + return (v) => isTruthy(v, this.context); + } + else { + return (v) => equals(v, expected); + } +} +function* filter(include, arr, property, expected) { + const values = []; + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + const token = new Tokenizer(stringify(property)).readScopeValue(); + for (const item of arr) { + values.push(yield evalToken(token, this.context.spawn(item))); + } + const matcher = expectedMatcher.call(this, expected); + return Array.prototype.filter.call(arr, (_, i) => matcher(values[i]) === include); +} +function* filter_exp(include, arr, itemName, exp) { + const filtered = []; + const keyTemplate = new Value(stringify(exp), this.liquid); + const array = toArray(arr); + this.context.memoryLimit.use(array.length); + for (const item of array) { + this.context.push({ [itemName]: item }); + const value = yield keyTemplate.value(this.context); + this.context.pop(); + if (value === include) + filtered.push(item); + } + return filtered; +} +function* where(arr, property, expected) { + return yield* filter.call(this, true, arr, property, expected); +} +function* reject(arr, property, expected) { + return yield* filter.call(this, false, arr, property, expected); +} +function* where_exp(arr, itemName, exp) { + return yield* filter_exp.call(this, true, arr, itemName, exp); +} +function* reject_exp(arr, itemName, exp) { + return yield* filter_exp.call(this, false, arr, itemName, exp); +} +function* group_by(arr, property) { + const map = new Map(); + arr = toEnumerable(arr); + const token = new Tokenizer(stringify(property)).readScopeValue(); + this.context.memoryLimit.use(arr.length); + for (const item of arr) { + const key = yield evalToken(token, this.context.spawn(item)); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + } + return [...map.entries()].map(([name, items]) => ({ name, items })); +} +function* group_by_exp(arr, itemName, exp) { + const map = new Map(); + const keyTemplate = new Value(stringify(exp), this.liquid); + arr = toEnumerable(arr); + this.context.memoryLimit.use(arr.length); + for (const item of arr) { + this.context.push({ [itemName]: item }); + const key = yield keyTemplate.value(this.context); + this.context.pop(); + if (!map.has(key)) + map.set(key, []); + map.get(key).push(item); + } + return [...map.entries()].map(([name, items]) => ({ name, items })); +} +function* search(arr, property, expected) { + const token = new Tokenizer(stringify(property)).readScopeValue(); + const array = toArray(arr); + const matcher = expectedMatcher.call(this, expected); + for (let index = 0; index < array.length; index++) { + const value = yield evalToken(token, this.context.spawn(array[index])); + if (matcher(value)) + return [index, array[index]]; + } +} +function* search_exp(arr, itemName, exp) { + const predicate = new Value(stringify(exp), this.liquid); + const array = toArray(arr); + for (let index = 0; index < array.length; index++) { + this.context.push({ [itemName]: array[index] }); + const value = yield predicate.value(this.context); + this.context.pop(); + if (value) + return [index, array[index]]; + } +} +function* has(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return !!result; +} +function* has_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return !!result; +} +function* find_index(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return result ? result[0] : undefined; +} +function* find_index_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return result ? result[0] : undefined; +} +function* find(arr, property, expected) { + const result = yield* search.call(this, arr, property, expected); + return result ? result[1] : undefined; +} +function* find_exp(arr, itemName, exp) { + const result = yield* search_exp.call(this, arr, itemName, exp); + return result ? result[1] : undefined; +} +function uniq(arr) { + arr = toArray(arr); + this.context.memoryLimit.use(arr.length); + return [...new Set(arr)]; +} +function sample(v, count = 1) { + v = toValue(v); + if (isNil(v)) + return []; + if (!isArray(v)) + v = stringify(v); + this.context.memoryLimit.use(v.length); + const shuffled = [...v].sort(() => Math.random() - 0.5); + if (count === 1) + return shuffled[0]; + return shuffled.slice(0, count); +} + +var arrayFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + join: join, + last: last, + first: first, + reverse: reverse, + sort: sort, + sort_natural: sort_natural, + size: size, + map: map, + sum: sum, + compact: compact, + concat: concat, + push: push, + unshift: unshift, + pop: pop, + shift: shift, + slice: slice, + where: where, + reject: reject, + where_exp: where_exp, + reject_exp: reject_exp, + group_by: group_by, + group_by_exp: group_by_exp, + has: has, + has_exp: has_exp, + find_index: find_index, + find_index_exp: find_index_exp, + find: find, + find_exp: find_exp, + uniq: uniq, + sample: sample +}); + +function date(v, format, timezoneOffset) { + var _a, _b; + const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _b !== void 0 ? _b : 0); + this.context.memoryLimit.use(size); + const date = parseDate(v, this.context.opts, timezoneOffset); + if (!date) + return v; + format = toValue(format); + format = isNil(format) ? this.context.opts.dateFormat : stringify(format); + this.context.memoryLimit.use(format.length); + return strftime(date, format, this.context.memoryLimit); +} +function date_to_xmlschema(v) { + return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z'); +} +function date_to_rfc822(v) { + return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z'); +} +function date_to_string(v, type, style) { + return stringify_date.call(this, v, '%b', type, style); +} +function date_to_long_string(v, type, style) { + return stringify_date.call(this, v, '%B', type, style); +} +function stringify_date(v, month_type, type, style) { + const date = parseDate(v, this.context.opts); + if (!date) + return v; + const ml = this.context.memoryLimit; + if (type === 'ordinal') { + const d = date.getDate(); + return style === 'US' + ? strftime(date, `${month_type} ${d}%q, %Y`, ml) + : strftime(date, `${d}%q ${month_type} %Y`, ml); + } + return strftime(date, `%d ${month_type} %Y`, ml); +} +function parseDate(v, opts, timezoneOffset) { + let date; + const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset; + const locale = opts.locale; + v = toValue(v); + if (isNil(v)) { + return undefined; + } + else if (v === 'now' || v === 'today') { + date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset); + } + else if (isNumber(v)) { + date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset); + } + else if (isString(v)) { + if (/^\d+$/.test(v)) { + date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset); + } + else if (opts.preserveTimezones && timezoneOffset === undefined) { + date = LiquidDate.createDateFixedToTimezone(v, locale); + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + } + else { + date = new LiquidDate(v, locale, defaultTimezoneOffset); + } + return date.valid() ? date : undefined; +} + +var dateFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + date: date, + date_to_xmlschema: date_to_xmlschema, + date_to_rfc822: date_to_rfc822, + date_to_string: date_to_string, + date_to_long_string: date_to_long_string +}); + +/** + * String related filters + * + * * prefer stringify() to String() since `undefined`, `null` should eval '' + */ +const rCJKWord = /[\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF]/gu; +// Word boundary followed by word characters (for detecting words) +const rNonCJKWord = /[^\u4E00-\u9FFF\uF900-\uFAFF\u3400-\u4DBF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF\s]+/gu; +function append(v, arg) { + assert(arguments.length === 2, 'append expect 2 arguments'); + const lhs = stringify(v); + const rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return lhs + rhs; +} +function prepend(v, arg) { + assert(arguments.length === 2, 'prepend expect 2 arguments'); + const lhs = stringify(v); + const rhs = stringify(arg); + this.context.memoryLimit.use(lhs.length + rhs.length); + return rhs + lhs; +} +function lstrip(v, chars) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (let i = 0, set = new Set(chars); i < str.length; i++) { + if (!set.has(str[i])) + return str.slice(i); + } + return ''; + } + return str.trimStart(); +} +function downcase(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.toLowerCase(); +} +function upcase(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return stringify(str).toUpperCase(); +} +function remove(v, arg) { + const str = stringify(v); + arg = stringify(arg); + this.context.memoryLimit.use(str.length + arg.length); + return str.split(arg).join(''); +} +function remove_first(v, l) { + const str = stringify(v); + l = stringify(l); + this.context.memoryLimit.use(str.length + l.length); + return str.replace(l, ''); +} +function remove_last(v, l) { + const str = stringify(v); + const pattern = stringify(l); + this.context.memoryLimit.use(str.length + pattern.length); + const index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + str.substring(index + pattern.length); +} +function rstrip(str, chars) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + if (chars) { + chars = stringify(chars); + this.context.memoryLimit.use(chars.length); + for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) { + if (!set.has(str[i])) + return str.slice(0, i + 1); + } + return ''; + } + return str.trimEnd(); +} +function split(v, arg) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + const arr = str.split(stringify(arg)); + // align to ruby split, which is the behavior of shopify/liquid + // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split + while (arr.length && arr[arr.length - 1] === '') + arr.pop(); + return arr; +} +function strip(v, chars) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + if (chars) { + const set = new Set(stringify(chars)); + this.context.memoryLimit.use(set.size); + let i = 0; + let j = str.length - 1; + while (set.has(str[i])) + i++; + while (j >= i && set.has(str[j])) + j--; + return str.slice(i, j + 1); + } + return str.trim(); +} +function strip_newlines(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\r?\n/gm, ''); +} +function capitalize(str) { + str = stringify(str); + this.context.memoryLimit.use(str.length); + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +} +function replace(v, pattern, replacement) { + const str = stringify(v); + pattern = stringify(pattern); + replacement = stringify(replacement); + const parts = str.split(pattern); + const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length); + this.context.memoryLimit.use(outputSize); + return parts.join(replacement); +} +function replace_first(v, arg1, arg2) { + const str = stringify(v); + arg1 = stringify(arg1); + arg2 = stringify(arg2); + this.context.memoryLimit.use(str.length + arg1.length + arg2.length); + return str.replace(arg1, () => arg2); +} +function replace_last(v, arg1, arg2) { + const str = stringify(v); + const pattern = stringify(arg1); + const replacement = stringify(arg2); + this.context.memoryLimit.use(str.length + pattern.length + replacement.length); + const index = str.lastIndexOf(pattern); + if (index === -1) + return str; + return str.substring(0, index) + replacement + str.substring(index + pattern.length); +} +function truncate(v, l = 50, o = '...') { + const str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + if (str.length <= l) + return v; + return str.substring(0, l - o.length) + o; +} +function truncatewords(v, words = 15, o = '...') { + const str = stringify(v); + o = stringify(o); + this.context.memoryLimit.use(str.length + o.length); + const arr = str.split(/\s+/); + if (words <= 0) + words = 1; + let ret = arr.slice(0, words).join(' '); + if (arr.length >= words) + ret += o; + return ret; +} +function normalize_whitespace(v) { + const str = stringify(v); + this.context.memoryLimit.use(str.length); + return str.replace(/\s+/g, ' '); +} +function number_of_words(input, mode) { + const str = stringify(input); + this.context.memoryLimit.use(str.length); + input = str.trim(); + if (!input) + return 0; + switch (mode) { + case 'cjk': + // Count CJK characters and words + return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length; + case 'auto': + // Count CJK characters, if none, count words + return rCJKWord.test(input) + ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length + : input.split(/\s+/).length; + default: + // Count words only + return input.split(/\s+/).length; + } +} +function array_to_sentence_string(array, connector = 'and') { + connector = stringify(connector); + let outputSize = connector.length + array.length * 2; + for (let i = 0; i < array.length; i++) + outputSize += stringify(array[i]).length; + this.context.memoryLimit.use(outputSize); + switch (array.length) { + case 0: + return ''; + case 1: + return array[0]; + case 2: + return `${array[0]} ${connector} ${array[1]}`; + default: + return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`; + } +} + +var stringFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + append: append, + prepend: prepend, + lstrip: lstrip, + downcase: downcase, + upcase: upcase, + remove: remove, + remove_first: remove_first, + remove_last: remove_last, + rstrip: rstrip, + split: split, + strip: strip, + strip_newlines: strip_newlines, + capitalize: capitalize, + replace: replace, + replace_first: replace_first, + replace_last: replace_last, + truncate: truncate, + truncatewords: truncatewords, + normalize_whitespace: normalize_whitespace, + number_of_words: number_of_words, + array_to_sentence_string: array_to_sentence_string +}); + +function base64Encode(str) { + return Buffer.from(str, 'utf8').toString('base64'); +} +function base64Decode(str) { + return Buffer.from(str, 'base64').toString('utf8'); +} + +/** + * Base64 related filters + * + * Implements base64_encode and base64_decode filters for Shopify compatibility + */ +function base64_encode(value) { + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + this.context.memoryLimit.use(value.byteLength); + return value.toString('base64'); + } + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Encode(str); +} +function base64_decode(value) { + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return base64Decode(str); +} + +var base64Filters = /*#__PURE__*/Object.freeze({ + __proto__: null, + base64_encode: base64_encode, + base64_decode: base64_decode +}); + +function sha256(str) { + return createHash('sha256').update(str, 'utf8').digest('hex'); +} +function hmacSha256(str, key) { + return createHmac('sha256', key).update(str, 'utf8').digest('hex'); +} + +/** + * Crypto related filters + * + * Implements sha256 and hmac_sha256 filters for Shopify compatibility + */ +function sha256$1(value) { + const str = stringify(value); + this.context.memoryLimit.use(str.length); + return sha256(str); +} +function hmac_sha256(value, key) { + const str = stringify(value); + const keyStr = stringify(key); + this.context.memoryLimit.use(str.length + keyStr.length); + return hmacSha256(str, keyStr); +} + +var cryptoFilters = /*#__PURE__*/Object.freeze({ + __proto__: null, + sha256: sha256$1, + hmac_sha256: hmac_sha256 +}); + +const filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), base64Filters), cryptoFilters), misc); + +class AssignTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.key = this.identifier.content; + this.tokenizer.assert(this.key, 'expected variable name'); + this.tokenizer.skipBlank(); + this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected "="'); + this.tokenizer.advance(); + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + } + *render(ctx) { + ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf); + } + *arguments() { + yield this.value; + } + *localScope() { + yield this.identifier; + } +} + +const MODIFIERS = ['offset', 'limit', 'reversed']; +class ForTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const variable = this.tokenizer.readIdentifier(); + const inStr = this.tokenizer.readIdentifier(); + const collection = this.tokenizer.readValue(); + if (!variable.size() || inStr.content !== 'in' || !collection) { + throw new Error(`illegal tag: ${token.getText()}`); + } + this.variable = variable.content; + this.collection = collection; + this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = []; + this.elseTemplates = []; + let p; + const stream = parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; }) + .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); }); + stream.start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + let collection = toEnumerable(yield evalToken(this.collection, ctx)); + if (!collection.length) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + return; + } + const continueKey = 'continue-' + this.variable + '-' + this.collection.getText(); + ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) })); + const hash = (yield this.hash.render(ctx)); + ctx.pop(); + const modifiers = this.liquid.options.orderedFilterParameters + ? Object.keys(hash).filter(x => MODIFIERS.includes(x)) + : MODIFIERS.filter(x => hash[x] !== undefined); + collection = modifiers.reduce((collection, modifier) => { + if (modifier === 'offset') + return offset(collection, hash['offset']); + if (modifier === 'limit') + return limit(collection, hash['limit']); + return reversed(collection); + }, collection); + ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length); + const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) }); + ctx.push(scope); + for (const item of collection) { + scope[this.variable] = item; + ctx.continueCalled = ctx.breakCalled = false; + yield r.renderTemplates(this.templates, ctx, emitter); + if (ctx.breakCalled) + break; + scope.forloop.next(); + } + ctx.continueCalled = ctx.breakCalled = false; + ctx.pop(); + } + *children() { + const templates = this.templates.slice(); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } + *arguments() { + yield this.collection; + for (const v of Object.values(this.hash.hash)) { + if (isValueToken(v)) { + yield v; + } + } + } + blockScope() { + return [this.variable, 'forloop']; + } +} +function reversed(arr) { + return [...arr].reverse(); +} +function offset(arr, count) { + return arr.slice(count); +} +function limit(arr, count) { + return arr.slice(0, count); +} + +class CaptureTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.templates = []; + this.identifier = this.readVariable(); + this.variable = this.identifier.content; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcapture') + return; + this.templates.push(parser.parseToken(token, remainTokens)); + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + readVariable() { + let ident = this.tokenizer.readIdentifier(); + if (ident.content) + return ident; + ident = this.tokenizer.readQuoted(); + if (ident) + return ident; + throw this.tokenizer.error('invalid capture name'); + } + *render(ctx) { + const r = this.liquid.renderer; + const html = yield r.renderTemplates(this.templates, ctx); + ctx.bottom()[this.variable] = html; + } + *children() { + return this.templates; + } + *localScope() { + yield this.identifier; + } +} + +class CaseTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + this.elseTemplates = []; + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + this.elseTemplates = []; + let p = []; + let elseCount = 0; + const stream = parser.parseStream(remainTokens) + .on('tag:when', (token) => { + if (elseCount > 0) { + return; + } + p = []; + const values = []; + while (!token.tokenizer.end()) { + values.push(token.tokenizer.readValueOrThrow()); + token.tokenizer.skipBlank(); + if (token.tokenizer.peek() === ',') { + token.tokenizer.readTo(','); + } + else { + token.tokenizer.readTo('or'); + } + } + this.branches.push({ + values, + templates: p + }); + }) + .on('tag:else', () => { + elseCount++; + p = this.elseTemplates; + }) + .on('tag:endcase', () => stream.stop()) + .on('template', (tpl) => { + if (p !== this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf)); + let branchHit = false; + for (const branch of this.branches) { + for (const valueToken of branch.values) { + const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf); + if (equals(target, value)) { + yield r.renderTemplates(branch.templates, ctx, emitter); + branchHit = true; + break; + } + } + } + if (!branchHit) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } + } + *arguments() { + yield this.value; + yield* this.branches.flatMap(b => b.values); + } + *children() { + const templates = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } +} + +class CommentTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endcomment') + return; + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + render() { } +} + +class RenderTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const tokenizer = this.tokenizer; + this.file = parseFilePath(tokenizer, this.liquid, parser); + this.currentFile = token.file; + while (!tokenizer.end()) { + tokenizer.skipBlank(); + const begin = tokenizer.p; + const keyword = tokenizer.readIdentifier(); + if (keyword.content === 'with' || keyword.content === 'for') { + tokenizer.skipBlank(); + // can be normal key/value pair, like "with: true" + if (tokenizer.peek() !== ':') { + const value = tokenizer.readValue(); + // can be normal key, like "with," + if (value) { + const beforeAs = tokenizer.p; + const asStr = tokenizer.readIdentifier(); + let alias; + if (asStr.content === 'as') + alias = tokenizer.readIdentifier(); + else + tokenizer.p = beforeAs; + const binding = { value, alias: alias && alias.content }; + if (keyword.content === 'with') + this.with = binding; + else + this.forBinding = binding; + tokenizer.skipBlank(); + if (tokenizer.peek() === ',') + tokenizer.advance(); + continue; // matched! + } + } + } + /** + * restore cursor if with/for not matched + */ + tokenizer.p = begin; + break; + } + this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator); + } + *render(ctx, emitter) { + const { liquid, hash } = this; + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const childCtx = ctx.spawn(); + const scope = childCtx.bottom(); + __assign(scope, yield hash.render(ctx)); + if (this.with) { + const { value, alias } = this.with; + scope[alias || filepath] = yield evalToken(value, ctx); + } + if (this.forBinding) { + const { value, alias } = this.forBinding; + const collection = toEnumerable(yield evalToken(value, ctx)); + scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias); + for (const item of collection) { + scope[alias] = item; + const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + scope['forloop'].next(); + } + } + else { + const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile)); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + } + } + *children(partials, sync) { + if (partials && isString(this.file)) { + return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)); + } + return []; + } + partialScope() { + if (isString(this.file)) { + const names = Object.keys(this.hash.hash); + if (this.with) { + const { value, alias } = this.with; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + if (this.forBinding) { + const { value, alias } = this.forBinding; + if (isString(alias)) { + names.push([alias, value]); + } + else if (isString(this.file)) { + names.push([this.file, value]); + } + } + return { name: this.file, isolated: true, scope: names }; + } + } + *arguments() { + for (const v of Object.values(this.hash.hash)) { + if (isValueToken(v)) { + yield v; + } + } + if (this.with) { + const { value } = this.with; + if (isValueToken(value)) { + yield value; + } + } + if (this.forBinding) { + const { value } = this.forBinding; + if (isValueToken(value)) { + yield value; + } + } + } +} +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +function parseFilePath(tokenizer, liquid, parser) { + if (liquid.options.dynamicPartials) { + const file = tokenizer.readValue(); + tokenizer.assert(file, 'illegal file path'); + if (file.getText() === 'none') + return; + if (isQuotedToken(file)) { + // for filenames like "files/{{file}}", eval as liquid template + const templates = parser.parse(evalQuotedToken(file)); + return optimize(templates); + } + return file; + } + const tokens = [...tokenizer.readFileNameTemplate(liquid.options)]; + const templates = optimize(parser.parseTokens(tokens)); + return templates === 'none' ? undefined : templates; +} +function optimize(templates) { + // for filenames like "files/file.liquid", extract the string directly + if (templates.length === 1 && isHTMLToken(templates[0].token)) + return templates[0].token.getContent(); + return templates; +} +function* renderFilePath(file, ctx, liquid) { + if (typeof file === 'string') + return file; + if (Array.isArray(file)) + return liquid.renderer.renderTemplates(file, ctx); + return yield evalToken(file, ctx); +} + +class IncludeTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const { tokenizer } = token; + this.file = parseFilePath(tokenizer, this.liquid, parser); + this.currentFile = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator); + } + *render(ctx, emitter) { + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + const scope = createScope((yield hash.render(ctx))); + if (withVar) + scope[filepath] = yield evalToken(withVar, ctx); + const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile)); + ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + ctx.restoreRegister(saved); + } + *children(partials, sync) { + if (partials && isString(this.file)) { + return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile)); + } + return []; + } + partialScope() { + if (isString(this.file)) { + let names; + if (this.liquid.options.jekyllInclude) { + names = ['include']; + } + else { + names = Object.keys(this.hash.hash); + if (this.withVar) { + names.push([this.file, this.withVar]); + } + } + return { name: this.file, isolated: false, scope: names }; + } + } + *arguments() { + yield* Object.values(this.hash.hash).filter(isValueToken); + if (isValueToken(this.file)) { + yield this.file; + } + if (isValueToken(this.withVar)) { + yield this.withVar; + } + } +} + +class DecrementTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.variable = this.identifier.content; + } + render(context, emitter) { + const scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + emitter.write(stringify(--scope[this.variable])); + } + *localScope() { + yield this.identifier; + } +} + +class CycleTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.candidates = []; + const group = this.tokenizer.readValue(); + this.tokenizer.skipBlank(); + if (group) { + if (this.tokenizer.peek() === ':') { + this.group = group; + this.tokenizer.advance(); + } + else + this.candidates.push(group); + } + while (!this.tokenizer.end()) { + const value = this.tokenizer.readValue(); + if (value) + this.candidates.push(value); + this.tokenizer.readTo(','); + } + this.tokenizer.assert(this.candidates.length, () => `empty candidates: "${token.getText()}"`); + } + *render(ctx, emitter) { + const group = (yield evalToken(this.group, ctx)); + const fingerprint = `cycle:${group}:` + this.candidates.join(','); + const groups = ctx.getRegister('cycle', {}); + let idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + const candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return yield evalToken(candidate, ctx); + } + *arguments() { + yield* this.candidates; + if (this.group) { + yield this.group; + } + } +} + +class IfTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + let p = []; + parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid), + templates: (p = []) + })) + .on('tag:elsif', (token) => { + assert(!this.elseTemplates, 'unexpected elsif after else'); + this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), this.liquid), + templates: (p = []) + }); + }) + .on('tag:else', tag => { + assertEmpty(tag.args); + assert(!this.elseTemplates, 'duplicated else'); + p = this.elseTemplates = []; + }) + .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + for (const { value, templates } of this.branches) { + const v = yield value.value(ctx, ctx.opts.lenientIf); + if (isTruthy(v, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates || [], ctx, emitter); + } + *children() { + const templates = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + templates.push(...this.elseTemplates); + } + return templates; + } + arguments() { + return this.branches.map(b => b.value); + } +} + +class IncrementTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.identifier = this.tokenizer.readIdentifier(); + this.variable = this.identifier.content; + } + render(context, emitter) { + const scope = context.environments; + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0; + } + const val = scope[this.variable]; + scope[this.variable]++; + emitter.write(stringify(val)); + } + *localScope() { + yield this.identifier; + } +} + +class LayoutTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + this.file = parseFilePath(this.tokenizer, this.liquid, parser); + this.currentFile = token.file; + this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = parser.parseTokens(remainTokens); + } + *render(ctx, emitter) { + const { liquid, args, file } = this; + const { renderer } = liquid; + if (file === undefined) { + ctx.setRegister('blockMode', BlockMode.OUTPUT); + yield renderer.renderTemplates(this.templates, ctx, emitter); + return; + } + const filepath = (yield renderFilePath(this.file, ctx, liquid)); + assert(filepath, () => `illegal file path "${filepath}"`); + const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile)); + // render remaining contents and store rendered results + ctx.setRegister('blockMode', BlockMode.STORE); + const html = yield renderer.renderTemplates(this.templates, ctx); + const blocks = ctx.getRegister('blocks', {}); + // set whole content to anonymous block if anonymous doesn't specified + if (blocks[''] === undefined) + blocks[''] = (parent, emitter) => emitter.write(html); + ctx.setRegister('blockMode', BlockMode.OUTPUT); + // render the layout file use stored blocks + ctx.push(createScope((yield args.render(ctx)))); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + } + *children(partials) { + const templates = this.templates.slice(); + if (partials && isString(this.file)) { + templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile))); + } + return templates; + } + *arguments() { + for (const v of Object.values(this.args.hash)) { + if (isValueToken(v)) { + yield v; + } + } + if (isValueToken(this.file)) { + yield this.file; + } + } + partialScope() { + if (isString(this.file)) { + return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) }; + } + } +} + +class BlockTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + this.templates = []; + const match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endblock') + return; + const template = parser.parseToken(token, remainTokens); + this.templates.push(template); + } + throw new Error(`tag ${token.getText()} not closed`); + } + *render(ctx, emitter) { + const blockRender = this.getBlockRender(ctx); + if (ctx.getRegister('blockMode') === BlockMode.STORE) { + ctx.getRegister('blocks', {})[this.block] = blockRender; + } + else { + yield blockRender(new BlockDrop(), emitter); + } + } + getBlockRender(ctx) { + const self = this; + const { liquid, templates } = this; + const renderChild = ctx.getRegister('blocks', {})[this.block]; + const renderCurrent = function* (superBlock, emitter) { + const stack = ctx.getRegister('blockStack', []); + if (stack.includes(self)) + throw new Error('block tag cannot be nested'); + stack.push(self); + ctx.push(createScope({ block: superBlock })); + yield liquid.renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + stack.pop(); + }; + return renderChild + ? (superBlock, emitter) => renderChild(new BlockDrop((emitter) => renderCurrent(superBlock, emitter)), emitter) + : renderCurrent; + } + *children() { + return this.templates; + } + blockScope() { + return ['block']; + } +} + +class RawTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + this.tokens = []; + while (remainTokens.length) { + const token = remainTokens.shift(); + if (isTagToken(token) && token.name === 'endraw') + return; + this.tokens.push(token); + } + throw new Error(`tag ${tagToken.getText()} not closed`); + } + render() { + return this.tokens.map((token) => token.getText()).join(''); + } +} + +class TablerowloopDrop extends ForloopDrop { + constructor(length, cols, collection, variable) { + super(length, collection, variable); + this.length = length; + this.cols = cols; + } + row() { + return Math.floor(this.i / this.cols) + 1; + } + col0() { + return (this.i % this.cols); + } + col() { + return this.col0() + 1; + } + col_first() { + return this.col0() === 0; + } + col_last() { + return this.col() === this.cols; + } +} + +class TablerowTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + const variable = this.tokenizer.readIdentifier(); + this.tokenizer.skipBlank(); + const predicate = this.tokenizer.readIdentifier(); + const collectionToken = this.tokenizer.readValue(); + if (predicate.content !== 'in' || !collectionToken) { + throw new Error(`illegal tag: ${tagToken.getText()}`); + } + this.variable = variable.content; + this.collection = collectionToken; + this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator); + this.templates = []; + let p; + const stream = parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:endtablerow', () => stream.stop()) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } + *render(ctx, emitter) { + let collection = toEnumerable(yield evalToken(this.collection, ctx)); + const args = (yield this.args.render(ctx)); + const offset = args.offset || 0; + const limit = (args.limit === undefined) ? collection.length : args.limit; + collection = collection.slice(offset, offset + limit); + const cols = args.cols || collection.length; + const r = this.liquid.renderer; + const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable); + const scope = createScope({ tablerowloop }); + ctx.push(scope); + for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) { + scope[this.variable] = collection[idx]; + if (tablerowloop.col0() === 0) { + if (tablerowloop.row() !== 1) + emitter.write(''); + emitter.write(``); + } + emitter.write(``); + yield r.renderTemplates(this.templates, ctx, emitter); + emitter.write(''); + } + if (collection.length) + emitter.write(''); + ctx.pop(); + } + *children() { + return this.templates; + } + *arguments() { + yield this.collection; + for (const v of Object.values(this.args.hash)) { + if (isValueToken(v)) { + yield v; + } + } + } + blockScope() { + return [this.variable, 'tablerowloop']; + } +} + +class UnlessTag extends Tag { + constructor(tagToken, remainTokens, liquid, parser) { + super(tagToken, remainTokens, liquid); + this.branches = []; + this.elseTemplates = []; + let p = []; + let elseCount = 0; + parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid), + test: isFalsy, + templates: (p = []) + })) + .on('tag:elsif', (token) => { + if (elseCount > 0) { + p = []; + return; + } + this.branches.push({ + value: new Value(token.tokenizer.readFilteredValue(), this.liquid), + test: isTruthy, + templates: (p = []) + }); + }) + .on('tag:else', () => { + elseCount++; + p = this.elseTemplates; + }) + .on('tag:endunless', function () { this.stop(); }) + .on('template', (tpl) => { + if (p !== this.elseTemplates || elseCount === 1) { + p.push(tpl); + } + }) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + } + *render(ctx, emitter) { + const r = this.liquid.renderer; + for (const { value, test, templates } of this.branches) { + const v = yield value.value(ctx, ctx.opts.lenientIf); + if (test(v, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } + *children() { + const children = this.branches.flatMap(b => b.templates); + if (this.elseTemplates) { + children.push(...this.elseTemplates); + } + return children; + } + arguments() { + return this.branches.map(b => b.value); + } +} + +class BreakTag extends Tag { + render(ctx, _emitter) { + ctx.breakCalled = true; + } +} + +class ContinueTag extends Tag { + render(ctx, _emitter) { + ctx.continueCalled = true; + } +} + +class EchoTag extends Tag { + constructor(token, remainTokens, liquid) { + super(token, remainTokens, liquid); + this.tokenizer.skipBlank(); + if (!this.tokenizer.end()) { + this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid); + } + } + *render(ctx, emitter) { + if (!this.value) + return; + const val = yield this.value.value(ctx, false); + emitter.write(val); + } + *arguments() { + if (this.value) { + yield this.value; + } + } +} + +class LiquidTag extends Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options); + this.templates = parser.parseTokens(tokens); + } + *render(ctx, emitter) { + yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter); + } + *children() { + return this.templates; + } +} + +class InlineCommentTag extends Tag { + constructor(tagToken, remainTokens, liquid) { + super(tagToken, remainTokens, liquid); + if (tagToken.args.search(/\n\s*[^#\s]/g) !== -1) { + throw new Error('every line of an inline comment must start with a \'#\' character'); + } + } + render() { } +} + +const tags = { + assign: AssignTag, + 'for': ForTag, + capture: CaptureTag, + 'case': CaseTag, + comment: CommentTag, + include: IncludeTag, + render: RenderTag, + decrement: DecrementTag, + increment: IncrementTag, + cycle: CycleTag, + 'if': IfTag, + layout: LayoutTag, + block: BlockTag, + raw: RawTag, + tablerow: TablerowTag, + unless: UnlessTag, + 'break': BreakTag, + 'continue': ContinueTag, + echo: EchoTag, + liquid: LiquidTag, + '#': InlineCommentTag +}; + +class Liquid { + constructor(opts = {}) { + this.renderer = new Render(); + this.filters = Object.create(null); + this.tags = Object.create(null); + this.options = normalize(opts); + // eslint-disable-next-line deprecation/deprecation + this.parser = new Parser(this); + forOwn(tags, (conf, name) => this.registerTag(name, conf)); + forOwn(filters, (handler, name) => this.registerFilter(name, handler)); + } + parse(html, filepath) { + const parser = new Parser(this); + return parser.parse(html, filepath); + } + _render(tpl, scope, renderOptions) { + const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplates(tpl, ctx); + } + render(tpl, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false }))); + }); + } + renderSync(tpl, scope, renderOptions) { + return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true }))); + } + renderToNodeStream(tpl, scope, renderOptions = {}) { + const ctx = new Context(scope, this.options, renderOptions, { liquid: this }); + return this.renderer.renderTemplatesToNodeStream(tpl, ctx); + } + _parseAndRender(html, scope, renderOptions) { + const tpl = this.parse(html); + return this._render(tpl, scope, renderOptions); + } + parseAndRender(html, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false }))); + }); + } + parseAndRenderSync(html, scope, renderOptions) { + return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true }))); + } + _parsePartialFile(file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile); + } + _parseLayoutFile(file, sync, currentFile) { + return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile); + } + _parseFile(file, sync, lookupType, currentFile) { + return new Parser(this).parseFile(file, sync, lookupType, currentFile); + } + parseFile(file, lookupType) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(new Parser(this).parseFile(file, false, lookupType)); + }); + } + parseFileSync(file, lookupType) { + return toValueSync(new Parser(this).parseFile(file, true, lookupType)); + } + *_renderFile(file, ctx, renderFileOptions) { + const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType)); + return yield this._render(templates, ctx, renderFileOptions); + } + renderFile(file, ctx, renderFileOptions) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false }))); + }); + } + renderFileSync(file, ctx, renderFileOptions) { + return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true }))); + } + renderFileToNodeStream(file, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + const templates = yield this.parseFile(file); + return this.renderToNodeStream(templates, scope, renderOptions); + }); + } + _evalValue(str, scope) { + const value = new Value(str, this); + const ctx = scope instanceof Context ? scope : new Context(scope, this.options, {}, { liquid: this }); + return value.value(ctx); + } + evalValue(str, scope) { + return __awaiter(this, void 0, void 0, function* () { + return toPromise(this._evalValue(str, scope)); + }); + } + evalValueSync(str, scope) { + return toValueSync(this._evalValue(str, scope)); + } + registerFilter(name, filter) { + this.filters[name] = filter; + } + registerTag(name, tag) { + this.tags[name] = isFunction(tag) ? tag : createTagClass(tag); + } + plugin(plugin) { + return plugin.call(this, Liquid); + } + express() { + const self = this; // eslint-disable-line + let firstCall = true; + return function (filePath, ctx, callback) { + if (firstCall) { + firstCall = false; + const dirs = normalizeDirectoryList(this.root); + self.options.root.unshift(...dirs); + self.options.layouts.unshift(...dirs); + self.options.partials.unshift(...dirs); + } + self.renderFile(filePath, ctx).then(html => callback(null, html), callback); + }; + } + analyze(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + return analyze(template, options); + }); + } + analyzeSync(template, options = {}) { + return analyzeSync(template, options); + } + parseAndAnalyze(html, filename, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + return analyze(this.parse(html, filename), options); + }); + } + parseAndAnalyzeSync(html, filename, options = {}) { + return analyzeSync(this.parse(html, filename), options); + } + /** Return an array of all variables without their properties. */ + variables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + }); + } + /** Return an array of all variables without their properties. */ + variablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.variables); + } + /** Return an array of all variables including their properties/paths. */ + fullVariables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v))))); + }); + } + /** Return an array of all variables including their properties/paths. */ + fullVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegments(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray())))); + }); + } + /** Return an array of all variables, each as an array of properties/segments. */ + variableSegmentsSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray())))); + } + /** Return an array of all expected context variables without their properties. */ + globalVariables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + }); + } + /** Return an array of all expected context variables without their properties. */ + globalVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Object.keys(analysis.globals); + } + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariables(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v))))); + }); + } + /** Return an array of all expected context variables including their properties/paths. */ + globalFullVariablesSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v))))); + } + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegments(template, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const analysis = yield analyze(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray())))); + }); + } + /** Return an array of all expected context variables, each as an array of properties/segments. */ + globalVariableSegmentsSync(template, options = {}) { + const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options); + return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray())))); + } +} + +/* istanbul ignore file */ +const version = '[VI]{version}[/VI]'; + +export { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, LookupType, Output, ParseError, ParseStream, Parser, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, Variable, analyze, analyzeSync, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version }; diff --git a/node_modules/liquidjs/dist/parser/filter-arg.d.ts b/node_modules/liquidjs/dist/parser/filter-arg.d.ts new file mode 100644 index 00000000..e552e595 --- /dev/null +++ b/node_modules/liquidjs/dist/parser/filter-arg.d.ts @@ -0,0 +1,5 @@ +import { ValueToken } from '../tokens/value-token'; +type KeyValuePair = [string?, ValueToken?]; +export type FilterArg = ValueToken | KeyValuePair; +export declare function isKeyValuePair(arr: FilterArg): arr is KeyValuePair; +export {}; diff --git a/node_modules/liquidjs/dist/parser/index.d.ts b/node_modules/liquidjs/dist/parser/index.d.ts new file mode 100644 index 00000000..275faea7 --- /dev/null +++ b/node_modules/liquidjs/dist/parser/index.d.ts @@ -0,0 +1,4 @@ +export * from './tokenizer'; +export * from './parser'; +export * from './parse-stream'; +export * from './token-kind'; diff --git a/node_modules/liquidjs/dist/parser/parse-stream.d.ts b/node_modules/liquidjs/dist/parser/parse-stream.d.ts new file mode 100644 index 00000000..7ac8223f --- /dev/null +++ b/node_modules/liquidjs/dist/parser/parse-stream.d.ts @@ -0,0 +1,15 @@ +import { Token, TopLevelToken } from '../tokens'; +import { Template } from '../template'; +type ParseToken = ((token: T, remainTokens: T[]) => Template); +export declare class ParseStream { + private tokens; + private handlers; + private stopRequested; + private parseToken; + constructor(tokens: T[], parseToken: ParseToken); + on(name: string, cb: (this: ParseStream, arg: T2) => void): ParseStream; + private trigger; + start(): this; + stop(): this; +} +export {}; diff --git a/node_modules/liquidjs/dist/parser/parse-stream.spec.d.ts b/node_modules/liquidjs/dist/parser/parse-stream.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/parser/parse-stream.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/parser/parser.d.ts b/node_modules/liquidjs/dist/parser/parser.d.ts new file mode 100644 index 00000000..5a9d834e --- /dev/null +++ b/node_modules/liquidjs/dist/parser/parser.d.ts @@ -0,0 +1,21 @@ +import { ParseStream } from './parse-stream'; +import { TopLevelToken } from '../tokens'; +import { Template, Output, HTML } from '../template'; +import { LookupType } from '../fs'; +import type { Liquid } from '../liquid'; +export declare class Parser { + parseFile: (file: string, sync?: boolean, type?: LookupType, currentFile?: string) => Generator; + private liquid; + private fs; + private cache?; + private loader; + private parseLimit; + private readFile; + constructor(liquid: Liquid); + parse(html: string, filepath?: string): Template[]; + parseTokens(tokens: TopLevelToken[]): Template[]; + parseToken(token: TopLevelToken, remainTokens: TopLevelToken[]): import("../template").Tag | Output | HTML; + parseStream(tokens: TopLevelToken[]): ParseStream; + private _parseFileCached; + private _parseFile; +} diff --git a/node_modules/liquidjs/dist/parser/parser.spec.d.ts b/node_modules/liquidjs/dist/parser/parser.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/parser/parser.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/parser/token-kind.d.ts b/node_modules/liquidjs/dist/parser/token-kind.d.ts new file mode 100644 index 00000000..a78e2ad1 --- /dev/null +++ b/node_modules/liquidjs/dist/parser/token-kind.d.ts @@ -0,0 +1,17 @@ +export declare enum TokenKind { + Number = 1, + Literal = 2, + Tag = 4, + Output = 8, + HTML = 16, + Filter = 32, + Hash = 64, + PropertyAccess = 128, + Word = 256, + Range = 512, + Quoted = 1024, + Operator = 2048, + FilteredValue = 4096, + GroupedExpression = 8192, + Delimited = 12 +} diff --git a/node_modules/liquidjs/dist/parser/tokenizer.d.ts b/node_modules/liquidjs/dist/parser/tokenizer.d.ts new file mode 100644 index 00000000..92b011da --- /dev/null +++ b/node_modules/liquidjs/dist/parser/tokenizer.d.ts @@ -0,0 +1,64 @@ +import { FilteredValueToken, TagToken, HTMLToken, HashToken, QuotedToken, LiquidTagToken, OutputToken, ValueToken, Token, RangeToken, FilterToken, TopLevelToken, OperatorToken, LiteralToken, IdentifierToken, NumberToken } from '../tokens'; +import { Trie, TokenizationError } from '../util'; +import { Operators, Expression } from '../render'; +import { NormalizedFullOptions } from '../liquid-options'; +import { FilterArg } from './filter-arg'; +export declare class Tokenizer { + input: string; + file?: string | undefined; + p: number; + N: number; + groupedExpressions: boolean; + private rawBeginAt; + private opTrie; + private literalTrie; + constructor(input: string, operators?: Operators, file?: string | undefined, range?: [number, number], groupedExpressions?: boolean); + readExpression(): Expression; + readExpressionTokens(): IterableIterator; + readOperator(): OperatorToken | undefined; + matchTrie(trie: Trie): number; + readFilteredValue(): FilteredValueToken; + readFilters(): FilterToken[]; + readFilter(): FilterToken | null; + readFilterArg(): FilterArg | undefined; + readTopLevelTokens(options?: NormalizedFullOptions): TopLevelToken[]; + readTopLevelToken(options: NormalizedFullOptions): TopLevelToken; + readHTMLToken(stopStrings: string[]): HTMLToken; + readTagToken(options: NormalizedFullOptions): TagToken; + readToDelimiter(delimiter: string, respectQuoted?: boolean): number; + readOutputToken(options?: NormalizedFullOptions): OutputToken; + readEndrawOrRawContent(options: NormalizedFullOptions): HTMLToken | TagToken; + readLiquidTagTokens(options?: NormalizedFullOptions): LiquidTagToken[]; + readLiquidTagToken(options: NormalizedFullOptions): LiquidTagToken | undefined; + error(msg: string, pos?: number): TokenizationError; + assert(pred: unknown, msg: string | (() => string), pos?: number): void; + snapshot(begin?: number): string; + /** + * @deprecated use #readIdentifier instead + */ + readWord(): IdentifierToken; + readIdentifier(): IdentifierToken; + readNonEmptyIdentifier(): IdentifierToken | undefined; + readTagName(): string; + readHashes(jekyllStyle?: boolean | string): HashToken[]; + readHash(jekyllStyle?: boolean | string): HashToken | undefined; + remaining(): string; + advance(step?: number): void; + end(): boolean; + read(): string; + readTo(end: string): number; + readValue(): ValueToken | FilteredValueToken | undefined; + readScopeValue(): ValueToken | undefined; + private readProperties; + readNumber(): NumberToken | undefined; + readLiteral(): LiteralToken | undefined; + readGroupOrRange(): FilteredValueToken | RangeToken | undefined; + readValueOrThrow(): ValueToken; + readQuoted(): QuotedToken | undefined; + readFileNameTemplate(options: NormalizedFullOptions): IterableIterator; + match(word: string): boolean; + rmatch(pattern: string): boolean; + peekType(n?: number): number; + peek(n?: number): string; + skipBlank(): void; +} diff --git a/node_modules/liquidjs/dist/parser/tokenizer.spec.d.ts b/node_modules/liquidjs/dist/parser/tokenizer.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/parser/tokenizer.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/parser/whitespace-ctrl.d.ts b/node_modules/liquidjs/dist/parser/whitespace-ctrl.d.ts new file mode 100644 index 00000000..baf8be7e --- /dev/null +++ b/node_modules/liquidjs/dist/parser/whitespace-ctrl.d.ts @@ -0,0 +1,3 @@ +import { Token } from '../tokens'; +import { NormalizedFullOptions } from '../liquid-options'; +export declare function whiteSpaceCtrl(tokens: Token[], options: NormalizedFullOptions): void; diff --git a/node_modules/liquidjs/dist/render/boolean.d.ts b/node_modules/liquidjs/dist/render/boolean.d.ts new file mode 100644 index 00000000..aba44c69 --- /dev/null +++ b/node_modules/liquidjs/dist/render/boolean.d.ts @@ -0,0 +1,3 @@ +import { Context } from '../context/context'; +export declare function isTruthy(val: any, ctx: Context): boolean; +export declare function isFalsy(val: any, ctx: Context): boolean; diff --git a/node_modules/liquidjs/dist/render/boolean.spec.d.ts b/node_modules/liquidjs/dist/render/boolean.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/render/boolean.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/render/expression.d.ts b/node_modules/liquidjs/dist/render/expression.d.ts new file mode 100644 index 00000000..998e9242 --- /dev/null +++ b/node_modules/liquidjs/dist/render/expression.d.ts @@ -0,0 +1,10 @@ +import { QuotedToken, Token } from '../tokens'; +import type { Context } from '../context'; +export declare class Expression { + readonly postfix: Token[]; + constructor(tokens: Iterable); + evaluate(ctx: Context, lenient?: boolean): Generator; + valid(): boolean; +} +export declare function evalToken(token: Token | undefined, ctx: Context, lenient?: boolean): IterableIterator; +export declare function evalQuotedToken(token: QuotedToken): string; diff --git a/node_modules/liquidjs/dist/render/expression.spec.d.ts b/node_modules/liquidjs/dist/render/expression.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/render/expression.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/render/index.d.ts b/node_modules/liquidjs/dist/render/index.d.ts new file mode 100644 index 00000000..80c98505 --- /dev/null +++ b/node_modules/liquidjs/dist/render/index.d.ts @@ -0,0 +1,4 @@ +export * from './render'; +export * from './expression'; +export * from './operator'; +export * from './boolean'; diff --git a/node_modules/liquidjs/dist/render/operator.d.ts b/node_modules/liquidjs/dist/render/operator.d.ts new file mode 100644 index 00000000..3d301d51 --- /dev/null +++ b/node_modules/liquidjs/dist/render/operator.d.ts @@ -0,0 +1,8 @@ +import { Context } from '../context'; +export type UnaryOperatorHandler = (operand: any, ctx: Context) => boolean; +export type BinaryOperatorHandler = (lhs: any, rhs: any, ctx: Context) => boolean; +export type OperatorHandler = UnaryOperatorHandler | BinaryOperatorHandler; +export type Operators = Record; +export declare const defaultOperators: Operators; +export declare function equals(lhs: any, rhs: any): boolean; +export declare function arrayIncludes(arr: any[], item: any): boolean; diff --git a/node_modules/liquidjs/dist/render/render.d.ts b/node_modules/liquidjs/dist/render/render.d.ts new file mode 100644 index 00000000..c642d8a3 --- /dev/null +++ b/node_modules/liquidjs/dist/render/render.d.ts @@ -0,0 +1,8 @@ +/// +import { Context } from '../context'; +import { Template } from '../template'; +import { Emitter } from '../emitters'; +export declare class Render { + renderTemplatesToNodeStream(templates: Template[], ctx: Context): NodeJS.ReadableStream; + renderTemplates(templates: Template[], ctx: Context, emitter?: Emitter): IterableIterator; +} diff --git a/node_modules/liquidjs/dist/render/render.spec.d.ts b/node_modules/liquidjs/dist/render/render.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/render/render.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/render/string.d.ts b/node_modules/liquidjs/dist/render/string.d.ts new file mode 100644 index 00000000..18066154 --- /dev/null +++ b/node_modules/liquidjs/dist/render/string.d.ts @@ -0,0 +1 @@ +export declare function parseStringLiteral(str: string): string; diff --git a/node_modules/liquidjs/dist/render/string.spec.d.ts b/node_modules/liquidjs/dist/render/string.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/render/string.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/tags/assign.d.ts b/node_modules/liquidjs/dist/tags/assign.d.ts new file mode 100644 index 00000000..32589d3d --- /dev/null +++ b/node_modules/liquidjs/dist/tags/assign.d.ts @@ -0,0 +1,12 @@ +import { Liquid, TopLevelToken, TagToken, Context, Tag } from '..'; +import { Arguments } from '../template'; +import { IdentifierToken } from '../tokens'; +export default class extends Tag { + private key; + private value; + private identifier; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(ctx: Context): Generator; + arguments(): Arguments; + localScope(): Iterable; +} diff --git a/node_modules/liquidjs/dist/tags/block.d.ts b/node_modules/liquidjs/dist/tags/block.d.ts new file mode 100644 index 00000000..c1c6a36e --- /dev/null +++ b/node_modules/liquidjs/dist/tags/block.d.ts @@ -0,0 +1,11 @@ +import { Liquid, TagToken, TopLevelToken, Template, Context, Emitter, Tag } from '..'; +import { Parser } from '../parser'; +export default class extends Tag { + block: string; + templates: Template[]; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + private getBlockRender; + children(): Generator; + blockScope(): Iterable; +} diff --git a/node_modules/liquidjs/dist/tags/break.d.ts b/node_modules/liquidjs/dist/tags/break.d.ts new file mode 100644 index 00000000..8b21aeac --- /dev/null +++ b/node_modules/liquidjs/dist/tags/break.d.ts @@ -0,0 +1,4 @@ +import { Context, Emitter, Tag } from '..'; +export default class extends Tag { + render(ctx: Context, _emitter: Emitter): void; +} diff --git a/node_modules/liquidjs/dist/tags/capture.d.ts b/node_modules/liquidjs/dist/tags/capture.d.ts new file mode 100644 index 00000000..351b8b1e --- /dev/null +++ b/node_modules/liquidjs/dist/tags/capture.d.ts @@ -0,0 +1,13 @@ +import { Liquid, Tag, Template, Context, TagToken, TopLevelToken } from '..'; +import { Parser } from '../parser'; +import { IdentifierToken, QuotedToken } from '../tokens'; +export default class extends Tag { + identifier: IdentifierToken | QuotedToken; + variable: string; + templates: Template[]; + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + private readVariable; + render(ctx: Context): Generator; + children(): Generator; + localScope(): Iterable; +} diff --git a/node_modules/liquidjs/dist/tags/case.d.ts b/node_modules/liquidjs/dist/tags/case.d.ts new file mode 100644 index 00000000..1579e340 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/case.d.ts @@ -0,0 +1,15 @@ +import { ValueToken, Liquid, Value, Emitter, TagToken, TopLevelToken, Context, Template, Tag, FilteredValueToken } from '..'; +import { Parser } from '../parser'; +import { Arguments } from '../template'; +export default class extends Tag { + value: Value; + branches: { + values: (ValueToken | FilteredValueToken)[]; + templates: Template[]; + }[]; + elseTemplates: Template[]; + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + arguments(): Arguments; + children(): Generator; +} diff --git a/node_modules/liquidjs/dist/tags/comment.d.ts b/node_modules/liquidjs/dist/tags/comment.d.ts new file mode 100644 index 00000000..2487a655 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/comment.d.ts @@ -0,0 +1,5 @@ +import { Liquid, TopLevelToken, TagToken, Tag } from '..'; +export default class extends Tag { + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(): void; +} diff --git a/node_modules/liquidjs/dist/tags/continue.d.ts b/node_modules/liquidjs/dist/tags/continue.d.ts new file mode 100644 index 00000000..009876e6 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/continue.d.ts @@ -0,0 +1,4 @@ +import { Tag, Emitter, Context } from '..'; +export default class extends Tag { + render(ctx: Context, _emitter: Emitter): void; +} diff --git a/node_modules/liquidjs/dist/tags/cycle.d.ts b/node_modules/liquidjs/dist/tags/cycle.d.ts new file mode 100644 index 00000000..0937521d --- /dev/null +++ b/node_modules/liquidjs/dist/tags/cycle.d.ts @@ -0,0 +1,9 @@ +import { TopLevelToken, Liquid, Emitter, TagToken, Context, Tag } from '..'; +import { Arguments } from '../template'; +export default class extends Tag { + private candidates; + private group?; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(ctx: Context, emitter: Emitter): Generator; + arguments(): Arguments; +} diff --git a/node_modules/liquidjs/dist/tags/decrement.d.ts b/node_modules/liquidjs/dist/tags/decrement.d.ts new file mode 100644 index 00000000..bc013e5d --- /dev/null +++ b/node_modules/liquidjs/dist/tags/decrement.d.ts @@ -0,0 +1,9 @@ +import { Tag, Liquid, TopLevelToken, Emitter, TagToken, Context } from '..'; +import { IdentifierToken } from '../tokens'; +export default class extends Tag { + private identifier; + private variable; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(context: Context, emitter: Emitter): void; + localScope(): Iterable; +} diff --git a/node_modules/liquidjs/dist/tags/echo.d.ts b/node_modules/liquidjs/dist/tags/echo.d.ts new file mode 100644 index 00000000..77392207 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/echo.d.ts @@ -0,0 +1,8 @@ +import { Liquid, TopLevelToken, Emitter, TagToken, Context, Tag } from '..'; +import { Arguments } from '../template'; +export default class extends Tag { + private value?; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(ctx: Context, emitter: Emitter): Generator; + arguments(): Arguments; +} diff --git a/node_modules/liquidjs/dist/tags/for.d.ts b/node_modules/liquidjs/dist/tags/for.d.ts new file mode 100644 index 00000000..8d4c129c --- /dev/null +++ b/node_modules/liquidjs/dist/tags/for.d.ts @@ -0,0 +1,15 @@ +import { Hash, ValueToken, Liquid, Tag, Emitter, TagToken, TopLevelToken, Context, Template, FilteredValueToken } from '..'; +import { Parser } from '../parser'; +import { Arguments } from '../template'; +export default class extends Tag { + variable: string; + collection: ValueToken | FilteredValueToken; + hash: Hash; + templates: Template[]; + elseTemplates: Template[]; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(): Generator; + arguments(): Arguments; + blockScope(): Iterable; +} diff --git a/node_modules/liquidjs/dist/tags/if.d.ts b/node_modules/liquidjs/dist/tags/if.d.ts new file mode 100644 index 00000000..2a8a6f69 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/if.d.ts @@ -0,0 +1,14 @@ +import { Liquid, Tag, Value, Emitter, TagToken, TopLevelToken, Context, Template } from '..'; +import { Parser } from '../parser'; +import { Arguments } from '../template'; +export default class extends Tag { + branches: { + value: Value; + templates: Template[]; + }[]; + elseTemplates: Template[] | undefined; + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(): Generator; + arguments(): Arguments; +} diff --git a/node_modules/liquidjs/dist/tags/include.d.ts b/node_modules/liquidjs/dist/tags/include.d.ts new file mode 100644 index 00000000..3e60b78f --- /dev/null +++ b/node_modules/liquidjs/dist/tags/include.d.ts @@ -0,0 +1,14 @@ +import { Template, TopLevelToken, Liquid, Tag, Emitter, TagToken, Context } from '..'; +import { Parser } from '../parser'; +import { Arguments, PartialScope } from '../template'; +export default class extends Tag { + private file; + private currentFile?; + private withVar?; + private hash; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(partials: boolean, sync: boolean): Generator; + partialScope(): PartialScope | undefined; + arguments(): Arguments; +} diff --git a/node_modules/liquidjs/dist/tags/increment.d.ts b/node_modules/liquidjs/dist/tags/increment.d.ts new file mode 100644 index 00000000..bc013e5d --- /dev/null +++ b/node_modules/liquidjs/dist/tags/increment.d.ts @@ -0,0 +1,9 @@ +import { Tag, Liquid, TopLevelToken, Emitter, TagToken, Context } from '..'; +import { IdentifierToken } from '../tokens'; +export default class extends Tag { + private identifier; + private variable; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(context: Context, emitter: Emitter): void; + localScope(): Iterable; +} diff --git a/node_modules/liquidjs/dist/tags/index.d.ts b/node_modules/liquidjs/dist/tags/index.d.ts new file mode 100644 index 00000000..89ea4498 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/index.d.ts @@ -0,0 +1,24 @@ +import AssignTag from './assign'; +import ForTag from './for'; +import CaptureTag from './capture'; +import CaseTag from './case'; +import CommentTag from './comment'; +import IncludeTag from './include'; +import RenderTag from './render'; +import DecrementTag from './decrement'; +import CycleTag from './cycle'; +import IfTag from './if'; +import IncrementTag from './increment'; +import LayoutTag from './layout'; +import BlockTag from './block'; +import RawTag from './raw'; +import TablerowTag from './tablerow'; +import UnlessTag from './unless'; +import BreakTag from './break'; +import ContinueTag from './continue'; +import EchoTag from './echo'; +import LiquidTag from './liquid'; +import InlineCommentTag from './inline-comment'; +import type { TagClass } from '../template/tag'; +export declare const tags: Record; +export { AssignTag, ForTag, CaptureTag, CaseTag, CommentTag, IncludeTag, RenderTag, DecrementTag, IncrementTag, CycleTag, IfTag, LayoutTag, BlockTag, RawTag, TablerowTag, UnlessTag, BreakTag, ContinueTag, EchoTag, LiquidTag, InlineCommentTag }; diff --git a/node_modules/liquidjs/dist/tags/inline-comment.d.ts b/node_modules/liquidjs/dist/tags/inline-comment.d.ts new file mode 100644 index 00000000..12d0d02d --- /dev/null +++ b/node_modules/liquidjs/dist/tags/inline-comment.d.ts @@ -0,0 +1,5 @@ +import { TagToken, Liquid, TopLevelToken, Tag } from '..'; +export default class extends Tag { + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(): void; +} diff --git a/node_modules/liquidjs/dist/tags/layout.d.ts b/node_modules/liquidjs/dist/tags/layout.d.ts new file mode 100644 index 00000000..0d2076e0 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/layout.d.ts @@ -0,0 +1,15 @@ +import { Template, Liquid, Tag, Emitter, Hash, TagToken, TopLevelToken, Context } from '..'; +import { ParsedFileName } from './render'; +import { Parser } from '../parser'; +import { Arguments, PartialScope } from '../template'; +export default class extends Tag { + args: Hash; + templates: Template[]; + file?: ParsedFileName; + private currentFile?; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(partials: boolean): Generator; + arguments(): Arguments; + partialScope(): PartialScope | undefined; +} diff --git a/node_modules/liquidjs/dist/tags/liquid.d.ts b/node_modules/liquidjs/dist/tags/liquid.d.ts new file mode 100644 index 00000000..583fe710 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/liquid.d.ts @@ -0,0 +1,8 @@ +import { Template, Emitter, Liquid, TopLevelToken, TagToken, Context, Tag } from '..'; +import { Parser } from '../parser'; +export default class extends Tag { + templates: Template[]; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(): Generator; +} diff --git a/node_modules/liquidjs/dist/tags/raw.d.ts b/node_modules/liquidjs/dist/tags/raw.d.ts new file mode 100644 index 00000000..c8c6f5dd --- /dev/null +++ b/node_modules/liquidjs/dist/tags/raw.d.ts @@ -0,0 +1,6 @@ +import { Liquid, TagToken, TopLevelToken, Tag } from '..'; +export default class extends Tag { + private tokens; + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + render(): string; +} diff --git a/node_modules/liquidjs/dist/tags/render.d.ts b/node_modules/liquidjs/dist/tags/render.d.ts new file mode 100644 index 00000000..09fe7cf8 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/render.d.ts @@ -0,0 +1,24 @@ +import { TopLevelToken, Liquid, Token, Template, Tokenizer, Emitter, TagToken, Context, Tag } from '..'; +import { Parser } from '../parser'; +import { Arguments, PartialScope } from '../template'; +export type ParsedFileName = Template[] | Token | string | undefined; +export default class extends Tag { + private file; + private currentFile?; + private hash; + private with?; + private forBinding?; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(partials: boolean, sync: boolean): Generator; + partialScope(): PartialScope | undefined; + arguments(): Arguments; +} +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +export declare function parseFilePath(tokenizer: Tokenizer, liquid: Liquid, parser: Parser): ParsedFileName; +export declare function renderFilePath(file: ParsedFileName, ctx: Context, liquid: Liquid): IterableIterator; diff --git a/node_modules/liquidjs/dist/tags/tablerow.d.ts b/node_modules/liquidjs/dist/tags/tablerow.d.ts new file mode 100644 index 00000000..dd2cebd8 --- /dev/null +++ b/node_modules/liquidjs/dist/tags/tablerow.d.ts @@ -0,0 +1,14 @@ +import { ValueToken, Liquid, Tag, Emitter, Hash, TagToken, TopLevelToken, Context, Template, FilteredValueToken } from '..'; +import { Parser } from '../parser'; +import { Arguments } from '../template'; +export default class extends Tag { + variable: string; + args: Hash; + templates: Template[]; + collection: ValueToken | FilteredValueToken; + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(): Generator; + arguments(): Arguments; + blockScope(): string[]; +} diff --git a/node_modules/liquidjs/dist/tags/unless.d.ts b/node_modules/liquidjs/dist/tags/unless.d.ts new file mode 100644 index 00000000..15a54d4f --- /dev/null +++ b/node_modules/liquidjs/dist/tags/unless.d.ts @@ -0,0 +1,15 @@ +import { Liquid, Tag, Value, TopLevelToken, Template, Emitter, Context, TagToken } from '..'; +import { Parser } from '../parser'; +import { Arguments } from '../template'; +export default class extends Tag { + branches: { + value: Value; + test: (val: any, ctx: Context) => boolean; + templates: Template[]; + }[]; + elseTemplates: Template[]; + constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; + children(): Generator; + arguments(): Arguments; +} diff --git a/node_modules/liquidjs/dist/template/analysis.d.ts b/node_modules/liquidjs/dist/template/analysis.d.ts new file mode 100644 index 00000000..cae2618d --- /dev/null +++ b/node_modules/liquidjs/dist/template/analysis.d.ts @@ -0,0 +1,85 @@ +import { Template } from '.'; +/** + * Row, column and file name where a variable was found. + */ +export interface VariableLocation { + row: number; + col: number; + file?: string; +} +/** + * A variable's segments as an array, possibly with nested arrays of segments. + */ +export type SegmentArray = Array; +/** + * A variable's segments and location, which can be coerced to a string. + */ +export declare class Variable { + readonly segments: Array; + readonly location: VariableLocation; + constructor(segments: Array, location: VariableLocation); + toString(): string; + /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */ + toArray(): SegmentArray; +} +/** + * Property names and array indexes that make up a path to a variable. + */ +export type VariableSegments = Array; +/** + * A mapping of variable names to an array of locations at which the variable was found. + */ +export type Variables = { + [key: string]: Variable[]; +}; +/** + * Group variables by the string representation of their root segment. + */ +export declare class VariableMap { + private map; + constructor(); + get(key: Variable): Variable[]; + has(key: Variable): boolean; + push(variable: Variable): void; + asObject(): Variables; +} +/** + * The result of calling `analyze()` or `analyzeSync()`. + */ +export interface StaticAnalysis { + /** + * All variables, whether they are in scope or not. Including references to names + * such as `forloop` from the `for` tag. + */ + variables: Variables; + /** + * Variables that are not in scope. These could be a "global" variables that are + * expected to be provided by the application developer, or possible mistakes + * from the template author. + * + * If a variable is referenced before and after assignment, you should expect + * that variable to be included in `globals`, `variables` and `locals`, each with + * a different location. + */ + globals: Variables; + /** + * Template variables that are added to the template local scope using tags like + * `assign`, `capture` or `increment`. + */ + locals: Variables; +} +export interface StaticAnalysisOptions { + /** + * When `true` (the default), try to load partial templates and analyze them too. + */ + partials?: boolean; +} +export declare const defaultStaticAnalysisOptions: StaticAnalysisOptions; +/** + * Statically analyze a template and report variable usage. + */ +export declare function analyze(template: Template[], options?: StaticAnalysisOptions): Promise; +/** + * Statically analyze a template and report variable usage. + */ +export declare function analyzeSync(template: Template[], options?: StaticAnalysisOptions): StaticAnalysis; diff --git a/node_modules/liquidjs/dist/template/analysis.spec.d.ts b/node_modules/liquidjs/dist/template/analysis.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/template/analysis.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/template/filter-impl-options.d.ts b/node_modules/liquidjs/dist/template/filter-impl-options.d.ts new file mode 100644 index 00000000..b7105977 --- /dev/null +++ b/node_modules/liquidjs/dist/template/filter-impl-options.d.ts @@ -0,0 +1,14 @@ +import type { Context } from '../context'; +import type { Liquid } from '../liquid'; +import type { FilterToken } from '../tokens'; +export interface FilterImpl { + context: Context; + token: FilterToken; + liquid: Liquid; +} +export type FilterHandler = (this: FilterImpl, value: any, ...args: any[]) => any; +export interface FilterOptions { + handler: FilterHandler; + raw: boolean; +} +export type FilterImplOptions = FilterHandler | FilterOptions; diff --git a/node_modules/liquidjs/dist/template/filter.d.ts b/node_modules/liquidjs/dist/template/filter.d.ts new file mode 100644 index 00000000..d3bab6ed --- /dev/null +++ b/node_modules/liquidjs/dist/template/filter.d.ts @@ -0,0 +1,15 @@ +import { Context } from '../context'; +import { FilterImplOptions } from './filter-impl-options'; +import { FilterArg } from '../parser/filter-arg'; +import { Liquid } from '../liquid'; +import { FilterToken } from '../tokens'; +export declare class Filter { + name: string; + args: FilterArg[]; + readonly raw: boolean; + private handler; + private liquid; + private token; + constructor(token: FilterToken, options: FilterImplOptions | undefined, liquid: Liquid); + render(value: any, context: Context): IterableIterator; +} diff --git a/node_modules/liquidjs/dist/template/filter.spec.d.ts b/node_modules/liquidjs/dist/template/filter.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/template/filter.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/template/hash.d.ts b/node_modules/liquidjs/dist/template/hash.d.ts new file mode 100644 index 00000000..21dd7e1f --- /dev/null +++ b/node_modules/liquidjs/dist/template/hash.d.ts @@ -0,0 +1,18 @@ +import { Context } from '../context/context'; +import { Tokenizer } from '../parser/tokenizer'; +import { Token } from '../tokens/token'; +type HashValueTokens = Record; +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +export declare class Hash { + hash: HashValueTokens; + constructor(input: string | Tokenizer, jekyllStyle?: boolean | string); + render(ctx: Context): Generator, unknown>; +} +export {}; diff --git a/node_modules/liquidjs/dist/template/hash.spec.d.ts b/node_modules/liquidjs/dist/template/hash.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/template/hash.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/template/html.d.ts b/node_modules/liquidjs/dist/template/html.d.ts new file mode 100644 index 00000000..32b89d02 --- /dev/null +++ b/node_modules/liquidjs/dist/template/html.d.ts @@ -0,0 +1,9 @@ +import { TemplateImpl, Template } from '../template'; +import { HTMLToken } from '../tokens'; +import { Context } from '../context'; +import { Emitter } from '../emitters'; +export declare class HTML extends TemplateImpl implements Template { + private str; + constructor(token: HTMLToken); + render(ctx: Context, emitter: Emitter): IterableIterator; +} diff --git a/node_modules/liquidjs/dist/template/index.d.ts b/node_modules/liquidjs/dist/template/index.d.ts new file mode 100644 index 00000000..675e2179 --- /dev/null +++ b/node_modules/liquidjs/dist/template/index.d.ts @@ -0,0 +1,11 @@ +export * from './template'; +export * from './template-impl'; +export * from './tag'; +export * from './tag-options-adapter'; +export * from './filter'; +export * from './filter-impl-options'; +export * from './hash'; +export * from './value'; +export * from './output'; +export * from './html'; +export * from './analysis'; diff --git a/node_modules/liquidjs/dist/template/output.d.ts b/node_modules/liquidjs/dist/template/output.d.ts new file mode 100644 index 00000000..44edb032 --- /dev/null +++ b/node_modules/liquidjs/dist/template/output.d.ts @@ -0,0 +1,12 @@ +import { Value } from './value'; +import { Arguments, Template, TemplateImpl } from '../template'; +import { Context } from '../context/context'; +import { Emitter } from '../emitters/emitter'; +import { OutputToken } from '../tokens/output-token'; +import { Liquid } from '../liquid'; +export declare class Output extends TemplateImpl implements Template { + value: Value; + constructor(token: OutputToken, liquid: Liquid); + render(ctx: Context, emitter: Emitter): IterableIterator; + arguments(): Arguments; +} diff --git a/node_modules/liquidjs/dist/template/output.spec.d.ts b/node_modules/liquidjs/dist/template/output.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/template/output.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/template/tag-options-adapter.d.ts b/node_modules/liquidjs/dist/template/tag-options-adapter.d.ts new file mode 100644 index 00000000..cd9b82a9 --- /dev/null +++ b/node_modules/liquidjs/dist/template/tag-options-adapter.d.ts @@ -0,0 +1,10 @@ +import { Tag, TagClass, TagRenderReturn } from './tag'; +import { TagToken, TopLevelToken } from '../tokens'; +import { Emitter } from '../emitters'; +import { Context } from '../context'; +export interface TagImplOptions { + [key: string]: any; + parse?: (this: Tag & TagImplOptions, token: TagToken, remainingTokens: TopLevelToken[]) => void; + render: (this: Tag & TagImplOptions, ctx: Context, emitter: Emitter, hash: Record) => TagRenderReturn; +} +export declare function createTagClass(options: TagImplOptions): TagClass; diff --git a/node_modules/liquidjs/dist/template/tag.d.ts b/node_modules/liquidjs/dist/template/tag.d.ts new file mode 100644 index 00000000..fb6e1271 --- /dev/null +++ b/node_modules/liquidjs/dist/template/tag.d.ts @@ -0,0 +1,18 @@ +import { TemplateImpl } from './template-impl'; +import type { Emitter } from '../emitters/emitter'; +import type { Parser, Tokenizer } from '../parser'; +import type { Context } from '../context/context'; +import type { TopLevelToken, TagToken } from '../tokens'; +import type { Template } from './template'; +import type { Liquid } from '../liquid'; +export type TagRenderReturn = Generator | Promise | unknown; +export declare abstract class Tag extends TemplateImpl implements Template { + name: string; + liquid: Liquid; + protected tokenizer: Tokenizer; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid); + abstract render(ctx: Context, emitter: Emitter): TagRenderReturn; +} +export interface TagClass { + new (token: TagToken, tokens: TopLevelToken[], liquid: Liquid, parser: Parser): Tag; +} diff --git a/node_modules/liquidjs/dist/template/template-impl.d.ts b/node_modules/liquidjs/dist/template/template-impl.d.ts new file mode 100644 index 00000000..14da50bc --- /dev/null +++ b/node_modules/liquidjs/dist/template/template-impl.d.ts @@ -0,0 +1,4 @@ +export declare abstract class TemplateImpl { + token: T; + constructor(token: T); +} diff --git a/node_modules/liquidjs/dist/template/template.d.ts b/node_modules/liquidjs/dist/template/template.d.ts new file mode 100644 index 00000000..f5e9f82f --- /dev/null +++ b/node_modules/liquidjs/dist/template/template.d.ts @@ -0,0 +1,36 @@ +import { Context } from '../context/context'; +import { Token } from '../tokens/token'; +import { Emitter } from '../emitters/emitter'; +import { IdentifierToken, QuotedToken, ValueToken } from '../tokens'; +import { Value } from './value'; +export type Argument = Value | ValueToken; +export type Arguments = Iterable; +/** Scope information used when analyzing partial templates. */ +export interface PartialScope { + /** + * The name of the partial template. We need this to make sure we only analyze + * each template once. + * */ + name: string; + /** + * If `true`, names in `scope` will be added to a new, isolated scope before + * analyzing any child templates, without access to the parent template's scope. + */ + isolated: boolean; + /** + * A list of names that will be in scope for the child template. + * + * If an item is a [string, Argument] tuple, the string is considered an alias + * for the argument. + */ + scope: Iterable; +} +export interface Template { + token: Token; + render(ctx: Context, emitter: Emitter): any; + children?(partials: boolean, sync: boolean): Generator; + arguments?(): Arguments; + blockScope?(): Iterable; + localScope?(): Iterable; + partialScope?(): PartialScope | undefined; +} diff --git a/node_modules/liquidjs/dist/template/value.d.ts b/node_modules/liquidjs/dist/template/value.d.ts new file mode 100644 index 00000000..37cb2ab5 --- /dev/null +++ b/node_modules/liquidjs/dist/template/value.d.ts @@ -0,0 +1,15 @@ +import { Filter } from './filter'; +import { Expression } from '../render'; +import type { FilteredValueToken } from '../tokens'; +import type { Liquid } from '../liquid'; +import type { Context } from '../context'; +export declare class Value { + readonly filters: Filter[]; + readonly initial: Expression; + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + constructor(input: string | FilteredValueToken, liquid: Liquid); + value(ctx: Context, lenient?: boolean): Generator; + private getFilter; +} diff --git a/node_modules/liquidjs/dist/template/value.spec.d.ts b/node_modules/liquidjs/dist/template/value.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/template/value.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/tokens/delimited-token.d.ts b/node_modules/liquidjs/dist/tokens/delimited-token.d.ts new file mode 100644 index 00000000..8ccb1894 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/delimited-token.d.ts @@ -0,0 +1,9 @@ +import { Token } from './token'; +import { TokenKind } from '../parser'; +export declare abstract class DelimitedToken extends Token { + trimLeft: boolean; + trimRight: boolean; + contentRange: [number, number]; + constructor(kind: TokenKind, [contentBegin, contentEnd]: [number, number], input: string, begin: number, end: number, trimLeft: boolean, trimRight: boolean, file?: string); + get content(): string; +} diff --git a/node_modules/liquidjs/dist/tokens/filter-token.d.ts b/node_modules/liquidjs/dist/tokens/filter-token.d.ts new file mode 100644 index 00000000..682335e5 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/filter-token.d.ts @@ -0,0 +1,7 @@ +import { Token } from './token'; +import { FilterArg } from '../parser/filter-arg'; +export declare class FilterToken extends Token { + name: string; + args: FilterArg[]; + constructor(name: string, args: FilterArg[], input: string, begin: number, end: number, file?: string); +} diff --git a/node_modules/liquidjs/dist/tokens/filtered-value-token.d.ts b/node_modules/liquidjs/dist/tokens/filtered-value-token.d.ts new file mode 100644 index 00000000..2c8d581d --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/filtered-value-token.d.ts @@ -0,0 +1,17 @@ +import { Token } from './token'; +import { FilterToken } from './filter-token'; +import { Expression } from '../render'; +/** + * value expression with optional filters + * e.g. + * {% assign foo="bar" | append: "coo" %} + */ +export declare class FilteredValueToken extends Token { + initial: Expression; + filters: FilterToken[]; + input: string; + begin: number; + end: number; + file?: string | undefined; + constructor(initial: Expression, filters: FilterToken[], input: string, begin: number, end: number, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/hash-token.d.ts b/node_modules/liquidjs/dist/tokens/hash-token.d.ts new file mode 100644 index 00000000..564e22e6 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/hash-token.d.ts @@ -0,0 +1,12 @@ +import { Token } from './token'; +import { ValueToken } from './value-token'; +import { IdentifierToken } from './identifier-token'; +export declare class HashToken extends Token { + input: string; + begin: number; + end: number; + name: IdentifierToken; + value?: ValueToken | undefined; + file?: string | undefined; + constructor(input: string, begin: number, end: number, name: IdentifierToken, value?: ValueToken | undefined, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/html-token.d.ts b/node_modules/liquidjs/dist/tokens/html-token.d.ts new file mode 100644 index 00000000..40ba217e --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/html-token.d.ts @@ -0,0 +1,11 @@ +import { Token } from './token'; +export declare class HTMLToken extends Token { + input: string; + begin: number; + end: number; + file?: string | undefined; + trimLeft: number; + trimRight: number; + constructor(input: string, begin: number, end: number, file?: string | undefined); + getContent(): string; +} diff --git a/node_modules/liquidjs/dist/tokens/identifier-token.d.ts b/node_modules/liquidjs/dist/tokens/identifier-token.d.ts new file mode 100644 index 00000000..2af10fa0 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/identifier-token.d.ts @@ -0,0 +1,9 @@ +import { Token } from './token'; +export declare class IdentifierToken extends Token { + input: string; + begin: number; + end: number; + file?: string | undefined; + content: string; + constructor(input: string, begin: number, end: number, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/index.d.ts b/node_modules/liquidjs/dist/tokens/index.d.ts new file mode 100644 index 00000000..6f338126 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/index.d.ts @@ -0,0 +1,18 @@ +export * from './top-level-token'; +export * from './tag-token'; +export * from './output-token'; +export * from './html-token'; +export * from './number-token'; +export * from './identifier-token'; +export * from './literal-token'; +export * from './operator-token'; +export * from './property-access-token'; +export * from './filter-token'; +export * from './hash-token'; +export * from './quoted-token'; +export * from './token'; +export * from './range-token'; +export * from './value-token'; +export * from './liquid-tag-token'; +export * from './delimited-token'; +export * from './filtered-value-token'; diff --git a/node_modules/liquidjs/dist/tokens/liquid-tag-token.d.ts b/node_modules/liquidjs/dist/tokens/liquid-tag-token.d.ts new file mode 100644 index 00000000..a82f2a6c --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/liquid-tag-token.d.ts @@ -0,0 +1,12 @@ +import { DelimitedToken } from './delimited-token'; +import { NormalizedFullOptions } from '../liquid-options'; +import { Tokenizer } from '../parser'; +/** + * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}` + */ +export declare class LiquidTagToken extends DelimitedToken { + name: string; + tokenizer: Tokenizer; + constructor(input: string, begin: number, end: number, options: NormalizedFullOptions, file?: string); + get args(): string; +} diff --git a/node_modules/liquidjs/dist/tokens/literal-token.d.ts b/node_modules/liquidjs/dist/tokens/literal-token.d.ts new file mode 100644 index 00000000..7367e06e --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/literal-token.d.ts @@ -0,0 +1,11 @@ +import { Token } from './token'; +import { LiteralValue, LiteralKey } from '../util'; +export declare class LiteralToken extends Token { + input: string; + begin: number; + end: number; + file?: string | undefined; + content: LiteralValue; + literal: LiteralKey; + constructor(input: string, begin: number, end: number, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/number-token.d.ts b/node_modules/liquidjs/dist/tokens/number-token.d.ts new file mode 100644 index 00000000..75b5d047 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/number-token.d.ts @@ -0,0 +1,9 @@ +import { Token } from './token'; +export declare class NumberToken extends Token { + input: string; + begin: number; + end: number; + file?: string | undefined; + content: number; + constructor(input: string, begin: number, end: number, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/operator-token.d.ts b/node_modules/liquidjs/dist/tokens/operator-token.d.ts new file mode 100644 index 00000000..cde8435f --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/operator-token.d.ts @@ -0,0 +1,39 @@ +import { Token } from './token'; +export declare const enum OperatorType { + Binary = 0, + Unary = 1 +} +export declare const operatorPrecedences: { + '==': number; + '!=': number; + '>': number; + '<': number; + '>=': number; + '<=': number; + contains: number; + not: number; + and: number; + or: number; +}; +export declare const operatorTypes: { + '==': OperatorType; + '!=': OperatorType; + '>': OperatorType; + '<': OperatorType; + '>=': OperatorType; + '<=': OperatorType; + contains: OperatorType; + not: OperatorType; + and: OperatorType; + or: OperatorType; +}; +export type OperatorKey = keyof typeof operatorPrecedences; +export declare class OperatorToken extends Token { + input: string; + begin: number; + end: number; + file?: string | undefined; + operator: OperatorKey; + constructor(input: string, begin: number, end: number, file?: string | undefined); + getPrecedence(): number; +} diff --git a/node_modules/liquidjs/dist/tokens/output-token.d.ts b/node_modules/liquidjs/dist/tokens/output-token.d.ts new file mode 100644 index 00000000..51e78650 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/output-token.d.ts @@ -0,0 +1,5 @@ +import { DelimitedToken } from './delimited-token'; +import { NormalizedFullOptions } from '../liquid-options'; +export declare class OutputToken extends DelimitedToken { + constructor(input: string, begin: number, end: number, options: NormalizedFullOptions, file?: string); +} diff --git a/node_modules/liquidjs/dist/tokens/property-access-token.d.ts b/node_modules/liquidjs/dist/tokens/property-access-token.d.ts new file mode 100644 index 00000000..af19abba --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/property-access-token.d.ts @@ -0,0 +1,13 @@ +import { Token } from './token'; +import { LiteralToken } from './literal-token'; +import { ValueToken } from './value-token'; +import { IdentifierToken } from './identifier-token'; +import { NumberToken } from './number-token'; +import { RangeToken } from './range-token'; +import { QuotedToken } from './quoted-token'; +import { FilteredValueToken } from './filtered-value-token'; +export declare class PropertyAccessToken extends Token { + variable: QuotedToken | RangeToken | LiteralToken | NumberToken | FilteredValueToken | undefined; + props: (ValueToken | IdentifierToken)[]; + constructor(variable: QuotedToken | RangeToken | LiteralToken | NumberToken | FilteredValueToken | undefined, props: (ValueToken | IdentifierToken)[], input: string, begin: number, end: number, file?: string); +} diff --git a/node_modules/liquidjs/dist/tokens/quoted-token.d.ts b/node_modules/liquidjs/dist/tokens/quoted-token.d.ts new file mode 100644 index 00000000..96cb4e92 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/quoted-token.d.ts @@ -0,0 +1,9 @@ +import { Token } from './token'; +export declare class QuotedToken extends Token { + input: string; + begin: number; + end: number; + file?: string | undefined; + readonly content: string; + constructor(input: string, begin: number, end: number, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/range-token.d.ts b/node_modules/liquidjs/dist/tokens/range-token.d.ts new file mode 100644 index 00000000..22c98961 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/range-token.d.ts @@ -0,0 +1,11 @@ +import { Token } from './token'; +import { ValueToken } from './value-token'; +export declare class RangeToken extends Token { + input: string; + begin: number; + end: number; + lhs: ValueToken; + rhs: ValueToken; + file?: string | undefined; + constructor(input: string, begin: number, end: number, lhs: ValueToken, rhs: ValueToken, file?: string | undefined); +} diff --git a/node_modules/liquidjs/dist/tokens/tag-token.d.ts b/node_modules/liquidjs/dist/tokens/tag-token.d.ts new file mode 100644 index 00000000..216c33e9 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/tag-token.d.ts @@ -0,0 +1,9 @@ +import { DelimitedToken } from './delimited-token'; +import { Tokenizer } from '../parser'; +import type { NormalizedFullOptions } from '../liquid-options'; +export declare class TagToken extends DelimitedToken { + name: string; + tokenizer: Tokenizer; + readonly args: string; + constructor(input: string, begin: number, end: number, options: NormalizedFullOptions, file?: string); +} diff --git a/node_modules/liquidjs/dist/tokens/token.d.ts b/node_modules/liquidjs/dist/tokens/token.d.ts new file mode 100644 index 00000000..4ad08437 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/token.d.ts @@ -0,0 +1,12 @@ +import { TokenKind } from '../parser'; +export declare abstract class Token { + kind: TokenKind; + input: string; + begin: number; + end: number; + file?: string | undefined; + constructor(kind: TokenKind, input: string, begin: number, end: number, file?: string | undefined); + getText(): string; + getPosition(): number[]; + size(): number; +} diff --git a/node_modules/liquidjs/dist/tokens/top-level-token.d.ts b/node_modules/liquidjs/dist/tokens/top-level-token.d.ts new file mode 100644 index 00000000..4cb6f45b --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/top-level-token.d.ts @@ -0,0 +1,4 @@ +import type { TagToken } from './tag-token'; +import type { HTMLToken } from './html-token'; +import type { OutputToken } from './output-token'; +export type TopLevelToken = TagToken | OutputToken | HTMLToken; diff --git a/node_modules/liquidjs/dist/tokens/value-token.d.ts b/node_modules/liquidjs/dist/tokens/value-token.d.ts new file mode 100644 index 00000000..9663b792 --- /dev/null +++ b/node_modules/liquidjs/dist/tokens/value-token.d.ts @@ -0,0 +1,7 @@ +import { RangeToken } from './range-token'; +import { LiteralToken } from './literal-token'; +import { NumberToken } from './number-token'; +import { QuotedToken } from './quoted-token'; +import { PropertyAccessToken } from './property-access-token'; +import { FilteredValueToken } from './filtered-value-token'; +export type ValueToken = RangeToken | LiteralToken | QuotedToken | PropertyAccessToken | NumberToken | FilteredValueToken; diff --git a/node_modules/liquidjs/dist/util/assert.d.ts b/node_modules/liquidjs/dist/util/assert.d.ts new file mode 100644 index 00000000..070ed1a2 --- /dev/null +++ b/node_modules/liquidjs/dist/util/assert.d.ts @@ -0,0 +1,2 @@ +export declare function assert(predicate: T | null | undefined, message?: string | (() => string)): void; +export declare function assertEmpty(predicate: T | null | undefined, message?: string): void; diff --git a/node_modules/liquidjs/dist/util/assert.spec.d.ts b/node_modules/liquidjs/dist/util/assert.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/assert.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/async.d.ts b/node_modules/liquidjs/dist/util/async.d.ts new file mode 100644 index 00000000..6e02850d --- /dev/null +++ b/node_modules/liquidjs/dist/util/async.d.ts @@ -0,0 +1,4 @@ +export type LiquidAsync any> = (sync: boolean, ...args: Parameters) => ReturnType | Promise>; +export declare function toLiquidAsync any>(asyncFn: (...args: Parameters) => Promise>, syncFn?: F): LiquidAsync; +export declare function toPromise(val: Generator | Promise | T): Promise; +export declare function toValueSync(val: Generator | T): T; diff --git a/node_modules/liquidjs/dist/util/async.spec.d.ts b/node_modules/liquidjs/dist/util/async.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/async.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/character.d.ts b/node_modules/liquidjs/dist/util/character.d.ts new file mode 100644 index 00000000..830a8588 --- /dev/null +++ b/node_modules/liquidjs/dist/util/character.d.ts @@ -0,0 +1,10 @@ +export declare const TYPES: number[]; +export declare const WORD = 1; +export declare const OPERATOR = 2; +export declare const BLANK = 4; +export declare const QUOTE = 8; +export declare const INLINE_BLANK = 16; +export declare const NUMBER = 32; +export declare const SIGN = 64; +export declare const PUNCTUATION = 128; +export declare function isWord(char: string): boolean; diff --git a/node_modules/liquidjs/dist/util/error.d.ts b/node_modules/liquidjs/dist/util/error.d.ts new file mode 100644 index 00000000..be7d25a7 --- /dev/null +++ b/node_modules/liquidjs/dist/util/error.d.ts @@ -0,0 +1,35 @@ +import { Token } from '../tokens/token'; +import { Template } from '../template/template'; +export declare abstract class LiquidError extends Error { + token: Token; + context: string; + originalError?: Error; + constructor(err: Error | string, token: Token); + protected update(): void; + static is(obj: unknown): obj is LiquidError; +} +export declare class TokenizationError extends LiquidError { + constructor(message: string, token: Token); +} +export declare class ParseError extends LiquidError { + constructor(err: Error, token: Token); +} +export declare class RenderError extends LiquidError { + constructor(err: Error, tpl: Template); + static is(obj: any): obj is RenderError; +} +export declare class LiquidErrors extends LiquidError { + errors: RenderError[]; + constructor(errors: RenderError[]); + static is(obj: any): obj is LiquidErrors; +} +export declare class UndefinedVariableError extends LiquidError { + constructor(err: Error, token: Token); +} +export declare class InternalUndefinedVariableError extends Error { + variableName: string; + constructor(variableName: string); +} +export declare class AssertionError extends Error { + constructor(message: string); +} diff --git a/node_modules/liquidjs/dist/util/error.spec.d.ts b/node_modules/liquidjs/dist/util/error.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/error.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/index.d.ts b/node_modules/liquidjs/dist/util/index.d.ts new file mode 100644 index 00000000..4da01dc3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/index.d.ts @@ -0,0 +1,12 @@ +export * from './error'; +export * from './character'; +export * from './assert'; +export * from './literal'; +export * from './underscore'; +export * from './operator-trie'; +export * from './type-guards'; +export * from './async'; +export * from './strftime'; +export * from './liquid-date'; +export * from './limiter'; +export * from './intl'; diff --git a/node_modules/liquidjs/dist/util/intl.d.ts b/node_modules/liquidjs/dist/util/intl.d.ts new file mode 100644 index 00000000..82cd8982 --- /dev/null +++ b/node_modules/liquidjs/dist/util/intl.d.ts @@ -0,0 +1,6 @@ +export declare function getDateTimeFormat(): { + (locales?: string | string[] | undefined, options?: Intl.DateTimeFormatOptions | undefined): Intl.DateTimeFormat; + new (locales?: string | string[] | undefined, options?: Intl.DateTimeFormatOptions | undefined): Intl.DateTimeFormat; + supportedLocalesOf(locales: string | string[], options?: Intl.DateTimeFormatOptions | undefined): string[]; + readonly prototype: Intl.DateTimeFormat; +} | undefined; diff --git a/node_modules/liquidjs/dist/util/limiter.d.ts b/node_modules/liquidjs/dist/util/limiter.d.ts new file mode 100644 index 00000000..ccd1a5b6 --- /dev/null +++ b/node_modules/liquidjs/dist/util/limiter.d.ts @@ -0,0 +1,8 @@ +export declare class Limiter { + private message; + private base; + private limit; + constructor(resource: string, limit: number); + use(count: number): void; + check(count: number): void; +} diff --git a/node_modules/liquidjs/dist/util/liquid-date.d.ts b/node_modules/liquidjs/dist/util/liquid-date.d.ts new file mode 100644 index 00000000..562cddf4 --- /dev/null +++ b/node_modules/liquidjs/dist/util/liquid-date.d.ts @@ -0,0 +1,59 @@ +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +export declare class LiquidDate { + private locale; + private timezoneOffset; + private timezoneName; + private date; + private displayDate; + private DateTimeFormat; + timezoneFixed: boolean; + constructor(init: string | number | Date, locale: string, timezone?: number | string); + getTime(): number; + /** + * The underlying UTC timestamp in milliseconds, unaffected by the display + * timezone. Use this (not `getTime()`) for timezone-invariant values like + * `%s`: `getTime()` reads `displayDate`, which is deliberately shifted by + * the display timezone offset so wall-clock getters can delegate to Date. + */ + dateValue(): number; + getMilliseconds(): number; + getSeconds(): number; + getMinutes(): number; + getHours(): number; + getDay(): number; + getDate(): number; + getMonth(): number; + getFullYear(): number; + toLocaleString(locale?: string, init?: any): string; + toLocaleTimeString(locale?: string): string; + toLocaleDateString(locale?: string): string; + getTimezoneOffset(): number; + getTimeZoneName(): string | undefined; + getLongMonthName(): string; + getShortMonthName(): string; + getLongWeekdayName(): string; + getShortWeekdayName(): string; + valid(): boolean; + private format; + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone(dateString: string, locale: string): LiquidDate; + private static getTimezoneOffset; +} diff --git a/node_modules/liquidjs/dist/util/liquid-date.spec.d.ts b/node_modules/liquidjs/dist/util/liquid-date.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/liquid-date.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/literal.d.ts b/node_modules/liquidjs/dist/util/literal.d.ts new file mode 100644 index 00000000..067c1afd --- /dev/null +++ b/node_modules/liquidjs/dist/util/literal.d.ts @@ -0,0 +1,11 @@ +import { BlankDrop, EmptyDrop, NullDrop } from '../drop'; +export declare const literalValues: { + true: boolean; + false: boolean; + nil: NullDrop; + null: NullDrop; + empty: EmptyDrop; + blank: BlankDrop; +}; +export type LiteralKey = keyof typeof literalValues; +export type LiteralValue = typeof literalValues[LiteralKey]; diff --git a/node_modules/liquidjs/dist/util/operator-trie.d.ts b/node_modules/liquidjs/dist/util/operator-trie.d.ts new file mode 100644 index 00000000..68e74b79 --- /dev/null +++ b/node_modules/liquidjs/dist/util/operator-trie.d.ts @@ -0,0 +1,10 @@ +interface TrieInput { + [key: string]: T; +} +export type Trie = { + data?: T; + end?: true; + needBoundary?: true; +} & Record; +export declare function createTrie(input: TrieInput): Trie; +export {}; diff --git a/node_modules/liquidjs/dist/util/performance.d.ts b/node_modules/liquidjs/dist/util/performance.d.ts new file mode 100644 index 00000000..291e2a1a --- /dev/null +++ b/node_modules/liquidjs/dist/util/performance.d.ts @@ -0,0 +1,5 @@ +interface LiquidPerformance { + now: () => number; +} +export declare function getPerformance(): LiquidPerformance; +export {}; diff --git a/node_modules/liquidjs/dist/util/performance.spec.d.ts b/node_modules/liquidjs/dist/util/performance.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/performance.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/strftime.d.ts b/node_modules/liquidjs/dist/util/strftime.d.ts new file mode 100644 index 00000000..ece39b05 --- /dev/null +++ b/node_modules/liquidjs/dist/util/strftime.d.ts @@ -0,0 +1,3 @@ +import { LiquidDate } from './liquid-date'; +import type { Limiter } from './limiter'; +export declare function strftime(d: LiquidDate, formatStr: string, memoryLimit?: Pick): string; diff --git a/node_modules/liquidjs/dist/util/strftime.spec.d.ts b/node_modules/liquidjs/dist/util/strftime.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/strftime.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/type-guards.d.ts b/node_modules/liquidjs/dist/util/type-guards.d.ts new file mode 100644 index 00000000..cd2c528c --- /dev/null +++ b/node_modules/liquidjs/dist/util/type-guards.d.ts @@ -0,0 +1,14 @@ +import { RangeToken, NumberToken, QuotedToken, LiteralToken, PropertyAccessToken, OutputToken, HTMLToken, TagToken, IdentifierToken, DelimitedToken, OperatorToken, ValueToken, FilteredValueToken } from '../tokens'; +export declare function isDelimitedToken(val: any): val is DelimitedToken; +export declare function isOperatorToken(val: any): val is OperatorToken; +export declare function isHTMLToken(val: any): val is HTMLToken; +export declare function isOutputToken(val: any): val is OutputToken; +export declare function isTagToken(val: any): val is TagToken; +export declare function isQuotedToken(val: any): val is QuotedToken; +export declare function isLiteralToken(val: any): val is LiteralToken; +export declare function isNumberToken(val: any): val is NumberToken; +export declare function isPropertyAccessToken(val: any): val is PropertyAccessToken; +export declare function isWordToken(val: any): val is IdentifierToken; +export declare function isRangeToken(val: any): val is RangeToken; +export declare function isFilteredValueToken(val: any): val is FilteredValueToken; +export declare function isValueToken(val: any): val is ValueToken; diff --git a/node_modules/liquidjs/dist/util/type-guards.spec.d.ts b/node_modules/liquidjs/dist/util/type-guards.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/type-guards.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/dist/util/underscore.d.ts b/node_modules/liquidjs/dist/util/underscore.d.ts new file mode 100644 index 00000000..703facf1 --- /dev/null +++ b/node_modules/liquidjs/dist/util/underscore.d.ts @@ -0,0 +1,41 @@ +export declare const toString: () => string; +export declare const hasOwnProperty: (v: PropertyKey) => boolean; +export declare function isString(value: any): value is string; +export declare function isFunction(value: any): value is Function; +export declare function isPromise(val: any): val is Promise; +export declare function isIterator(val: any): val is IterableIterator; +export declare function promisify(fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export declare function promisify(fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; +export declare function stringify(value: any): string; +export declare function readArrayElement(arr: any[], index: number, ownPropertyOnly: boolean): any; +export declare function toEnumerable(val: any): T[]; +export declare function toArray(val: any): any[]; +export declare function toValue(value: any): any; +export declare function toNumber(value: any): number; +export declare function isNumber(value: any): value is number; +export declare function toLiquid(value: any): any; +export declare function isNil(value: any): boolean; +export declare function isUndefined(value: any): boolean; +export declare function isArray(value: any): value is any[]; +export declare function isArrayLike(value: any): value is any[]; +export declare function isIterable(value: any): value is Iterable; +export declare function forOwn(obj: Record | undefined, iteratee: ((val: T, key: string, obj: { + [key: string]: T; +}) => boolean | void)): Record; +export declare function last(arr: T[]): T; +export declare function last(arr: string): string; +export declare function isObject(value: any): value is object; +export declare function range(start: number, stop: number, step?: number): number[]; +export declare function padStart(str: any, length: number, ch?: string): any; +export declare function padEnd(str: any, length: number, ch?: string): any; +export declare function pad(str: any, length: number, ch: string, add: (str: string, ch: string) => string): any; +export declare function identify(val: T): T; +export declare function changeCase(str: string): string; +export declare function ellipsis(str: string, N: number): string; +export declare function orderedCompare(a: any, b: any): 0 | 1 | -1; +export declare function caseInsensitiveCompare(a: any, b: any): 0 | 1 | -1; +export declare function argumentsToValue any, T>(fn: F): (this: T, ...args: Parameters) => any; +export declare function argumentsToNumber any, T>(fn: F): (this: T, ...args: Parameters) => any; +export declare function escapeRegExp(text: string): string; +/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */ +export declare function strictUniq(array: Array): Generator; diff --git a/node_modules/liquidjs/dist/util/underscore.spec.d.ts b/node_modules/liquidjs/dist/util/underscore.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/liquidjs/dist/util/underscore.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/liquidjs/package.json b/node_modules/liquidjs/package.json new file mode 100644 index 00000000..dd6a90fd --- /dev/null +++ b/node_modules/liquidjs/package.json @@ -0,0 +1,171 @@ +{ + "name": "liquidjs", + "version": "10.28.0", + "sideEffects": false, + "description": "A simple, expressive, extensible Liquid template engine for JavaScript — Shopify, Jekyll and GitHub Pages compatible, for Node.js, browsers, and the CLI, with TypeScript support.", + "main": "dist/liquid.node.js", + "module": "dist/liquid.node.mjs", + "es2015": "dist/liquid.browser.mjs", + "browser": { + "./dist/liquid.node.js": "./dist/liquid.browser.umd.js", + "./dist/liquid.node.mjs": "./dist/liquid.browser.mjs" + }, + "types": "dist/index.d.ts", + "engines": { + "node": ">=16" + }, + "scripts": { + "lint": "eslint \"**/*.mjs\" \"**/*.ts\" .", + "check": "npm run build && npm run build:docs && npm test && npm run lint && npm run perf:diff", + "test": "jest", + "test:coverage": "jest --coverage src test/integration", + "test:e2e": "jest test/e2e", + "test:demo": "./test/demo/test.sh", + "perf:diff": "node bin/perf-diff.js", + "perf:engines": "cd benchmark && npm run engines", + "version": "npm run build && npm test", + "build": "rollup -c rollup.config.mjs", + "build:cjs": "BUNDLES=cjs rollup -c rollup.config.mjs", + "build:min": "BUNDLES=min rollup -c rollup.config.mjs", + "build:umd": "BUNDLES=umd rollup -c rollup.config.mjs", + "build:charmap": "./bin/character-gen.js > src/util/character.ts", + "prepare:docs": "run-s build:docs-liquid build:contributors build:apidoc build:changelog", + "build:docs": "run-s prepare:docs build:docs-hexo", + "build:docs-liquid": "cross-env BUNDLES=min rollup -c rollup.config.mjs && shx cp dist/liquid.browser.min.js docs/themes/navy/source/js/", + "build:contributors": "node bin/build-contributors.js", + "build:apidoc": "shx rm -rf docs/source/api && typedoc --plugin typedoc-plugin-missing-exports ./src --gitRevision master --out docs/source/api", + "build:changelog": "node bin/build-changelog.js", + "build:docs-hexo": "cd docs && npm ci && npm run build && shx cp CNAME public/", + "serve:docs": "cd docs && npm run start", + "dev:docs": "run-s prepare:docs serve:docs" + }, + "bin": { + "liquidjs": "./bin/liquid.js", + "liquid": "./bin/liquid.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/harttle/liquidjs.git" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + }, + "files": [ + "bin/liquid.js", + "dist", + "LICENSE", + "README.md" + ], + "keywords": [ + "liquid", + "template engine", + "express", + "jinja", + "shopify" + ], + "author": "Harttle", + "license": "MIT", + "bugs": { + "url": "https://github.com/harttle/liquidjs/issues" + }, + "homepage": "https://github.com/harttle/liquidjs#readme", + "devDependencies": { + "@commitlint/cli": "^12.1.4", + "@commitlint/config-conventional": "^8.2.0", + "@semantic-release/changelog": "^6.0.2", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/npm": "^13.1.5", + "@semantic-release/release-notes-generator": "^10.0.3", + "@types/benchmark": "^1.0.31", + "@types/express": "^4.17.2", + "@types/jest": "^29.4.0", + "@types/jsdom": "^12.2.2", + "@types/node": "^22.3.0", + "@types/sinon": "^10.0.13", + "@types/supertest": "^2.0.7", + "@typescript-eslint/eslint-plugin": "^5.6.0", + "@typescript-eslint/parser": "^5.6.0", + "all-contributors-cli": "^6.24.0", + "benchmark": "^2.1.4", + "coveralls": "^3.0.2", + "cross-env": "^5.2.0", + "eslint": "^7.32.0", + "eslint-config-standard": "^12.0.0", + "eslint-plugin-deprecation": "^1.3.2", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-mocha": "^5.3.0", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0", + "express": "^4.16.4", + "jest": "^29.5.0", + "jsdom": "^16.5.0", + "npm-run-all2": "^8.0.4", + "rollup": "^1.26.3", + "rollup-plugin-replace": "^2.1.0", + "rollup-plugin-typescript2": "^0.31.1", + "rollup-plugin-uglify": "^6.0.4", + "rollup-plugin-version-injector": "^1.3.3", + "semantic-release": "^25.0.3", + "shx": "^0.4.0", + "sinon": "^15.0.2", + "supertest": "^3.4.2", + "ts-jest": "^29.0.5", + "tslib": "^2.3.1", + "typedoc": "^0.26.5", + "typedoc-plugin-missing-exports": "^3.0.0", + "typescript": "^4.5.3" + }, + "dependencies": { + "commander": "^10.0.0" + }, + "release": { + "branch": "master", + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/changelog", + "@semantic-release/npm", + [ + "@semantic-release/git", + { + "assets": [ + "package.json", + "package-lock.json", + "CHANGELOG.md" + ], + "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" + } + ], + [ + "@semantic-release/github", + { + "assets": [ + { + "path": "dist/*.umd.js", + "label": "liquid.js" + }, + { + "path": "dist/*.min.js", + "label": "liquid.min.js" + }, + { + "path": "dist/*.min.js.map", + "label": "liquid.min.js.map" + } + ] + } + ] + ] + }, + "publishConfig": { + "provenance": true + }, + "nyc": { + "extension": [ + ".ts" + ] + } +} diff --git a/node_modules/list-to-array/.npmignore b/node_modules/list-to-array/.npmignore new file mode 100644 index 00000000..123ae94d --- /dev/null +++ b/node_modules/list-to-array/.npmignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/node_modules/list-to-array/LICENSE b/node_modules/list-to-array/LICENSE new file mode 100644 index 00000000..b9d84981 --- /dev/null +++ b/node_modules/list-to-array/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/list-to-array/README.md b/node_modules/list-to-array/README.md new file mode 100644 index 00000000..2fec249e --- /dev/null +++ b/node_modules/list-to-array/README.md @@ -0,0 +1,52 @@ +# list-to-array + +Simple javascript lib for converting a [comma || space] delimited string to an array. + +Trims values so you can use human-friendly lists like `'one, two, three' => ['one','two','three']` + +If in array is provided, it is simply returned. If a falsy or non-string value is provided, an empty array is returned. + +Won't work with values that contain spaces. + +## Installation + +``` +npm install list-to-array +``` + +Works in node.js, iojs or bundle for the browser with browserify or webpack. + +## Usage + +``` +var listToArray = require('list-to-array'); + +console.log(listToArray('one, two, three')); + +// logs ['one','two','three'] +``` + +## License + +(The MIT License) + +Copyright (c) 2015 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/list-to-array/index.js b/node_modules/list-to-array/index.js new file mode 100644 index 00000000..78efcf96 --- /dev/null +++ b/node_modules/list-to-array/index.js @@ -0,0 +1,18 @@ +function truthy(val) { return val; } +function trim(str) { return str.trim(); } + +function listToArray (str, delimiter) { + if (Array.isArray(str)) { + return str; + } + if (!str || typeof str !== 'string') { + return []; + } + if (!delimiter) { + delimiter = ' '; + str = str.replace(/\,/g, ' '); + } + return str.split(delimiter).map(trim).filter(truthy); +} + +module.exports = listToArray; diff --git a/node_modules/list-to-array/package.json b/node_modules/list-to-array/package.json new file mode 100644 index 00000000..a6b8ed0c --- /dev/null +++ b/node_modules/list-to-array/package.json @@ -0,0 +1,32 @@ +{ + "name": "list-to-array", + "version": "1.1.0", + "description": "Simple javascript lib for converting a [comma || space] delimited string to an array", + "main": "index.js", + "author": "Jed Watson", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/JedWatson/list-to-array.git" + }, + "bugs": { + "url": "https://github.com/JedWatson/list-to-array/issues" + }, + "homepage": "https://github.com/JedWatson/list-to-array", + "scripts": { + "test": "mocha tests.js" + }, + "keywords": [ + "array", + "list", + "string", + "manipulation", + "conversion", + "function", + "library" + ], + "devDependencies": { + "mocha": "^2.2.5", + "must": "^0.12.0" + } +} diff --git a/node_modules/list-to-array/tests.js b/node_modules/list-to-array/tests.js new file mode 100644 index 00000000..456d2753 --- /dev/null +++ b/node_modules/list-to-array/tests.js @@ -0,0 +1,29 @@ +var demand = require('must'); +var listToArray = require('./index'); + +describe('listToArray', function() { + it('splits a comma-delimited list into an array', function() { + listToArray('one,two,three').must.eql(['one', 'two', 'three']); + }); + it('splits a space-delimited list into an array', function() { + listToArray('one two three').must.eql(['one', 'two', 'three']); + }); + it('trims whitespace from values', function() { + listToArray('one, two, three').must.eql(['one', 'two', 'three']); + }); + it('splits a list into an array', function() { + listToArray('one,two,three').must.eql(['one', 'two', 'three']); + }); + it('returns a empty array w/ no arguments', function() { + listToArray().must.eql([]); + }); + it('returns a empty array for a blank string', function() { + listToArray('').must.eql([]); + }); + it('returns a empty array when only given whitespace', function() { + listToArray(' ').must.eql([]); + }); + it('returns a empty array when only given whitespace and commas', function() { + listToArray(' , ').must.eql([]); + }); +}); diff --git a/node_modules/luxon/LICENSE.md b/node_modules/luxon/LICENSE.md new file mode 100644 index 00000000..2d560a64 --- /dev/null +++ b/node_modules/luxon/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2019 JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/luxon/README.md b/node_modules/luxon/README.md new file mode 100644 index 00000000..3fcacd7d --- /dev/null +++ b/node_modules/luxon/README.md @@ -0,0 +1,55 @@ +# Luxon + +[![MIT License][license-image]][license] [![Build Status][github-action-image]][github-action-url] [![NPM version][npm-version-image]][npm-url] [![Coverage Status][test-coverage-image]][test-coverage-url] [![PRs welcome][contributing-image]][contributing-url] + +Luxon is a library for working with dates and times in JavaScript. + +```js +DateTime.now().setZone("America/New_York").minus({ weeks: 1 }).endOf("day").toISO(); +``` + +## Upgrading to 3.0 + +[Guide](https://moment.github.io/luxon/#upgrading) + +## Features + * DateTime, Duration, and Interval types. + * Immutable, chainable, unambiguous API. + * Parsing and formatting for common and custom formats. + * Native time zone and Intl support (no locale or tz files). + +## Download/install + +[Download/install instructions](https://moment.github.io/luxon/#/install) + +## Documentation + +* [General documentation](https://moment.github.io/luxon/#/?id=luxon) +* [API docs](https://moment.github.io/luxon/api-docs/index.html) +* [Quick tour](https://moment.github.io/luxon/#/tour) +* [For Moment users](https://moment.github.io/luxon/#/moment) +* [Why does Luxon exist?](https://moment.github.io/luxon/#/why) +* [A quick demo](https://moment.github.io/luxon/demo/global.html) + +## Development + +See [contributing](CONTRIBUTING.md). + +![Phasers to stun][phasers-image] + +[license-image]: https://img.shields.io/badge/license-MIT-blue.svg +[license]: LICENSE.md + +[github-action-image]: https://github.com/moment/luxon/actions/workflows/test.yml/badge.svg +[github-action-url]: https://github.com/moment/luxon/actions/workflows/test.yml + +[npm-url]: https://npmjs.org/package/luxon +[npm-version-image]: https://badge.fury.io/js/luxon.svg + +[test-coverage-url]: https://codecov.io/gh/moment/luxon +[test-coverage-image]: https://codecov.io/gh/moment/luxon/branch/master/graph/badge.svg + +[contributing-url]: https://github.com/moment/luxon/blob/master/CONTRIBUTING.md +[contributing-image]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg + +[phasers-image]: https://img.shields.io/badge/phasers-stun-brightgreen.svg diff --git a/node_modules/luxon/build/amd/luxon.js b/node_modules/luxon/build/amd/luxon.js new file mode 100644 index 00000000..dcdb4f91 --- /dev/null +++ b/node_modules/luxon/build/amd/luxon.js @@ -0,0 +1,8741 @@ +define(['exports'], (function (exports) { 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _extends() { + _extends = Object.assign ? Object.assign.bind() : function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; + return _extends.apply(this, arguments); + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } + } + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct.bind(); + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + return _construct.apply(null, arguments); + } + function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; + } + function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + _cache.set(Class, Wrapper); + } + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + return _wrapNativeSuper(Class); + } + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); + } + + // these aren't really private, but nor are they really useful to document + /** + * @private + */ + var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + return LuxonError; + }( /*#__PURE__*/_wrapNativeSuper(Error)); + /** + * @private + */ + var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + return InvalidDateTimeError; + }(LuxonError); + + /** + * @private + */ + var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + return InvalidIntervalError; + }(LuxonError); + + /** + * @private + */ + var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + return InvalidDurationError; + }(LuxonError); + + /** + * @private + */ + var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + return ConflictingSpecificationError; + }(LuxonError); + + /** + * @private + */ + var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + return InvalidUnitError; + }(LuxonError); + + /** + * @private + */ + var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + return InvalidArgumentError; + }(LuxonError); + + /** + * @private + */ + var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + return ZoneIsAbstractError; + }(LuxonError); + + /** + * @private + */ + + var n = "numeric", + s = "short", + l = "long"; + var DATE_SHORT = { + year: n, + month: n, + day: n + }; + var DATE_MED = { + year: n, + month: s, + day: n + }; + var DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s + }; + var DATE_FULL = { + year: n, + month: l, + day: n + }; + var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l + }; + var TIME_SIMPLE = { + hour: n, + minute: n + }; + var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n + }; + var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + var TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23" + }; + var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23" + }; + var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s + }; + var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l + }; + var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n + }; + var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n + }; + var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n + }; + var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s + }; + var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l + }; + var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + + /** + * @interface + */ + var Zone = /*#__PURE__*/function () { + function Zone() {} + var _proto = Zone.prototype; + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */; + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */; + _createClass(Zone, [{ + key: "type", + get: + /** + * The type of zone + * @abstract + * @type {string} + */ + function get() { + throw new ZoneIsAbstractError(); + } + + /** + * The name of this zone. + * @abstract + * @type {string} + */ + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + + /** + * The IANA name of this zone. + * Defaults to `name` if not overwritten by a subclass. + * @abstract + * @type {string} + */ + }, { + key: "ianaName", + get: function get() { + return this.name; + } + + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + }, { + key: "isUniversal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + return Zone; + }(); + + var singleton$1 = null; + + /** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ + var SystemZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(SystemZone, _Zone); + function SystemZone() { + return _Zone.apply(this, arguments) || this; + } + var _proto = SystemZone.prototype; + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + + /** @override **/; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/; + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + + /** @override **/; + _proto.equals = function equals(otherZone) { + return otherZone.type === "system"; + } + + /** @override **/; + _createClass(SystemZone, [{ + key: "type", + get: /** @override **/ + function get() { + return "system"; + } + + /** @override **/ + }, { + key: "name", + get: function get() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + /** @override **/ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + get: + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + function get() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + }]); + return SystemZone; + }(Zone); + + var dtfCache = new Map(); + function makeDTF(zoneName) { + var dtf = dtfCache.get(zoneName); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zoneName, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short" + }); + dtfCache.set(zoneName, dtf); + } + return dtf; + } + var typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6 + }; + function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fadOrBc = parsed[4], + fHour = parsed[5], + fMinute = parsed[6], + fSecond = parsed[7]; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; + } + function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date); + var filled = []; + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value; + var pos = typeToPos[type]; + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; + } + var ianaZoneCache = new Map(); + /** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ + var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + var zone = ianaZoneCache.get(name); + if (zone === undefined) { + ianaZoneCache.set(name, zone = new IANAZone(name)); + } + return zone; + } + + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */; + IANAZone.resetCache = function resetCache() { + ianaZoneCache.clear(); + dtfCache.clear(); + } + + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead. + * @return {boolean} + */; + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return this.isValidZone(s); + } + + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */; + IANAZone.isValidZone = function isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + }; + function IANAZone(name) { + var _this; + _this = _Zone.call(this) || this; + /** @private **/ + _this.zoneName = name; + /** @private **/ + _this.valid = IANAZone.isValidZone(name); + return _this; + } + + /** + * The type of zone. `iana` for all instances of `IANAZone`. + * @override + * @type {string} + */ + var _proto = IANAZone.prototype; + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @override + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @override + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */; + _proto.offset = function offset(ts) { + if (!this.valid) return NaN; + var date = new Date(ts); + if (isNaN(date)) return NaN; + var dtf = makeDTF(this.name); + var _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + adOrBc = _ref2[3], + hour = _ref2[4], + minute = _ref2[5], + second = _ref2[6]; + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + + // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + var adjustedHour = hour === 24 ? 0 : hour; + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: adjustedHour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + + /** + * Return whether this Zone is equal to another zone + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + + /** + * Return whether this Zone is valid. + * @override + * @type {boolean} + */; + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + + /** + * The name of this zone (i.e. the IANA zone name). + * @override + * @type {string} + */ + }, { + key: "name", + get: function get() { + return this.zoneName; + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns false for all IANA zones. + * @override + * @type {boolean} + */ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + return IANAZone; + }(Zone); + + var _excluded = ["base"], + _excluded2 = ["padTo", "floor"]; + + // todo - remap caching + + var intlLFCache = {}; + function getCachedLF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; + } + var intlDTCache = new Map(); + function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache.get(key); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache.set(key, dtf); + } + return dtf; + } + var intlNumCache = new Map(); + function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache.get(key); + if (inf === undefined) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache.set(key, inf); + } + return inf; + } + var intlRelCache = new Map(); + function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var _opts = opts; + _opts.base; + var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, _excluded); // exclude `base` from the options + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache.get(key); + if (inf === undefined) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache.set(key, inf); + } + return inf; + } + var sysLocaleCache = null; + function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } + } + var intlResolvedOptionsCache = new Map(); + function getCachedIntResolvedOptions(locString) { + var opts = intlResolvedOptionsCache.get(locString); + if (opts === undefined) { + opts = new Intl.DateTimeFormat(locString).resolvedOptions(); + intlResolvedOptionsCache.set(locString, opts); + } + return opts; + } + var weekInfoCache = new Map(); + function getCachedWeekInfo(locString) { + var data = weekInfoCache.get(locString); + if (!data) { + var locale = new Intl.Locale(locString); + // browsers currently implement this as a property, but spec says it should be a getter function + data = "getWeekInfo" in locale ? locale.getWeekInfo() : locale.weekInfo; + // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86 + if (!("minimalDays" in data)) { + data = _extends({}, fallbackWeekSettings, data); + } + weekInfoCache.set(locString, data); + } + return data; + } + function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + + // private subtags and unicode subtags have ordering requirements, + // and we're not properly parsing this, so just strip out the + // private ones if they exist. + var xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + var uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + var smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; + return [selectedStr, numberingSystem, calendar]; + } + } + function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + return localeStr; + } else { + return localeStr; + } + } + function mapMonths(f) { + var ms = []; + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; + } + function mapWeekdays(f) { + var ms = []; + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; + } + function listStuff(loc, length, englishFn, intlFn) { + var mode = loc.listingMode(); + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } + } + function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || getCachedIntResolvedOptions(loc.locale).numberingSystem === "latn"; + } + } + + /** + * @private + */ + var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + opts.padTo; + opts.floor; + var otherOpts = _objectWithoutPropertiesLoose(opts, _excluded2); + if (!forceSimple || Object.keys(otherOpts).length > 0) { + var intlOpts = _extends({ + useGrouping: false + }, opts); + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + var _proto = PolyNumberFormatter.prototype; + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(_fixed, this.padTo); + } + }; + return PolyNumberFormatter; + }(); + /** + * @private + */ + var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + this.originalZone = undefined; + var z = undefined; + if (this.opts.timeZone) { + // Don't apply any workarounds if a timeZone is explicitly provided in opts + this.dt = dt; + } else if (dt.zone.type === "fixed") { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + var gmtOffset = -1 * (dt.offset / 60); + var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so + // we manually apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + // Custom zones can have any offset / offsetName so we just manually + // apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + var intlOpts = _extends({}, this.opts); + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + var _proto2 = PolyDateFormatter.prototype; + _proto2.format = function format() { + if (this.originalZone) { + // If we have to substitute in the actual zone name, we have to use + // formatToParts so that the timezone can be replaced. + return this.formatToParts().map(function (_ref) { + var value = _ref.value; + return value; + }).join(""); + } + return this.dtf.format(this.dt.toJSDate()); + }; + _proto2.formatToParts = function formatToParts() { + var _this = this; + var parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map(function (part) { + if (part.type === "timeZoneName") { + var offsetName = _this.originalZone.offsetName(_this.dt.ts, { + locale: _this.dt.locale, + format: _this.opts.timeZoneName + }); + return _extends({}, part, { + value: offsetName + }); + } else { + return part; + } + }); + } + return parts; + }; + _proto2.resolvedOptions = function resolvedOptions() { + return this.dtf.resolvedOptions(); + }; + return PolyDateFormatter; + }(); + /** + * @private + */ + var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = _extends({ + style: "long" + }, opts); + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + var _proto3 = PolyRelFormatter.prototype; + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + return PolyRelFormatter; + }(); + var fallbackWeekSettings = { + firstDay: 1, + minimalDays: 4, + weekend: [6, 7] + }; + + /** + * @private + */ + var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.weekSettings, opts.defaultToEN); + }; + Locale.create = function create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + var specifiedLocale = locale || Settings.defaultLocale; + // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats + var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + var weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings; + return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale); + }; + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache.clear(); + intlNumCache.clear(); + intlRelCache.clear(); + intlResolvedOptionsCache.clear(); + weekInfoCache.clear(); + }; + Locale.fromObject = function fromObject(_temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + locale = _ref2.locale, + numberingSystem = _ref2.numberingSystem, + outputCalendar = _ref2.outputCalendar, + weekSettings = _ref2.weekSettings; + return Locale.create(locale, numberingSystem, outputCalendar, weekSettings); + }; + function Locale(locale, numbering, outputCalendar, weekSettings, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.weekSettings = weekSettings; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + var _proto4 = Locale.prototype; + _proto4.listingMode = function listingMode() { + var isActuallyEn = this.isEnglish(); + var hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + }; + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, validateWeekSettings(alts.weekSettings) || this.weekSettings, alts.defaultToEN || false); + } + }; + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + return this.clone(_extends({}, alts, { + defaultToEN: true + })); + }; + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + return this.clone(_extends({}, alts, { + defaultToEN: false + })); + }; + _proto4.months = function months$1(length, format) { + var _this2 = this; + if (format === void 0) { + format = false; + } + return listStuff(this, length, months, function () { + // Workaround for "ja" locale: formatToParts does not label all parts of the month + // as "month" and for this locale there is no difference between "format" and "non-format". + // As such, just use format() instead of formatToParts() and take the whole string + var monthSpecialCase = _this2.intl === "ja" || _this2.intl.startsWith("ja-"); + format &= !monthSpecialCase; + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + if (!_this2.monthsCache[formatStr][length]) { + var mapper = !monthSpecialCase ? function (dt) { + return _this2.extract(dt, intl, "month"); + } : function (dt) { + return _this2.dtFormatter(dt, intl).format(); + }; + _this2.monthsCache[formatStr][length] = mapMonths(mapper); + } + return _this2.monthsCache[formatStr][length]; + }); + }; + _proto4.weekdays = function weekdays$1(length, format) { + var _this3 = this; + if (format === void 0) { + format = false; + } + return listStuff(this, length, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + if (!_this3.weekdaysCache[formatStr][length]) { + _this3.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this3.extract(dt, intl, "weekday"); + }); + } + return _this3.weekdaysCache[formatStr][length]; + }); + }; + _proto4.meridiems = function meridiems$1() { + var _this4 = this; + return listStuff(this, undefined, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this4.meridiemCache) { + var intl = { + hour: "numeric", + hourCycle: "h12" + }; + _this4.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this4.extract(dt, intl, "dayperiod"); + }); + } + return _this4.meridiemCache; + }); + }; + _proto4.eras = function eras$1(length) { + var _this5 = this; + return listStuff(this, length, eras, function () { + var intl = { + era: length + }; + + // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + if (!_this5.eraCache[length]) { + _this5.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this5.extract(dt, intl, "era"); + }); + } + return _this5.eraCache[length]; + }); + }; + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + _proto4.listFormatter = function listFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + return getCachedLF(this.intl, opts); + }; + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || getCachedIntResolvedOptions(this.intl).locale.startsWith("en-us"); + }; + _proto4.getWeekSettings = function getWeekSettings() { + if (this.weekSettings) { + return this.weekSettings; + } else if (!hasLocaleWeekInfo()) { + return fallbackWeekSettings; + } else { + return getCachedWeekInfo(this.locale); + } + }; + _proto4.getStartOfWeek = function getStartOfWeek() { + return this.getWeekSettings().firstDay; + }; + _proto4.getMinDaysInFirstWeek = function getMinDaysInFirstWeek() { + return this.getWeekSettings().minimalDays; + }; + _proto4.getWeekendDays = function getWeekendDays() { + return this.getWeekSettings().weekend; + }; + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + _proto4.toString = function toString() { + return "Locale(" + this.locale + ", " + this.numberingSystem + ", " + this.outputCalendar + ")"; + }; + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + return this.fastNumbersCached; + } + }]); + return Locale; + }(); + + var singleton = null; + + /** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ + var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */; + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + }; + function FixedOffsetZone(offset) { + var _this; + _this = _Zone.call(this) || this; + /** @private **/ + _this.fixed = offset; + return _this; + } + + /** + * The type of zone. `fixed` for all instances of `FixedOffsetZone`. + * @override + * @type {string} + */ + var _proto = FixedOffsetZone.prototype; + /** + * Returns the offset's common name at the specified timestamp. + * + * For fixed offset zones this equals to the zone name. + * @override + */ + _proto.offsetName = function offsetName() { + return this.name; + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns true for all fixed offset zones. + * @override + * @type {boolean} + */; + /** + * Return the offset in minutes for this zone at the specified timestamp. + * + * For fixed offset zones, this is constant and does not depend on a timestamp. + * @override + * @return {number} + */ + _proto.offset = function offset() { + return this.fixed; + } + + /** + * Return whether this Zone is equal to another zone (i.e. also fixed and same offset) + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + + /** + * Return whether this Zone is valid: + * All fixed offset zones are valid. + * @override + * @type {boolean} + */; + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + + /** + * The name of this zone. + * All fixed zones' names always start with "UTC" (plus optional offset) + * @override + * @type {string} + */ + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + + /** + * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn` + * + * @override + * @type {string} + */ + }, { + key: "ianaName", + get: function get() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return "Etc/GMT" + formatOffset(-this.fixed, "narrow"); + } + } + }, { + key: "isUniversal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "utcInstance", + get: + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + function get() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + }]); + return FixedOffsetZone; + }(Zone); + + /** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ + var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + function InvalidZone(zoneName) { + var _this; + _this = _Zone.call(this) || this; + /** @private */ + _this.zoneName = zoneName; + return _this; + } + + /** @override **/ + var _proto = InvalidZone.prototype; + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + + /** @override **/; + _proto.formatOffset = function formatOffset() { + return ""; + } + + /** @override **/; + _proto.offset = function offset() { + return NaN; + } + + /** @override **/; + _proto.equals = function equals() { + return false; + } + + /** @override **/; + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + + /** @override **/ + }, { + key: "name", + get: function get() { + return this.zoneName; + } + + /** @override **/ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + return InvalidZone; + }(Zone); + + /** + * @private + */ + function normalizeZone(input, defaultZone) { + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "default") return defaultZone;else if (lowered === "local" || lowered === "system") return SystemZone.instance;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } + } + + var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" + }; + var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] + }; + var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + function parseDigits(str) { + var value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } + } + + // cache of {numberingSystem: {append: regex}} + var digitRegexCache = new Map(); + function resetDigitRegexCache() { + digitRegexCache.clear(); + } + function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + if (append === void 0) { + append = ""; + } + var ns = numberingSystem || "latn"; + var appendCache = digitRegexCache.get(ns); + if (appendCache === undefined) { + appendCache = new Map(); + digitRegexCache.set(ns, appendCache); + } + var regex = appendCache.get(append); + if (regex === undefined) { + regex = new RegExp("" + numberingSystems[ns] + append); + appendCache.set(append, regex); + } + return regex; + } + + var now = function now() { + return Date.now(); + }, + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + twoDigitCutoffYear = 60, + throwOnInvalid, + defaultWeekSettings = null; + + /** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ + var Settings = /*#__PURE__*/function () { + function Settings() {} + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + DateTime.resetCache(); + resetDigitRegexCache(); + }; + _createClass(Settings, null, [{ + key: "now", + get: + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + function get() { + return now; + } + + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */, + set: function set(n) { + now = n; + } + + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + }, { + key: "defaultZone", + get: + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + function get() { + return normalizeZone(defaultZone, SystemZone.instance); + } + + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(zone) { + defaultZone = zone; + } + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(locale) { + defaultLocale = locale; + } + + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + + /** + * @typedef {Object} WeekSettings + * @property {number} firstDay + * @property {number} minimalDays + * @property {number[]} weekend + */ + + /** + * @return {WeekSettings|null} + */ + }, { + key: "defaultWeekSettings", + get: function get() { + return defaultWeekSettings; + } + + /** + * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and + * how many days are required in the first week of a year. + * Does not affect existing instances. + * + * @param {WeekSettings|null} weekSettings + */, + set: function set(weekSettings) { + defaultWeekSettings = validateWeekSettings(weekSettings); + } + + /** + * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + */ + }, { + key: "twoDigitCutoffYear", + get: function get() { + return twoDigitCutoffYear; + } + + /** + * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century + * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century + * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950 + * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50 + * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50 + */, + set: function set(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */, + set: function set(t) { + throwOnInvalid = t; + } + }]); + return Settings; + }(); + + var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + var _proto = Invalid.prototype; + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + return Invalid; + }(); + + var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); + } + function dayOfWeek(year, month, day) { + var d = new Date(Date.UTC(year, month - 1, day)); + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + var js = d.getUTCDay(); + return js === 0 ? 7 : js; + } + function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; + } + function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; + } + function isoWeekdayToLocal(isoWeekday, startOfWeek) { + return (isoWeekday - startOfWeek + 7) % 7 + 1; + } + + /** + * @private + */ + + function gregorianToWeek(gregObj, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek); + var weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7), + weekYear; + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek); + } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + return _extends({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); + } + function weekToGregorian(weekData, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek, + year; + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + return _extends({ + year: year, + month: month, + day: day + }, timeObject(weekData)); + } + function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day; + var ordinal = computeOrdinal(year, month, day); + return _extends({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); + } + function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal; + var _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + return _extends({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); + } + + /** + * Check if local week units like localWeekday are used in obj. + * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties. + * Modifies obj in-place! + * @param obj the object values + */ + function usesLocalWeekValues(obj, loc) { + var hasLocaleWeekData = !isUndefined(obj.localWeekday) || !isUndefined(obj.localWeekNumber) || !isUndefined(obj.localWeekYear); + if (hasLocaleWeekData) { + var hasIsoWeekData = !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear); + if (hasIsoWeekData) { + throw new ConflictingSpecificationError("Cannot mix locale-based week fields with ISO-based week fields"); + } + if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday; + if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber; + if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear; + delete obj.localWeekday; + delete obj.localWeekNumber; + delete obj.localWeekYear; + return { + minDaysInFirstWeek: loc.getMinDaysInFirstWeek(), + startOfWeek: loc.getStartOfWeek() + }; + } else { + return { + minDaysInFirstWeek: 4, + startOfWeek: 1 + }; + } + } + function hasInvalidWeekData(obj, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)), + validWeekday = integerBetween(obj.weekday, 1, 7); + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.weekNumber); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; + } + function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; + } + function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; + } + function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; + } + + /** + * @private + */ + + // TYPES + + function isUndefined(o) { + return typeof o === "undefined"; + } + function isNumber(o) { + return typeof o === "number"; + } + function isInteger(o) { + return typeof o === "number" && o % 1 === 0; + } + function isString(o) { + return typeof o === "string"; + } + function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; + } + + // CAPABILITIES + + function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } + } + function hasLocaleWeekInfo() { + try { + return typeof Intl !== "undefined" && !!Intl.Locale && ("weekInfo" in Intl.Locale.prototype || "getWeekInfo" in Intl.Locale.prototype); + } catch (e) { + return false; + } + } + + // OBJECTS AND ARRAYS + + function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; + } + function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; + } + function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); + } + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + function validateWeekSettings(settings) { + if (settings == null) { + return null; + } else if (typeof settings !== "object") { + throw new InvalidArgumentError("Week settings must be an object"); + } else { + if (!integerBetween(settings.firstDay, 1, 7) || !integerBetween(settings.minimalDays, 1, 7) || !Array.isArray(settings.weekend) || settings.weekend.some(function (v) { + return !integerBetween(v, 1, 7); + })) { + throw new InvalidArgumentError("Invalid week settings"); + } + return { + firstDay: settings.firstDay, + minimalDays: settings.minimalDays, + weekend: Array.from(settings.weekend) + }; + } + } + + // NUMBERS AND STRINGS + + function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; + } + + // x % n but takes the sign of n instead of x + function floorMod(x, n) { + return x - n * Math.floor(x / n); + } + function padStart(input, n) { + if (n === void 0) { + n = 2; + } + var isNeg = input < 0; + var padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + return padded; + } + function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } + } + function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } + } + function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } + } + function roundTo(number, digits, rounding) { + if (rounding === void 0) { + rounding = "round"; + } + var factor = Math.pow(10, digits); + switch (rounding) { + case "expand": + return number > 0 ? Math.ceil(number * factor) / factor : Math.floor(number * factor) / factor; + case "trunc": + return Math.trunc(number * factor) / factor; + case "round": + return Math.round(number * factor) / factor; + case "floor": + return Math.floor(number * factor) / factor; + case "ceil": + return Math.ceil(number * factor) / factor; + default: + throw new RangeError("Value rounding " + rounding + " is out of range"); + } + } + + // DATE BASICS + + function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } + } + + // convert a calendar object to a local timestamp (epoch, but with the offset baked in) + function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); + + // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not + // so if obj.year is in 99, but obj.day makes it roll over into year 100, + // the calculations done by Date.UTC are using year 2000 - which is incorrect + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; + } + + // adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js + function firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) { + var fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek); + return -fwdlw + minDaysInFirstWeek - 1; + } + function weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek); + var weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek); + return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7; + } + function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year; + } + + // PARSING + + function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + var date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + if (timeZone) { + intlOpts.timeZone = timeZone; + } + var modified = _extends({ + timeZoneName: offsetFormat + }, intlOpts); + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; + } + + // signedOffset('-5', '30') -> -330 + function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); + + // don't || this because we want to preserve -0 + if (Number.isNaN(offHour)) { + offHour = 0; + } + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; + } + + // COERCION + + function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || !Number.isFinite(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; + } + function normalizeObject(obj, normalizer) { + var normalized = {}; + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; + } + + /** + * Returns the offset's value as a string + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + function formatOffset(offset, format) { + var hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + switch (format) { + case "short": + return "" + sign + padStart(hours, 2) + ":" + padStart(minutes, 2); + case "narrow": + return "" + sign + hours + (minutes > 0 ? ":" + minutes : ""); + case "techie": + return "" + sign + padStart(hours, 2) + padStart(minutes, 2); + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } + } + function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); + } + + /** + * @private + */ + + var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + function months(length) { + switch (length) { + case "narrow": + return [].concat(monthsNarrow); + case "short": + return [].concat(monthsShort); + case "long": + return [].concat(monthsLong); + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } + } + var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; + var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + function weekdays(length) { + switch (length) { + case "narrow": + return [].concat(weekdaysNarrow); + case "short": + return [].concat(weekdaysShort); + case "long": + return [].concat(weekdaysLong); + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } + } + var meridiems = ["AM", "PM"]; + var erasLong = ["Before Christ", "Anno Domini"]; + var erasShort = ["BC", "AD"]; + var erasNarrow = ["B", "A"]; + function eras(length) { + switch (length) { + case "narrow": + return [].concat(erasNarrow); + case "short": + return [].concat(erasShort); + case "long": + return [].concat(erasLong); + default: + return null; + } + } + function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; + } + function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; + } + function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; + } + function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; + } + function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + if (narrow === void 0) { + narrow = false; + } + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + case 0: + return isDay ? "today" : "this " + units[unit][0]; + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; + } + + function stringifyTokens(splits, tokenToString) { + var s = ""; + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + return s; + } + var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS + }; + + /** + * @private + */ + var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + return new Formatter(locale, opts); + }; + Formatter.parseFormat = function parseFormat(fmt) { + // white-space is always considered a literal in user-provided formats + // the " " token has a special meaning (see unitForToken) + + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + if (c === "'") { + // turn '' into a literal signal quote instead of just skipping the empty literal + if (currentFull.length > 0 || bracketed) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull === "" ? "'" : currentFull + }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: /^\s+$/.test(currentFull), + val: currentFull + }); + } + currentFull = c; + current = c; + } + } + if (currentFull.length > 0) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull + }); + } + return splits; + }; + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + var _proto = Formatter.prototype; + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + var df = this.systemLoc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + _proto.dtFormatter = function dtFormatter(dt, opts) { + if (opts === void 0) { + opts = {}; + } + return this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + }; + _proto.formatDateTime = function formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + }; + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + }; + _proto.formatInterval = function formatInterval(interval, opts) { + var df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + }; + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + }; + _proto.num = function num(n, p, signDisplay) { + if (p === void 0) { + p = 0; + } + if (signDisplay === void 0) { + signDisplay = undefined; + } + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + var opts = _extends({}, this.opts); + if (p > 0) { + opts.padTo = p; + } + if (signDisplay) { + opts.signDisplay = signDisplay; + } + return this.loc.numberFormatter(opts).format(n); + }; + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hourCycle: "h12" + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + case "u": + // falls through + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + case "s": + return _this.num(dt.second); + case "ss": + return _this.num(dt.second, 2); + // fractional seconds + case "uu": + return _this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return _this.num(Math.floor(dt.millisecond / 100)); + // minutes + case "m": + return _this.num(dt.minute); + case "mm": + return _this.num(dt.minute, 2); + // hours + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return _this.num(dt.hour); + case "HH": + return _this.num(dt.hour, 2); + // offset + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + case "a": + return meridiem(); + // dates + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + case "c": + // like 1 + return _this.num(dt.weekday); + case "ccc": + // like 'Tues' + return weekday("short", true); + case "cccc": + // like 'Tuesday' + return weekday("long", true); + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + case "E": + // like 1 + return _this.num(dt.weekday); + case "EEE": + // like 'Tues' + return weekday("short", false); + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + case "LLL": + // like Jan + return month("short", true); + case "LLLL": + // like January + return month("long", true); + case "LLLLL": + // like J + return month("narrow", true); + // months - format + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + case "MMM": + // like Jan + return month("short", false); + case "MMMM": + // like January + return month("long", false); + case "MMMMM": + // like J + return month("narrow", false); + // years + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + case "G": + // like AD + return era("short"); + case "GG": + // like Anno Domini + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return _this.num(dt.weekYear, 4); + case "W": + return _this.num(dt.weekNumber); + case "WW": + return _this.num(dt.weekNumber, 2); + case "n": + return _this.num(dt.localWeekNumber); + case "nn": + return _this.num(dt.localWeekNumber, 2); + case "ii": + return _this.num(dt.localWeekYear.toString().slice(-2), 2); + case "iiii": + return _this.num(dt.localWeekYear, 4); + case "o": + return _this.num(dt.ordinal); + case "ooo": + return _this.num(dt.ordinal, 3); + case "q": + // like 1 + return _this.num(dt.quarter); + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + case "x": + return _this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + var invertLargest = this.opts.signMode === "negativeLargestOnly" ? -1 : 1; + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "milliseconds"; + case "s": + return "seconds"; + case "m": + return "minutes"; + case "h": + return "hours"; + case "d": + return "days"; + case "w": + return "weeks"; + case "M": + return "months"; + case "y": + return "years"; + default: + return null; + } + }, + tokenToString = function tokenToString(lildur, info) { + return function (token) { + var mapped = tokenToField(token); + if (mapped) { + var inversionFactor = info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1; + var signDisplay; + if (_this2.opts.signMode === "negativeLargestOnly" && mapped !== info.largestUnit) { + signDisplay = "never"; + } else if (_this2.opts.signMode === "all") { + signDisplay = "always"; + } else { + // "auto" and "negative" are the same, but "auto" has better support + signDisplay = "auto"; + } + return _this2.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })), + durationInfo = { + isNegativeDuration: collapsed < 0, + // this relies on "collapsed" being based on "shiftTo", which builds up the object + // in order + largestUnit: Object.keys(collapsed.values)[0] + }; + return stringifyTokens(tokens, tokenToString(collapsed, durationInfo)); + }; + return Formatter; + }(); + + /* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + + var ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; + function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); + } + function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + return [_extends({}, mergedVals, val), zone || mergedZone, next]; + }, [{}, null, 1]).slice(0, 2); + }; + } + function parse(s) { + if (s == null) { + return [null, null]; + } + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + if (m) { + return extractor(m); + } + } + return [null, null]; + } + function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + return function (match, cursor) { + var ret = {}; + var i; + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + return [ret, null, cursor + i]; + }; + } + + // ISO and SQL parsing + var offsetRegex = /(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/; + var isoExtendedZone = "(?:" + offsetRegex.source + "?(?:\\[(" + ianaRegex.source + ")\\])?)?"; + var isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; + var isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + isoExtendedZone); + var isoTimeExtensionRegex = RegExp("(?:[Tt]" + isoTimeRegex.source + ")?"); + var isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; + var isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; + var isoOrdinalRegex = /(\d{4})-?(\d{3})/; + var extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); + var extractISOOrdinalData = simpleParse("year", "ordinal"); + var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one + var sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"); + var sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); + function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); + } + function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; + } + function extractISOTime(match, cursor) { + var item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; + } + function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; + } + function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; + } + + // ISO time parsing + + var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); + + // ISO duration parsing + + var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; + function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + var negativeSeconds = secondStr && secondStr[0] === "-"; + var maybeNegate = function maybeNegate(num, force) { + if (force === void 0) { + force = false; + } + return num !== undefined && (force || num && hasNegativePrefix) ? -num : num; + }; + return [{ + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + }]; + } + + // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York + // and not just that we're in -240 *right now*. But since I don't think these are used that often + // I'm just going to ignore that + var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 + }; + function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + return result; + } + + // RFC 2822/5322 + var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + return [result, new FixedOffsetZone(offset)]; + } + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); + } + + // http date + + var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); + var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); + var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); + var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + + /* + * @private + */ + + function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); + } + function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); + } + function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); + } + function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); + } + var extractISOTimeOnly = combineExtractors(extractISOTime); + function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); + } + var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); + var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); + } + + var INVALID$2 = "Invalid Duration"; + + // unit conversion constants + var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } + }, + casualMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix); + + // units ordered by size + var orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; + var reverseUnits = orderedUnits$1.slice(0).reverse(); + + // clone really means "create another instance just like this one, but with these changes" + function clone$1(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + // deep merge for vals + var conf = { + values: clear ? alts.values : _extends({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix + }; + return new Duration(conf); + } + function durationToMillis(matrix, vals) { + var _vals$milliseconds; + var sum = (_vals$milliseconds = vals.milliseconds) != null ? _vals$milliseconds : 0; + for (var _iterator = _createForOfIteratorHelperLoose(reverseUnits.slice(1)), _step; !(_step = _iterator()).done;) { + var unit = _step.value; + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; + } + + // NB: mutates parameters + function normalizeValues(matrix, vals) { + // the logic below assumes the overall value of the duration is positive + // if this is not the case, factor is used to make it so + var factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + orderedUnits$1.reduceRight(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + var previousVal = vals[previous] * factor; + var conv = matrix[current][previous]; + + // if (previousVal < 0): + // lower order unit is negative (e.g. { years: 2, days: -2 }) + // normalize this by reducing the higher order unit by the appropriate amount + // and increasing the lower order unit + // this can never make the higher order unit negative, because this function only operates + // on positive durations, so the amount of time represented by the lower order unit cannot + // be larger than the higher order unit + // else: + // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 }) + // in this case we attempt to convert as much as possible from the lower order unit into + // the higher order one + // + // Math.floor takes care of both of these cases, rounding away from 0 + // if previousVal < 0 it makes the absolute value larger + // if previousVal >= it makes the absolute value smaller + var rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + + // try to convert any decimals into smaller units if possible + // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 } + orderedUnits$1.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + var fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); + } + + // Remove all properties with a value of 0 from an object + function removeZeroes(vals) { + var newVals = {}; + for (var _i = 0, _Object$entries = Object.entries(vals); _i < _Object$entries.length; _i++) { + var _Object$entries$_i = _Object$entries[_i], + key = _Object$entries$_i[0], + value = _Object$entries$_i[1]; + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; + } + + /** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ + var Duration = /*#__PURE__*/function (_Symbol$for) { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + var matrix = accurate ? accurateMatrix : casualMatrix; + if (config.matrix) { + matrix = config.matrix; + } + + /** + * @access private + */ + this.values = config.values; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.matrix = matrix; + /** + * @access private + */ + this.isLuxonDuration = true; + } + + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject({ + milliseconds: count + }, opts); + } + + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the custom conversion system to use + * @return {Duration} + */; + Duration.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix + }); + } + + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */; + Duration.fromDurationLike = function fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationLike + " of type " + typeof durationLike); + } + } + + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the preset conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */; + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */; + Duration.fromISOTime = function fromISOTime(text, opts) { + var _parseISOTimeOnly = parseISOTimeOnly(text), + parsed = _parseISOTimeOnly[0]; + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */; + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + + /** + * @private + */; + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */; + var _proto = Duration.prototype; + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * Tokens can be escaped by wrapping with single quotes. + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat("d s", { signMode: "all" }) //=> "+6 +2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "all" }) //=> "-6 -2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "negativeLargestOnly" }) //=> "-6 2" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = _extends({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options + * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`. + * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor. + * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero + * @example + * ```js + * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 mth, 0 wks, 5 hr, 6 min' + * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes' + * ``` + */; + _proto.toHuman = function toHuman(opts) { + var _this = this; + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return INVALID$2; + var showZeros = opts.showZeros !== false; + var l = orderedUnits$1.map(function (unit) { + var val = _this.values[unit]; + if (isUndefined(val) || val === 0 && !showZeros) { + return null; + } + return _this.loc.numberFormatter(_extends({ + style: "unit", + unitDisplay: "long" + }, opts, { + unit: unit.slice(0, -1) + })).format(val); + }).filter(function (n) { + return n; + }); + return this.loc.listFormatter(_extends({ + type: "conjunction", + style: opts.listStyle || "narrow" + }, opts)).format(l); + } + + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */; + _proto.toObject = function toObject() { + if (!this.isValid) return {}; + return _extends({}, this.values); + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */; + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */; + _proto.toISOTime = function toISOTime(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return null; + var millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + opts = _extends({ + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended" + }, opts, { + includeOffset: false + }); + var dateTime = DateTime.fromMillis(millis, { + zone: "UTC" + }); + return dateTime.toISOTime(opts); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */; + _proto.toJSON = function toJSON() { + return this.toISO(); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */; + _proto.toString = function toString() { + return this.toISO(); + } + + /** + * Returns a string representation of this Duration appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "Duration { values: " + JSON.stringify(this.values) + " }"; + } else { + return "Duration { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */; + _proto.toMillis = function toMillis() { + if (!this.isValid) return NaN; + return durationToMillis(this.matrix, this.values); + } + + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */; + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */; + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration), + result = {}; + for (var _i2 = 0, _orderedUnits = orderedUnits$1; _i2 < _orderedUnits.length; _i2++) { + var k = _orderedUnits[_i2]; + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */; + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */; + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + for (var _i3 = 0, _Object$keys = Object.keys(this.values); _i3 < _Object$keys.length; _i3++) { + var k = _Object$keys[_i3]; + result[k] = asNumber(fn(this.values[k], k)); + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */; + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */; + _proto.set = function set(values) { + if (!this.isValid) return this; + var mixed = _extends({}, this.values, normalizeObject(values, Duration.normalizeUnit)); + return clone$1(this, { + values: mixed + }); + } + + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */; + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy, + matrix = _ref.matrix; + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }); + var opts = { + loc: loc, + matrix: matrix, + conversionAccuracy: conversionAccuracy + }; + return clone$1(this, opts); + } + + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */; + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + + /** + * Reduce this Duration to its canonical representation in its current units. + * Assuming the overall value of the Duration is positive, this means: + * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example) + * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise + * the overall value would be negative, see third example) + * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example) + * + * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 } + * @return {Duration} + */; + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Rescale units to its largest representation + * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 } + * @return {Duration} + */; + _proto.rescale = function rescale() { + if (!this.isValid) return this; + var vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */; + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + if (!this.isValid) return this; + if (units.length === 0) { + return this; + } + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + for (var _i4 = 0, _orderedUnits2 = orderedUnits$1; _i4 < _orderedUnits2.length; _i4++) { + var k = _orderedUnits2[_i4]; + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; + + // anything we haven't boiled down yet should get boiled to this unit + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + + // plus anything that's already in this unit + if (isNumber(vals[k])) { + own += vals[k]; + } + + // only keep the integer part for now in the hopes of putting any decimal part + // into a smaller unit later + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; + + // otherwise, keep it in the wings to boil it later + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + + // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + normalizeValues(this.matrix, built); + return clone$1(this, { + values: built + }, true); + } + + /** + * Shift this Duration to all available units. + * Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds") + * @return {Duration} + */; + _proto.shiftToAll = function shiftToAll() { + if (!this.isValid) return this; + return this.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"); + } + + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */; + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + for (var _i5 = 0, _Object$keys2 = Object.keys(this.values); _i5 < _Object$keys2.length; _i5++) { + var k = _Object$keys2[_i5]; + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { + values: negated + }, true); + } + + /** + * Removes all units with values equal to 0 from this Duration. + * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 } + * @return {Duration} + */; + _proto.removeZeros = function removeZeros() { + if (!this.isValid) return this; + var vals = removeZeroes(this.values); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Get the years. + * @type {number} + */; + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + if (!this.loc.equals(other.loc)) { + return false; + } + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + for (var _i6 = 0, _orderedUnits3 = orderedUnits$1; _i6 < _orderedUnits3.length; _i6++) { + var u = _orderedUnits3[_i6]; + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + }; + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + + /** + * Get the quarters. + * @type {number} + */ + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + + /** + * Get the months. + * @type {number} + */ + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + + /** + * Get the weeks + * @type {number} + */ + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + + /** + * Get the days. + * @type {number} + */ + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + + /** + * Get the hours. + * @type {number} + */ + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + + /** + * Get the minutes. + * @type {number} + */ + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + + /** + * Get the seconds. + * @return {number} + */ + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + + /** + * Get the milliseconds. + * @return {number} + */ + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + return Duration; + }(Symbol.for("nodejs.util.inspect.custom")); + + var INVALID$1 = "Invalid Interval"; + + // checks if the start is equal to or before the end + function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } + } + + /** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ + var Interval = /*#__PURE__*/function (_Symbol$for) { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + this.e = config.end; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.isLuxonInterval = true; + } + + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */; + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */; + Interval.after = function after(start, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */; + Interval.before = function before(end, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */; + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + if (s && e) { + var start, startIsValid; + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + var end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + if (startIsValid) { + var dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + var _dur = Duration.fromISO(s, opts); + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + + /** + * Returns the start of the Interval + * @type {DateTime} + */; + var _proto = Interval.prototype; + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime + * @return {number} + */; + _proto.count = function count(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (!this.isValid) return NaN; + var start = this.start.startOf(unit, opts); + var end; + if (opts != null && opts.useLocaleWeeks) { + end = this.end.reconfigure({ + locale: start.locale + }); + } else { + end = this.end; + } + end = end.startOf(unit, opts); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */; + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */; + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */; + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */; + _proto.splitAt = function splitAt() { + var _this = this; + if (!this.isValid) return []; + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(function (a, b) { + return a.toMillis() - b.toMillis(); + }), + results = []; + var s = this.s, + i = 0; + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + return results; + } + + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */; + _proto.splitBy = function splitBy(duration) { + var dur = Duration.fromDurationLike(duration); + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + var s = this.s, + idx = 1, + next; + var results = []; + while (s < this.e) { + var added = this.start.plus(dur.mapUnits(function (x) { + return x * idx; + })); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + return results; + } + + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */; + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */; + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */; + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */; + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + + /** + * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise. + * @param {Interval} other + * @return {boolean} + */; + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */; + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + return this.s.equals(other.s) && this.e.equals(other.e); + } + + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */; + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */; + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + + /** + * Merge an array of Intervals into an equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval + * and ending with the latest. + * + * @param {Array} intervals + * @return {Array} + */; + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + if (final) { + found.push(final); + } + return found; + } + + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */; + Interval.xor = function xor(intervals) { + var _Array$prototype; + var start = null, + currentCount = 0; + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + start = null; + } + } + return Interval.merge(results); + } + + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */; + _proto.difference = function difference() { + var _this2 = this; + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */; + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + + /** + * Returns a string representation of this Interval appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "Interval { start: " + this.s.toISO() + ", end: " + this.e.toISO() + " }"; + } else { + return "Interval { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns a localized string representing this Interval. Accepts the same options as the + * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as + * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method + * is browser-specific, but in general it will return an appropriate representation of the + * Interval in the assigned locale. Defaults to the system's locale if no locale has been + * specified. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or + * Intl.DateTimeFormat constructor options. + * @param {Object} opts - Options to override the configuration of the start DateTime. + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022 + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p + * @return {string} + */; + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1; + } + + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */; + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */; + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */; + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + + /** + * Returns a string representation of this Interval formatted according to the specified format + * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible + * formatting tool. + * @param {string} dateFormat - The format string. This string formats the start and end time. + * See {@link DateTime#toFormat} for details. + * @param {Object} opts - Options. + * @param {string} [opts.separator = ' – '] - A separator to place between the start and end + * representations. + * @return {string} + */; + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */; + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */; + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + + /** + * Returns the end of the Interval. This is the first instant which is not part of the interval + * (Interval is half-open). + * @type {DateTime} + */ + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + + /** + * Returns the last DateTime included in the interval (since end is not part of the interval) + * @type {DateTime} + */ + }, { + key: "lastDateTime", + get: function get() { + return this.isValid ? this.e ? this.e.minus(1) : null : null; + } + + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + return Interval; + }(Symbol.for("nodejs.util.inspect.custom")); + + /** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ + var Info = /*#__PURE__*/function () { + function Info() {} + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + var proto = DateTime.now().setZone(zone).set({ + month: 12 + }); + return !zone.isUniversal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */; + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */; + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + + /** + * Get the weekday on which the week starts according to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} the start of the week, 1 for Monday through 7 for Sunday + */; + Info.getStartOfWeek = function getStartOfWeek(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$locObj = _ref.locObj, + locObj = _ref$locObj === void 0 ? null : _ref$locObj; + return (locObj || Locale.create(locale)).getStartOfWeek(); + } + + /** + * Get the minimum number of days necessary in a week before it is considered part of the next year according + * to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} + */; + Info.getMinimumDaysInFirstWeek = function getMinimumDaysInFirstWeek(_temp2) { + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$locObj = _ref2.locObj, + locObj = _ref2$locObj === void 0 ? null : _ref2$locObj; + return (locObj || Locale.create(locale)).getMinDaysInFirstWeek(); + } + + /** + * Get the weekdays, which are considered the weekend according to the given locale + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday + */; + Info.getWeekendWeekdays = function getWeekendWeekdays(_temp3) { + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$locObj = _ref3.locObj, + locObj = _ref3$locObj === void 0 ? null : _ref3$locObj; + // copy the array, because we cache it internally + return (locObj || Locale.create(locale)).getWeekendDays().slice(); + } + + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */; + Info.months = function months(length, _temp4) { + if (length === void 0) { + length = "long"; + } + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem, + _ref4$locObj = _ref4.locObj, + locObj = _ref4$locObj === void 0 ? null : _ref4$locObj, + _ref4$outputCalendar = _ref4.outputCalendar, + outputCalendar = _ref4$outputCalendar === void 0 ? "gregory" : _ref4$outputCalendar; + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */; + Info.monthsFormat = function monthsFormat(length, _temp5) { + if (length === void 0) { + length = "long"; + } + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale, + _ref5$numberingSystem = _ref5.numberingSystem, + numberingSystem = _ref5$numberingSystem === void 0 ? null : _ref5$numberingSystem, + _ref5$locObj = _ref5.locObj, + locObj = _ref5$locObj === void 0 ? null : _ref5$locObj, + _ref5$outputCalendar = _ref5.outputCalendar, + outputCalendar = _ref5$outputCalendar === void 0 ? "gregory" : _ref5$outputCalendar; + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */; + Info.weekdays = function weekdays(length, _temp6) { + if (length === void 0) { + length = "long"; + } + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale, + _ref6$numberingSystem = _ref6.numberingSystem, + numberingSystem = _ref6$numberingSystem === void 0 ? null : _ref6$numberingSystem, + _ref6$locObj = _ref6.locObj, + locObj = _ref6$locObj === void 0 ? null : _ref6$locObj; + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */; + Info.weekdaysFormat = function weekdaysFormat(length, _temp7) { + if (length === void 0) { + length = "long"; + } + var _ref7 = _temp7 === void 0 ? {} : _temp7, + _ref7$locale = _ref7.locale, + locale = _ref7$locale === void 0 ? null : _ref7$locale, + _ref7$numberingSystem = _ref7.numberingSystem, + numberingSystem = _ref7$numberingSystem === void 0 ? null : _ref7$numberingSystem, + _ref7$locObj = _ref7.locObj, + locObj = _ref7$locObj === void 0 ? null : _ref7$locObj; + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */; + Info.meridiems = function meridiems(_temp8) { + var _ref8 = _temp8 === void 0 ? {} : _temp8, + _ref8$locale = _ref8.locale, + locale = _ref8$locale === void 0 ? null : _ref8$locale; + return Locale.create(locale).meridiems(); + } + + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */; + Info.eras = function eras(length, _temp9) { + if (length === void 0) { + length = "short"; + } + var _ref9 = _temp9 === void 0 ? {} : _temp9, + _ref9$locale = _ref9.locale, + locale = _ref9$locale === void 0 ? null : _ref9$locale; + return Locale.create(locale, null, "gregory").eras(length); + } + + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale + * @example Info.features() //=> { relative: false, localeWeek: true } + * @return {Object} + */; + Info.features = function features() { + return { + relative: hasRelative(), + localeWeek: hasLocaleWeekInfo() + }; + }; + return Info; + }(); + + function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); + } + function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["quarters", function (a, b) { + return b.quarter - a.quarter + (b.year - a.year) * 4; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var earlier = cursor; + var lowestOrder, highWater; + + /* This loop tries to diff using larger units first. + If we overshoot, we backtrack and try the next smaller unit. + "cursor" starts out at the earlier timestamp and moves closer and closer to "later" + as we use smaller and smaller units. + highWater keeps track of where we would be if we added one more of the smallest unit, + this is used later to potentially convert any difference smaller than the smallest higher order unit + into a fraction of that smallest higher order unit + */ + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + if (highWater > later) { + // we overshot the end point, backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + + // if we are still overshooting now, we need to backtrack again + // this happens in certain situations when diffing times in different zones, + // because this calculation ignores time zones + if (cursor > later) { + // keep the "overshot by 1" around as highWater + highWater = cursor; + // backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + return [cursor, results, highWater, lowestOrder]; + } + function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus; + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[lowestOrder] = 1, _cursor$plus)); + } + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + var duration = Duration.fromObject(results, opts); + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } + } + + var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; + } + var NBSP = String.fromCharCode(160); + var spaceOrNBSP = "[ " + NBSP + "]"; + var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); + } + function stripInsensitivities(s) { + return s.replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); + } + function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } + } + function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; + } + function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; + } + function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + } + + /** + * @param token + * @param {Locale} loc + */ + function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + // years + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + // months + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + // dates + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + // ordinals + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + // time + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + // meridiem + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + // weekdays + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + // offset/zone + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + // this special-case "token" represents a place where a macro-token expanded into a white-space literal + // in this case we accept any non-newline white-space + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; + } + var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh" + }, + hour24: { + numeric: "H", + "2-digit": "HH" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ" + } + }; + function tokenForPart(part, formatOpts, resolvedOpts) { + var type = part.type, + value = part.value; + if (type === "literal") { + var isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value + }; + } + var style = formatOpts[type]; + + // The user might have explicitly specified hour12 or hourCycle + // if so, respect their decision + // if not, refer back to the resolvedOpts, which are based on the locale + var actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + // tokens only differentiate between 24 hours or not, + // so we do not need to check hourCycle here, which is less supported anyways + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + var val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + if (val) { + return { + literal: false, + val: val + }; + } + return undefined; + } + function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; + } + function match(input, regex, handlers) { + var matches = input.match(regex); + if (matches) { + var all = {}; + var matchIndex = 1; + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } + } + function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + var zone = null; + var specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + if (f) { + r[f] = matches[k]; + } + return r; + }, {}); + return [vals, zone, specificOffset]; + } + var dummyDateTimeCache = null; + function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + return dummyDateTimeCache; + } + function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + var tokens = formatOptsToTokens(formatOpts, locale); + if (tokens == null || tokens.includes(undefined)) { + return token; + } + return tokens; + } + function expandMacroTokens(tokens, locale) { + var _Array$prototype; + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); + } + + /** + * @private + */ + + var TokenParser = /*#__PURE__*/function () { + function TokenParser(locale, format) { + this.locale = locale; + this.format = format; + this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale); + this.units = this.tokens.map(function (t) { + return unitForToken(t, locale); + }); + this.disqualifyingUnit = this.units.find(function (t) { + return t.invalidReason; + }); + if (!this.disqualifyingUnit) { + var _buildRegex = buildRegex(this.units), + regexString = _buildRegex[0], + handlers = _buildRegex[1]; + this.regex = RegExp(regexString, "i"); + this.handlers = handlers; + } + } + var _proto = TokenParser.prototype; + _proto.explainFromTokens = function explainFromTokens(input) { + if (!this.isValid) { + return { + input: input, + tokens: this.tokens, + invalidReason: this.invalidReason + }; + } else { + var _match = match(input, this.regex, this.handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null, undefined], + result = _ref6[0], + zone = _ref6[1], + specificOffset = _ref6[2]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + return { + input: input, + tokens: this.tokens, + regex: this.regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone, + specificOffset: specificOffset + }; + } + }; + _createClass(TokenParser, [{ + key: "isValid", + get: function get() { + return !this.disqualifyingUnit; + } + }, { + key: "invalidReason", + get: function get() { + return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null; + } + }]); + return TokenParser; + }(); + function explainFromTokens(locale, input, format) { + var parser = new TokenParser(locale, format); + return parser.explainFromTokens(input); + } + function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + specificOffset = _explainFromTokens.specificOffset, + invalidReason = _explainFromTokens.invalidReason; + return [result, zone, specificOffset, invalidReason]; + } + function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + var formatter = Formatter.create(locale, formatOpts); + var df = formatter.dtFormatter(getDummyDateTime()); + var parts = df.formatToParts(); + var resolvedOpts = df.resolvedOptions(); + return parts.map(function (p) { + return tokenForPart(p, formatOpts, resolvedOpts); + }); + } + + var INVALID = "Invalid DateTime"; + var MAX_DATE = 8.64e15; + function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); + } + + // we cache week data on the DT object and this intermediates the cache + /** + * @param {DateTime} dt + */ + function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; + } + + /** + * @param {DateTime} dt + */ + function possiblyCachedLocalWeekData(dt) { + if (dt.localWeekData === null) { + dt.localWeekData = gregorianToWeek(dt.c, dt.loc.getMinDaysInFirstWeek(), dt.loc.getStartOfWeek()); + } + return dt.localWeekData; + } + + // clone really means, "make a new object with these modifications". all "setters" really use this + // to create a new object while only changing some of the properties + function clone(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(_extends({}, current, alts, { + old: current + })); + } + + // find the right offset a given local time. The o input is our guess, which determines which + // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; + + // Test whether the zone matches the offset for this ts + var o2 = tz.offset(utcGuess); + + // If so, offset didn't change and we're done + if (o === o2) { + return [utcGuess, o]; + } + + // If not, change the ts by the difference in the offset + utcGuess -= (o2 - o) * 60 * 1000; + + // If that gives us the local time we want, we're done + var o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + + // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; + } + + // convert an epoch timestamp into a calendar object with the given offset + function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; + } + + // convert a calendar object to a epoch timestamp + function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); + } + + // create a new DT instance by adding a duration, adjusting for DSTs + function adjustTime(inst, dur) { + var oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = _extends({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }), + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + if (millisToAdd !== 0) { + ts += millisToAdd; + // that could have changed the offset by going over a DST, but we want to keep the ts the same + o = inst.zone.offset(ts); + } + return { + ts: ts, + o: o + }; + } + + // helper useful in turning the results of parsing into real dates + // by handling the zone options + function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + var setZone = opts.setZone, + zone = opts.zone; + if (parsed && Object.keys(parsed).length !== 0 || parsedZone) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, _extends({}, opts, { + zone: interpretationZone, + specificOffset: specificOffset + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } + } + + // if you want to output a technical format (e.g. RFC 2822), this helper + // helps handle the details + function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; + } + function _toISODate(o, extended, precision) { + var longFormat = o.c.year > 9999 || o.c.year < 0; + var c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + if (precision === "year") return c; + if (extended) { + c += "-"; + c += padStart(o.c.month); + if (precision === "month") return c; + c += "-"; + } else { + c += padStart(o.c.month); + if (precision === "month") return c; + } + c += padStart(o.c.day); + return c; + } + function _toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision) { + var showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0, + c = ""; + switch (precision) { + case "day": + case "month": + case "year": + break; + default: + c += padStart(o.c.hour); + if (precision === "hour") break; + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += ":"; + c += padStart(o.c.second); + } + } else { + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += padStart(o.c.second); + } + } + if (precision === "second") break; + if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; + } + + // defaults for unspecified units in the supported calendars + var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + + // Units in the supported calendars, sorted by bigness + var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + + // standardize case and plurality in units + function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + function normalizeUnitWithLocalWeeks(unit) { + switch (unit.toLowerCase()) { + case "localweekday": + case "localweekdays": + return "localWeekday"; + case "localweeknumber": + case "localweeknumbers": + return "localWeekNumber"; + case "localweekyear": + case "localweekyears": + return "localWeekYear"; + default: + return normalizeUnit(unit); + } + } + + // cache offsets for zones based on the current timestamp when this function is + // first called. When we are handling a datetime from components like (year, + // month, day, hour) in a time zone, we need a guess about what the timezone + // offset is so that we can convert into a UTC timestamp. One way is to find the + // offset of now in the zone. The actual date may have a different offset (for + // example, if we handle a date in June while we're in December in a zone that + // observes DST), but we can check and adjust that. + // + // When handling many dates, calculating the offset for now every time is + // expensive. It's just a guess, so we can cache the offset to use even if we + // are right on a time change boundary (we'll just correct in the other + // direction). Using a timestamp from first read is a slight optimization for + // handling dates close to the current date, since those dates will usually be + // in the same offset (we could set the timestamp statically, instead). We use a + // single timestamp for all zones to make things a bit more predictable. + // + // This is safe for quickDT (used by local() and utc()) because we don't fill in + // higher-order units from tsNow (as we do in fromObject, this requires that + // offset is calculated from tsNow). + /** + * @param {Zone} zone + * @return {number} + */ + function guessOffsetForZone(zone) { + if (zoneOffsetTs === undefined) { + zoneOffsetTs = Settings.now(); + } + + // Do not cache anything but IANA zones, because it is not safe to do so. + // Guessing an offset which is not present in the zone can cause wrong results from fixOffset + if (zone.type !== "iana") { + return zone.offset(zoneOffsetTs); + } + var zoneName = zone.name; + var offsetGuess = zoneOffsetGuessCache.get(zoneName); + if (offsetGuess === undefined) { + offsetGuess = zone.offset(zoneOffsetTs); + zoneOffsetGuessCache.set(zoneName, offsetGuess); + } + return offsetGuess; + } + + // this is a dumbed down version of fromObject() that runs about 60% faster + // but doesn't do any validation, makes a bunch of assumptions about what units + // are present, and so on. + function quickDT(obj, opts) { + var zone = normalizeZone(opts.zone, Settings.defaultZone); + if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } + var loc = Locale.fromObject(opts); + var ts, o; + + // assume we have the higher-order units + if (!isUndefined(obj.year)) { + for (var _i = 0, _orderedUnits = orderedUnits; _i < _orderedUnits.length; _i++) { + var u = _orderedUnits[_i]; + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + var offsetProvis = guessOffsetForZone(zone); + var _objToTS = objToTS(obj, offsetProvis, zone); + ts = _objToTS[0]; + o = _objToTS[1]; + } else { + ts = Settings.now(); + } + return new DateTime({ + ts: ts, + zone: zone, + loc: loc, + o: o + }); + } + function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + rounding = isUndefined(opts.rounding) ? "trunc" : opts.rounding, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? "round" : rounding); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + for (var _iterator = _createForOfIteratorHelperLoose(opts.units), _step; !(_step = _iterator()).done;) { + var unit = _step.value; + var count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); + } + function lastOpts(argList) { + var opts = {}, + args; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + return [opts, args]; + } + + /** + * Timestamp to use for cached zone offset guesses (exposed for test) + */ + var zoneOffsetTs; + /** + * Cache for zone offset guesses (exposed for test). + * + * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of + * zone.offset(). + */ + var zoneOffsetGuessCache = new Map(); + + /** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ + var DateTime = /*#__PURE__*/function (_Symbol$for) { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + if (unchanged) { + var _ref = [config.old.c, config.old.o]; + c = _ref[0]; + o = _ref[1]; + } else { + // If an offset has been passed and we have not been called from + // clone(), we can trust it and avoid the offset calculation. + var ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + + /** + * @access private + */ + this._zone = zone; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.invalid = invalid; + /** + * @access private + */ + this.weekData = null; + /** + * @access private + */ + this.localWeekData = null; + /** + * @access private + */ + this.c = c; + /** + * @access private + */ + this.o = o; + /** + * @access private + */ + this.isLuxonDateTime = true; + } + + // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + DateTime.now = function now() { + return new DateTime({}); + } + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */; + DateTime.local = function local() { + var _lastOpts = lastOpts(arguments), + opts = _lastOpts[0], + args = _lastOpts[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */; + DateTime.utc = function utc() { + var _lastOpts2 = lastOpts(arguments), + opts = _lastOpts2[0], + args = _lastOpts2[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */; + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + var ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.localWeekYear - a week year, according to the locale + * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale + * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system\'s locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: "en-US" }).toISODate() //=> '2021-12-26' + * @return {DateTime} + */; + DateTime.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + obj = obj || {}; + var zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + var loc = Locale.fromObject(opts); + var normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks); + var _usesLocalWeekValues = usesLocalWeekValues(normalized, loc), + minDaysInFirstWeek = _usesLocalWeekValues.minDaysInFirstWeek, + startOfWeek = _usesLocalWeekValues.startOfWeek; + var tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; + + // configure ourselves to deal with gregorian dates or week stuff + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + + // set default values for missing stuff + var foundFirst = false; + for (var _iterator2 = _createForOfIteratorHelperLoose(units), _step2; !(_step2 = _iterator2()).done;) { + var u = _step2.value; + var v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + + // make sure the values we have are in range + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + if (invalid) { + return DateTime.invalid(invalid); + } + + // compute the actual time + var gregorian = useWeekData ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); + + // gregorian data + weekday serves only to validate + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + if (!inst.isValid) { + return DateTime.invalid(inst.invalid); + } + return inst; + } + + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */; + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */; + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */; + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + specificOffset = _parseFromTokens[2], + invalid = _parseFromTokens[3]; + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text, specificOffset); + } + } + + /** + * @deprecated use fromFormat instead + */; + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + return DateTime.fromFormat(text, fmt, opts); + } + + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */; + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent. + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */; + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } + + /** + * Produce the format string for a set of options + * @param formatOpts + * @param localeOpts + * @returns {string} + */; + DateTime.parseFormatForOpts = function parseFormatForOpts(formatOpts, localeOpts) { + if (localeOpts === void 0) { + localeOpts = {}; + } + var tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map(function (t) { + return t ? t.val : null; + }).join(""); + } + + /** + * Produce the the fully expanded format token for the locale + * Does NOT quote characters, so quoted tokens will not round trip correctly + * @param fmt + * @param localeOpts + * @returns {string} + */; + DateTime.expandFormat = function expandFormat(fmt, localeOpts) { + if (localeOpts === void 0) { + localeOpts = {}; + } + var expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map(function (t) { + return t.val; + }).join(""); + }; + DateTime.resetCache = function resetCache() { + zoneOffsetTs = undefined; + zoneOffsetGuessCache.clear(); + } + + // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */; + var _proto = DateTime.prototype; + _proto.get = function get(unit) { + return this[unit]; + } + + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */; + /** + * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC + * in this DateTime's zone. During DST changes local time can be ambiguous, for example + * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`. + * This method will return both possible DateTimes if this DateTime's local time is ambiguous. + * @returns {DateTime[]} + */ + _proto.getPossibleOffsets = function getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + var dayMs = 86400000; + var minuteMs = 60000; + var localTS = objToLocalTS(this.c); + var oEarlier = this.zone.offset(localTS - dayMs); + var oLater = this.zone.offset(localTS + dayMs); + var o1 = this.zone.offset(localTS - oEarlier * minuteMs); + var o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + var ts1 = localTS - o1 * minuteMs; + var ts2 = localTS - o2 * minuteMs; + var c1 = tsToObj(ts1, o1); + var c2 = tsToObj(ts2, o2); + if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) { + return [clone(this, { + ts: ts1 + }), clone(this, { + ts: ts2 + })]; + } + return [this]; + } + + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */; + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOptions = function resolvedLocaleOptions(opts) { + if (opts === void 0) { + opts = {}; + } + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } + + // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */; + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + if (opts === void 0) { + opts = {}; + } + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */; + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */; + _proto.setZone = function setZone(zone, _temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + _ref2$keepLocalTime = _ref2.keepLocalTime, + keepLocalTime = _ref2$keepLocalTime === void 0 ? false : _ref2$keepLocalTime, + _ref2$keepCalendarTim = _ref2.keepCalendarTime, + keepCalendarTime = _ref2$keepCalendarTim === void 0 ? false : _ref2$keepCalendarTim; + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + newTS = _objToTS3[0]; + } + return clone(this, { + ts: newTS, + zone: zone + }); + } + } + + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */; + _proto.reconfigure = function reconfigure(_temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + locale = _ref3.locale, + numberingSystem = _ref3.numberingSystem, + outputCalendar = _ref3.outputCalendar; + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone(this, { + loc: loc + }); + } + + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */; + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * + * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`. + * They cannot be mixed with ISO-week units like `weekday`. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */; + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnitWithLocalWeeks); + var _usesLocalWeekValues2 = usesLocalWeekValues(normalized, this.loc), + minDaysInFirstWeek = _usesLocalWeekValues2.minDaysInFirstWeek, + startOfWeek = _usesLocalWeekValues2.startOfWeek; + var settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + var mixed; + if (settingWeekStuff) { + mixed = weekToGregorian(_extends({}, gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), normalized), minDaysInFirstWeek, startOfWeek); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(_extends({}, gregorianToOrdinal(this.c), normalized)); + } else { + mixed = _extends({}, this.toObject(), normalized); + + // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + return clone(this, { + ts: ts, + o: o + }); + } + + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */; + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */; + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */; + _proto.startOf = function startOf(unit, _temp3) { + var _ref4 = _temp3 === void 0 ? {} : _temp3, + _ref4$useLocaleWeeks = _ref4.useLocaleWeeks, + useLocaleWeeks = _ref4$useLocaleWeeks === void 0 ? false : _ref4$useLocaleWeeks; + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + case "quarters": + case "months": + o.day = 1; + // falls through + case "weeks": + case "days": + o.hour = 0; + // falls through + case "hours": + o.minute = 0; + // falls through + case "minutes": + o.second = 0; + // falls through + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + if (useLocaleWeeks) { + var startOfWeek = this.loc.getStartOfWeek(); + var weekday = this.weekday; + if (weekday < startOfWeek) { + o.weekNumber = this.weekNumber - 1; + } + o.weekday = startOfWeek; + } else { + o.weekday = 1; + } + } + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + return this.set(o); + } + + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */; + _proto.endOf = function endOf(unit, opts) { + var _this$plus; + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit, opts).minus(1) : this; + } + + // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */; + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */; + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */; + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=false] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z' + * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z' + * @return {string|null} + */; + _proto.toISO = function toISO(_temp4) { + var _ref5 = _temp4 === void 0 ? {} : _temp4, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format, + _ref5$suppressSeconds = _ref5.suppressSeconds, + suppressSeconds = _ref5$suppressSeconds === void 0 ? false : _ref5$suppressSeconds, + _ref5$suppressMillise = _ref5.suppressMilliseconds, + suppressMilliseconds = _ref5$suppressMillise === void 0 ? false : _ref5$suppressMillise, + _ref5$includeOffset = _ref5.includeOffset, + includeOffset = _ref5$includeOffset === void 0 ? true : _ref5$includeOffset, + _ref5$extendedZone = _ref5.extendedZone, + extendedZone = _ref5$extendedZone === void 0 ? false : _ref5$extendedZone, + _ref5$precision = _ref5.precision, + precision = _ref5$precision === void 0 ? "milliseconds" : _ref5$precision; + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + var ext = format === "extended"; + var c = _toISODate(this, ext, precision); + if (orderedUnits.indexOf(precision) >= 3) c += "T"; + c += _toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + return c; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'. + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05' + * @return {string|null} + */; + _proto.toISODate = function toISODate(_temp5) { + var _ref6 = _temp5 === void 0 ? {} : _temp5, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format, + _ref6$precision = _ref6.precision, + precision = _ref6$precision === void 0 ? "day" : _ref6$precision; + if (!this.isValid) { + return null; + } + return _toISODate(this, format === "extended", normalizeUnit(precision)); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */; + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z' + * @return {string} + */; + _proto.toISOTime = function toISOTime(_temp6) { + var _ref7 = _temp6 === void 0 ? {} : _temp6, + _ref7$suppressMillise = _ref7.suppressMilliseconds, + suppressMilliseconds = _ref7$suppressMillise === void 0 ? false : _ref7$suppressMillise, + _ref7$suppressSeconds = _ref7.suppressSeconds, + suppressSeconds = _ref7$suppressSeconds === void 0 ? false : _ref7$suppressSeconds, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includePrefix = _ref7.includePrefix, + includePrefix = _ref7$includePrefix === void 0 ? false : _ref7$includePrefix, + _ref7$extendedZone = _ref7.extendedZone, + extendedZone = _ref7$extendedZone === void 0 ? false : _ref7$extendedZone, + _ref7$format = _ref7.format, + format = _ref7$format === void 0 ? "extended" : _ref7$format, + _ref7$precision = _ref7.precision, + precision = _ref7$precision === void 0 ? "milliseconds" : _ref7$precision; + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + var c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? "T" : ""; + return c + _toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + } + + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */; + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */; + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string|null} + */; + _proto.toSQLDate = function toSQLDate() { + if (!this.isValid) { + return null; + } + return _toISODate(this, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */; + _proto.toSQLTime = function toSQLTime(_temp7) { + var _ref8 = _temp7 === void 0 ? {} : _temp7, + _ref8$includeOffset = _ref8.includeOffset, + includeOffset = _ref8$includeOffset === void 0 ? true : _ref8$includeOffset, + _ref8$includeZone = _ref8.includeZone, + includeZone = _ref8$includeZone === void 0 ? false : _ref8$includeZone, + _ref8$includeOffsetSp = _ref8.includeOffsetSpace, + includeOffsetSpace = _ref8$includeOffsetSp === void 0 ? true : _ref8$includeOffsetSp; + var fmt = "HH:mm:ss.SSS"; + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + return toTechFormat(this, fmt, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */; + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) { + return null; + } + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */; + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID; + } + + /** + * Returns a string representation of this DateTime appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "DateTime { ts: " + this.toISO() + ", zone: " + this.zone.name + ", locale: " + this.locale + " }"; + } else { + return "DateTime { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */; + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */; + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + + /** + * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime. + * @return {number} + */; + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */; + _proto.toUnixInteger = function toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */; + _proto.toJSON = function toJSON() { + return this.toISO(); + } + + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */; + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */; + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return {}; + var base = _extends({}, this.c); + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */; + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + + // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */; + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (opts === void 0) { + opts = {}; + } + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + var durOpts = _extends({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + return otherIsLater ? diffed.negate() : diffed; + } + + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */; + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (opts === void 0) { + opts = {}; + } + return this.diff(DateTime.now(), unit, opts); + } + + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval|DateTime} + */; + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */; + _proto.hasSame = function hasSame(otherDateTime, unit, opts) { + if (!this.isValid) return false; + var inputMs = otherDateTime.valueOf(); + var adjustedToZone = this.setZone(otherDateTime.zone, { + keepLocalTime: true + }); + return adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts); + } + + /** + * Equality check + * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */; + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {string} [options.rounding="trunc"] - rounding method to use when rounding the numbers in the output. Can be "trunc" (toward zero), "expand" (away from zero), "round", "floor", or "ceil". + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */; + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({}, { + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + var units = ["years", "months", "days", "hours", "minutes", "seconds"]; + var unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + return diffRelative(base, this.plus(padding), _extends({}, options, { + numeric: "always", + units: units, + unit: unit + })); + } + + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */; + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({}, { + zone: this.zone + }), this, _extends({}, options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */; + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */; + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } + + // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */; + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + + /** + * @deprecated use fromFormatExplain instead + */; + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + return DateTime.fromFormatExplain(text, fmt, options); + } + + /** + * Build a parser for `fmt` using the given locale. This parser can be passed + * to {@link DateTime.fromFormatParser} to a parse a date in this format. This + * can be used to optimize cases where many dates need to be parsed in a + * specific format. + * + * @param {String} fmt - the format the string is expected to be in (see + * description) + * @param {Object} options - options used to set locale and numberingSystem + * for parser + * @returns {TokenParser} - opaque object to be used + */; + DateTime.buildFormatParser = function buildFormatParser(fmt, options) { + if (options === void 0) { + options = {}; + } + var _options2 = options, + _options2$locale = _options2.locale, + locale = _options2$locale === void 0 ? null : _options2$locale, + _options2$numberingSy = _options2.numberingSystem, + numberingSystem = _options2$numberingSy === void 0 ? null : _options2$numberingSy, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return new TokenParser(localeToUse, fmt); + } + + /** + * Create a DateTime from an input string and format parser. + * + * The format parser must have been created with the same locale as this call. + * + * @param {String} text - the string to parse + * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser} + * @param {Object} opts - options taken by fromFormat() + * @returns {DateTime} + */; + DateTime.fromFormatParser = function fromFormatParser(text, formatParser, opts) { + if (opts === void 0) { + opts = {}; + } + if (isUndefined(text) || isUndefined(formatParser)) { + throw new InvalidArgumentError("fromFormatParser requires an input string and a format parser"); + } + var _opts2 = opts, + _opts2$locale = _opts2.locale, + locale = _opts2$locale === void 0 ? null : _opts2$locale, + _opts2$numberingSyste = _opts2.numberingSystem, + numberingSystem = _opts2$numberingSyste === void 0 ? null : _opts2$numberingSyste, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + if (!localeToUse.equals(formatParser.locale)) { + throw new InvalidArgumentError("fromFormatParser called with a locale of " + localeToUse + ", " + ("but the format parser was created for " + formatParser.locale)); + } + var _formatParser$explain = formatParser.explainFromTokens(text), + result = _formatParser$explain.result, + zone = _formatParser$explain.zone, + specificOffset = _formatParser$explain.specificOffset, + invalidReason = _formatParser$explain.invalidReason; + if (invalidReason) { + return DateTime.invalid(invalidReason); + } else { + return parseDataToDateTime(result, zone, opts, "format " + formatParser.format, text, specificOffset); + } + } + + // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */; + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + }, { + key: "zone", + get: function get() { + return this._zone; + } + + /** + * Get the name of the time zone. + * @type {string} + */ + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + + /** + * Returns true if this date is on a weekend according to the locale, false otherwise + * @returns {boolean} + */ + }, { + key: "isWeekend", + get: function get() { + return this.isValid && this.loc.getWeekendDays().includes(this.weekday); + } + + /** + * Get the day of the week according to the locale. + * 1 is the first day of the week and 7 is the last day of the week. + * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1, + * @returns {number} + */ + }, { + key: "localWeekday", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN; + } + + /** + * Get the week number of the week year according to the locale. Different locales assign week numbers differently, + * because the week can start on different days of the week (see localWeekday) and because a different number of days + * is required for a week to count as the first week of a year. + * @returns {number} + */ + }, { + key: "localWeekNumber", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN; + } + + /** + * Get the week year according to the locale. Different locales assign week numbers (and therefor week years) + * differently, see localWeekNumber. + * @returns {number} + */ + }, { + key: "localWeekYear", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN; + } + + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.isUniversal : null; + } + + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1, + day: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's local week year + * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52 + * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53 + * @type {number} + */ + }, { + key: "weeksInLocalWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.localWeekYear, this.loc.getMinDaysInFirstWeek(), this.loc.getStartOfWeek()) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_MED_WITH_WEEKDAY", + get: function get() { + return DATE_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + return DateTime; + }(Symbol.for("nodejs.util.inspect.custom")); + function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } + } + + var VERSION = "3.7.2"; + + exports.DateTime = DateTime; + exports.Duration = Duration; + exports.FixedOffsetZone = FixedOffsetZone; + exports.IANAZone = IANAZone; + exports.Info = Info; + exports.Interval = Interval; + exports.InvalidZone = InvalidZone; + exports.Settings = Settings; + exports.SystemZone = SystemZone; + exports.VERSION = VERSION; + exports.Zone = Zone; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=luxon.js.map diff --git a/node_modules/luxon/build/amd/luxon.js.map b/node_modules/luxon/build/amd/luxon.js.map new file mode 100644 index 00000000..30cf2260 --- /dev/null +++ b/node_modules/luxon/build/amd/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/zone.js","../../src/zones/systemZone.js","../../src/zones/IANAZone.js","../../src/impl/locale.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/impl/digits.js","../../src/settings.js","../../src/impl/invalid.js","../../src/impl/conversions.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/tokenParser.js","../../src/datetime.js","../../src/luxon.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n let dtf = dtfCache.get(zoneName);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zoneName,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n dtfCache.set(zoneName, dtf);\n }\n return dtf;\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n let zone = ianaZoneCache.get(name);\n if (zone === undefined) {\n ianaZoneCache.set(name, (zone = new IANAZone(name)));\n }\n return zone;\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache.clear();\n dtfCache.clear();\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n if (!this.valid) return NaN;\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache.get(key);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache.set(key, dtf);\n }\n return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache.get(key);\n if (inf === undefined) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache.set(key, inf);\n }\n return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache.get(key);\n if (inf === undefined) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache.set(key, inf);\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n let opts = intlResolvedOptionsCache.get(locString);\n if (opts === undefined) {\n opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n intlResolvedOptionsCache.set(locString, opts);\n }\n return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache.get(locString);\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n if (!(\"minimalDays\" in data)) {\n data = { ...fallbackWeekSettings, ...data };\n }\n weekInfoCache.set(locString, data);\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache.clear();\n intlNumCache.clear();\n intlRelCache.clear();\n intlResolvedOptionsCache.clear();\n weekInfoCache.clear();\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n // As such, just use format() instead of formatToParts() and take the whole string\n const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n format &= !monthSpecialCase;\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n const mapper = !monthSpecialCase\n ? (dt) => this.extract(dt, intl, \"month\")\n : (dt) => this.dtFormatter(dt, intl).format();\n this.monthsCache[formatStr][length] = mapMonths(mapper);\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n let appendCache = digitRegexCache.get(ns);\n if (appendCache === undefined) {\n appendCache = new Map();\n digitRegexCache.set(ns, appendCache);\n }\n let regex = appendCache.get(append);\n if (regex === undefined) {\n regex = new RegExp(`${numberingSystems[ns]}${append}`);\n appendCache.set(append, regex);\n }\n\n return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n const factor = 10 ** digits;\n switch (rounding) {\n case \"expand\":\n return number > 0\n ? Math.ceil(number * factor) / factor\n : Math.floor(number * factor) / factor;\n case \"trunc\":\n return Math.trunc(number * factor) / factor;\n case \"round\":\n return Math.round(number * factor) / factor;\n case \"floor\":\n return Math.floor(number * factor) / factor;\n case \"ceil\":\n return Math.ceil(number * factor) / factor;\n default:\n throw new RangeError(`Value rounding ${rounding} is out of range`);\n }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n // turn '' into a literal signal quote instead of just skipping the empty literal\n if (currentFull.length > 0 || bracketed) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull === \"\" ? \"'\" : currentFull,\n });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0, signDisplay = undefined) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n if (signDisplay) {\n opts.signDisplay = signDisplay;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"milliseconds\";\n case \"s\":\n return \"seconds\";\n case \"m\":\n return \"minutes\";\n case \"h\":\n return \"hours\";\n case \"d\":\n return \"days\";\n case \"w\":\n return \"weeks\";\n case \"M\":\n return \"months\";\n case \"y\":\n return \"years\";\n default:\n return null;\n }\n },\n tokenToString = (lildur, info) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n const inversionFactor =\n info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n let signDisplay;\n if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n signDisplay = \"never\";\n } else if (this.opts.signMode === \"all\") {\n signDisplay = \"always\";\n } else {\n // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n signDisplay = \"auto\";\n }\n return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n durationInfo = {\n isNegativeDuration: collapsed < 0,\n // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n // in order\n largestUnit: Object.keys(collapsed.values)[0],\n };\n return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n * @example\n * ```js\n * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const showZeros = opts.showZeros !== false;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val) || (val === 0 && !showZeros)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Removes all units with values equal to 0 from this Duration.\n * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n * @return {Duration}\n */\n removeZeros() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.values);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval. This is the first instant which is not part of the interval\n * (Interval is half-open).\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns the last DateTime included in the interval (since end is not part of the interval)\n * @type {DateTime}\n */\n get lastDateTime() {\n return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into an equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n * and ending with the latest.\n *\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended, precision) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (precision === \"year\") return c;\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n c += \"-\";\n } else {\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n }\n c += padStart(o.c.day);\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n) {\n let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n c = \"\";\n switch (precision) {\n case \"day\":\n case \"month\":\n case \"year\":\n break;\n default:\n c += padStart(o.c.hour);\n if (precision === \"hour\") break;\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += \":\";\n c += padStart(o.c.second);\n }\n } else {\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += padStart(o.c.second);\n }\n }\n if (precision === \"second\") break;\n if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n // Do not cache anything but IANA zones, because it is not safe to do so.\n // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n if (zone.type !== \"iana\") {\n return zone.offset(zoneOffsetTs);\n }\n const zoneName = zone.name;\n let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n if (offsetGuess === undefined) {\n offsetGuess = zone.offset(zoneOffsetTs);\n zoneOffsetGuessCache.set(zoneName, offsetGuess);\n }\n return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache.clear();\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n * @return {string|null}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext, precision);\n if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n c += toISOTime(\n this,\n ext,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n );\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n * @return {string|null}\n */\n toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\", normalizeUnit(precision));\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string|null}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval|DateTime}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n"],"names":["LuxonError","_Error","_inheritsLoose","apply","arguments","_wrapNativeSuper","Error","InvalidDateTimeError","_LuxonError","reason","call","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","unit","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","_proto","prototype","offsetName","ts","opts","formatOffset","format","offset","equals","otherZone","_createClass","key","get","name","singleton","SystemZone","_Zone","_ref","locale","parseZoneInfo","Date","getTimezoneOffset","type","Intl","DateTimeFormat","resolvedOptions","timeZone","dtfCache","Map","makeDTF","zoneName","dtf","undefined","hour12","era","set","typeToPos","hackyOffset","date","formatted","replace","parsed","exec","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","formatToParts","filled","i","length","_formatted$i","value","pos","isUndefined","parseInt","ianaZoneCache","IANAZone","create","zone","resetCache","clear","isValidSpecifier","isValidZone","e","_this","valid","NaN","isNaN","_ref2","adOrBc","Math","abs","adjustedHour","asUTC","objToLocalTS","millisecond","asTS","over","intlLFCache","getCachedLF","locString","JSON","stringify","ListFormat","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","NumberFormat","intlRelCache","getCachedRTF","_opts","base","cacheKeyOpts","_objectWithoutPropertiesLoose","_excluded","RelativeTimeFormat","sysLocaleCache","systemLocale","intlResolvedOptionsCache","getCachedIntResolvedOptions","weekInfoCache","getCachedWeekInfo","data","Locale","getWeekInfo","weekInfo","_extends","fallbackWeekSettings","parseLocaleString","localeStr","xIndex","indexOf","substring","uIndex","options","selectedStr","smaller","_options","numberingSystem","calendar","intlConfigString","outputCalendar","includes","mapMonths","f","ms","dt","DateTime","utc","push","mapWeekdays","listStuff","loc","englishFn","intlFn","mode","listingMode","supportsFastNumbers","startsWith","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","_excluded2","Object","keys","intlOpts","useGrouping","minimumIntegerDigits","fixed","roundTo","padStart","PolyDateFormatter","originalZone","z","gmtOffset","offsetZ","setZone","plus","minutes","_proto2","map","join","toJSDate","parts","part","PolyRelFormatter","isEnglish","style","hasRelative","rtf","_proto3","count","English","numeric","firstDay","minimalDays","weekend","fromOpts","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","_temp","numbering","_parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","_proto4","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","months","_this2","monthSpecialCase","formatStr","mapper","extract","dtFormatter","weekdays","_this3","meridiems","_this4","eras","_this5","field","df","results","matching","find","m","toLowerCase","numberFormatter","fastNumbers","relFormatter","listFormatter","getWeekSettings","hasLocaleWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","toString","FixedOffsetZone","instance","utcInstance","parseSpecifier","r","match","signedOffset","InvalidZone","normalizeZone","input","defaultZone","isString","lowered","isNumber","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","split","parseDigits","str","code","charCodeAt","search","_numberingSystemsUTF","min","max","digitRegexCache","resetDigitRegexCache","digitRegex","append","ns","appendCache","regex","RegExp","now","twoDigitCutoffYear","throwOnInvalid","resetCaches","cutoffYear","t","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","d","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","findIndex","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekNumber","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","usesLocalWeekValues","obj","hasLocaleWeekData","localWeekday","localWeekNumber","localWeekYear","hasIsoWeekData","hasInvalidWeekData","validYear","isInteger","validWeek","integerBetween","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","o","isDate","maybeArray","thing","Array","isArray","bestBy","arr","by","compare","reduce","best","next","pair","pick","a","k","hasOwnProperty","prop","settings","some","v","from","bottom","top","floorMod","x","isNeg","padded","parseInteger","string","parseFloating","parseFloat","parseMillis","fraction","number","digits","rounding","factor","pow","ceil","trunc","round","RangeError","modMonth","modYear","firstWeekOffset","fwdlw","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","Number","offMin","offMinSigned","is","asNumber","numericValue","isFinite","normalizeObject","normalizer","normalized","u","hours","sign","monthsLong","monthsShort","monthsNarrow","concat","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","meridiemForDateTime","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","_iterator","_createForOfIteratorHelperLoose","_step","done","token","literal","val","macroTokenToFormatOpts","D","Formats","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","parseFormat","fmt","current","currentFull","bracketed","c","charAt","test","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","start","formatRange","end","num","p","signDisplay","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","isValid","meridiem","maybeMacro","slice","quarter","formatDurationFromString","dur","invertLargest","signMode","tokenToField","lildur","info","mapped","inversionFactor","isNegativeDuration","largestUnit","tokens","realTokens","found","collapsed","shiftTo","filter","durationInfo","values","ianaRegex","combineRegexes","_len","regexes","_key","full","source","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","_ex","parse","_len3","patterns","_key3","_i","_patterns","_patterns$_i","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","item","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","trim","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","conf","conversionAccuracy","matrix","Duration","durationToMillis","vals","_vals$milliseconds","sum","normalizeValues","reduceRight","previous","previousVal","conv","rollUp","removeZeroes","newVals","_Object$entries","entries","_Object$entries$_i","_Symbol$for","config","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","text","_parseISODuration","fromISOTime","_parseISOTimeOnly","week","toFormat","fmtOpts","toHuman","showZeros","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","dateTime","toJSON","invalidReason","valueOf","duration","_i2","_orderedUnits","minus","negate","mapUnits","fn","_i3","_Object$keys","mixed","reconfigure","as","normalize","rescale","shiftToAll","built","accumulated","lastUnit","_i4","_orderedUnits2","own","ak","negated","_i5","_Object$keys2","removeZeros","eq","v1","v2","_i6","_orderedUnits3","Symbol","for","validateStartEnd","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","_split","startIsValid","endIsValid","isInterval","toDuration","startOf","useLocaleWeeks","diff","hasSame","isEmpty","isAfter","isBefore","contains","splitAt","dateTimes","sorted","sort","b","added","splitBy","idx","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","_intervals$sort$reduc","sofar","final","xor","_Array$prototype","currentCount","ends","time","flattened","difference","toLocaleString","toISODate","dateFormat","_temp2","_ref3","_ref3$separator","separator","mapEndpoints","mapFn","Info","hasDST","proto","isUniversal","isValidIANAZone","_ref$locale","_ref$locObj","locObj","getMinimumDaysInFirstWeek","_ref2$locale","_ref2$locObj","getWeekendWeekdays","_temp3","_ref3$locale","_ref3$locObj","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_ref4$locObj","_ref4$outputCalendar","monthsFormat","_temp5","_ref5","_ref5$locale","_ref5$numberingSystem","_ref5$locObj","_ref5$outputCalendar","_temp6","_ref6","_ref6$locale","_ref6$numberingSystem","_ref6$locObj","weekdaysFormat","_temp7","_ref7","_ref7$locale","_ref7$numberingSystem","_ref7$locObj","_temp8","_ref8","_ref8$locale","_temp9","_ref9","_ref9$locale","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highOrderDiffs","differs","lowestOrder","highWater","_differs","_differs$_i","differ","_highOrderDiffs","remainingMillis","lowerOrderUnits","_cursor$plus","_Duration$fromMillis","MISSING_FTP","intUnit","post","deser","NBSP","String","fromCharCode","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","groups","h","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","tokenForPart","resolvedOpts","isSpace","actualType","buildRegex","re","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","specificOffset","Z","q","M","G","y","S","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatOptsToTokens","expandMacroTokens","TokenParser","disqualifyingUnit","_buildRegex","regexString","explainFromTokens","_match","rawMatches","parser","parseFromTokens","_explainFromTokens","formatter","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","precision","longFormat","extendedZone","showSeconds","ianaName","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","normalizeUnitWithLocalWeeks","guessOffsetForZone","zoneOffsetTs","offsetGuess","zoneOffsetGuessCache","quickDT","offsetProvis","_objToTS","diffRelative","calendary","lastOpts","argList","args","unchanged","ot","_zone","isLuxonDateTime","_lastOpts","_lastOpts2","fromJSDate","zoneToUse","fromSeconds","_usesLocalWeekValues","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","_iterator2","_step2","higherOrderInvalid","gregorian","_objToTS2","tsFinal","offsetFinal","_parseISODate","fromRFC2822","_parseRFC2822Date","fromHTTP","_parseHTTPDate","fromFormat","_opts$locale","_opts$numberingSystem","localeToUse","_parseFromTokens","fromString","fromSQL","_parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","expanded","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","resolvedLocaleOptions","_Formatter$create$res","toLocal","_ref2$keepLocalTime","_ref2$keepCalendarTim","keepCalendarTime","newTS","asObj","_objToTS3","setLocale","_usesLocalWeekValues2","settingWeekStuff","_objToTS4","_ref4$useLocaleWeeks","normalizedUnit","endOf","_this$plus","toLocaleParts","_ref5$format","_ref5$suppressSeconds","_ref5$suppressMillise","_ref5$includeOffset","_ref5$extendedZone","_ref5$precision","ext","_ref6$format","_ref6$precision","toISOWeekDate","_ref7$suppressMillise","_ref7$suppressSeconds","_ref7$includeOffset","_ref7$includePrefix","_ref7$extendedZone","_ref7$format","_ref7$precision","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref8$includeOffset","_ref8$includeZone","includeZone","_ref8$includeOffsetSp","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","buildFormatParser","_options2","_options2$locale","_options2$numberingSy","fromFormatParser","formatParser","_opts2","_opts2$locale","_opts2$numberingSyste","_formatParser$explain","dateTimeish","VERSION"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/luxon/build/cjs-browser/luxon.js b/node_modules/luxon/build/cjs-browser/luxon.js new file mode 100644 index 00000000..679b0ee4 --- /dev/null +++ b/node_modules/luxon/build/cjs-browser/luxon.js @@ -0,0 +1,8739 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +function _extends() { + _extends = Object.assign ? Object.assign.bind() : function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; + return _extends.apply(this, arguments); +} +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); +} +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); +} +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } +} +function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct.bind(); + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + return _construct.apply(null, arguments); +} +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + _cache.set(Class, Wrapper); + } + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + return _wrapNativeSuper(Class); +} +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; +} +function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); +} +function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); +} + +// these aren't really private, but nor are they really useful to document +/** + * @private + */ +var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + return LuxonError; +}( /*#__PURE__*/_wrapNativeSuper(Error)); +/** + * @private + */ +var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + return InvalidDateTimeError; +}(LuxonError); + +/** + * @private + */ +var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + return InvalidIntervalError; +}(LuxonError); + +/** + * @private + */ +var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + return InvalidDurationError; +}(LuxonError); + +/** + * @private + */ +var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + return ConflictingSpecificationError; +}(LuxonError); + +/** + * @private + */ +var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + return InvalidUnitError; +}(LuxonError); + +/** + * @private + */ +var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + return InvalidArgumentError; +}(LuxonError); + +/** + * @private + */ +var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + return ZoneIsAbstractError; +}(LuxonError); + +/** + * @private + */ + +var n = "numeric", + s = "short", + l = "long"; +var DATE_SHORT = { + year: n, + month: n, + day: n +}; +var DATE_MED = { + year: n, + month: s, + day: n +}; +var DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s +}; +var DATE_FULL = { + year: n, + month: l, + day: n +}; +var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l +}; +var TIME_SIMPLE = { + hour: n, + minute: n +}; +var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n +}; +var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s +}; +var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l +}; +var TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23" +}; +var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23" +}; +var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s +}; +var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l +}; +var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n +}; +var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n +}; +var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n +}; +var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n +}; +var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n +}; +var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s +}; +var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s +}; +var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l +}; +var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l +}; + +/** + * @interface + */ +var Zone = /*#__PURE__*/function () { + function Zone() {} + var _proto = Zone.prototype; + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */; + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */; + _createClass(Zone, [{ + key: "type", + get: + /** + * The type of zone + * @abstract + * @type {string} + */ + function get() { + throw new ZoneIsAbstractError(); + } + + /** + * The name of this zone. + * @abstract + * @type {string} + */ + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + + /** + * The IANA name of this zone. + * Defaults to `name` if not overwritten by a subclass. + * @abstract + * @type {string} + */ + }, { + key: "ianaName", + get: function get() { + return this.name; + } + + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + }, { + key: "isUniversal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + return Zone; +}(); + +var singleton$1 = null; + +/** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ +var SystemZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(SystemZone, _Zone); + function SystemZone() { + return _Zone.apply(this, arguments) || this; + } + var _proto = SystemZone.prototype; + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + + /** @override **/; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/; + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + + /** @override **/; + _proto.equals = function equals(otherZone) { + return otherZone.type === "system"; + } + + /** @override **/; + _createClass(SystemZone, [{ + key: "type", + get: /** @override **/ + function get() { + return "system"; + } + + /** @override **/ + }, { + key: "name", + get: function get() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + /** @override **/ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + get: + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + function get() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + }]); + return SystemZone; +}(Zone); + +var dtfCache = new Map(); +function makeDTF(zoneName) { + var dtf = dtfCache.get(zoneName); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zoneName, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short" + }); + dtfCache.set(zoneName, dtf); + } + return dtf; +} +var typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6 +}; +function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fadOrBc = parsed[4], + fHour = parsed[5], + fMinute = parsed[6], + fSecond = parsed[7]; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; +} +function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date); + var filled = []; + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value; + var pos = typeToPos[type]; + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; +} +var ianaZoneCache = new Map(); +/** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ +var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + var zone = ianaZoneCache.get(name); + if (zone === undefined) { + ianaZoneCache.set(name, zone = new IANAZone(name)); + } + return zone; + } + + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */; + IANAZone.resetCache = function resetCache() { + ianaZoneCache.clear(); + dtfCache.clear(); + } + + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead. + * @return {boolean} + */; + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return this.isValidZone(s); + } + + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */; + IANAZone.isValidZone = function isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + }; + function IANAZone(name) { + var _this; + _this = _Zone.call(this) || this; + /** @private **/ + _this.zoneName = name; + /** @private **/ + _this.valid = IANAZone.isValidZone(name); + return _this; + } + + /** + * The type of zone. `iana` for all instances of `IANAZone`. + * @override + * @type {string} + */ + var _proto = IANAZone.prototype; + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @override + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @override + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */; + _proto.offset = function offset(ts) { + if (!this.valid) return NaN; + var date = new Date(ts); + if (isNaN(date)) return NaN; + var dtf = makeDTF(this.name); + var _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + adOrBc = _ref2[3], + hour = _ref2[4], + minute = _ref2[5], + second = _ref2[6]; + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + + // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + var adjustedHour = hour === 24 ? 0 : hour; + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: adjustedHour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + + /** + * Return whether this Zone is equal to another zone + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + + /** + * Return whether this Zone is valid. + * @override + * @type {boolean} + */; + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + + /** + * The name of this zone (i.e. the IANA zone name). + * @override + * @type {string} + */ + }, { + key: "name", + get: function get() { + return this.zoneName; + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns false for all IANA zones. + * @override + * @type {boolean} + */ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + return IANAZone; +}(Zone); + +var _excluded = ["base"], + _excluded2 = ["padTo", "floor"]; + +// todo - remap caching + +var intlLFCache = {}; +function getCachedLF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; +} +var intlDTCache = new Map(); +function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache.get(key); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache.set(key, dtf); + } + return dtf; +} +var intlNumCache = new Map(); +function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache.get(key); + if (inf === undefined) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache.set(key, inf); + } + return inf; +} +var intlRelCache = new Map(); +function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var _opts = opts; + _opts.base; + var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, _excluded); // exclude `base` from the options + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache.get(key); + if (inf === undefined) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache.set(key, inf); + } + return inf; +} +var sysLocaleCache = null; +function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } +} +var intlResolvedOptionsCache = new Map(); +function getCachedIntResolvedOptions(locString) { + var opts = intlResolvedOptionsCache.get(locString); + if (opts === undefined) { + opts = new Intl.DateTimeFormat(locString).resolvedOptions(); + intlResolvedOptionsCache.set(locString, opts); + } + return opts; +} +var weekInfoCache = new Map(); +function getCachedWeekInfo(locString) { + var data = weekInfoCache.get(locString); + if (!data) { + var locale = new Intl.Locale(locString); + // browsers currently implement this as a property, but spec says it should be a getter function + data = "getWeekInfo" in locale ? locale.getWeekInfo() : locale.weekInfo; + // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86 + if (!("minimalDays" in data)) { + data = _extends({}, fallbackWeekSettings, data); + } + weekInfoCache.set(locString, data); + } + return data; +} +function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + + // private subtags and unicode subtags have ordering requirements, + // and we're not properly parsing this, so just strip out the + // private ones if they exist. + var xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + var uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + var smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; + return [selectedStr, numberingSystem, calendar]; + } +} +function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + return localeStr; + } else { + return localeStr; + } +} +function mapMonths(f) { + var ms = []; + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; +} +function mapWeekdays(f) { + var ms = []; + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; +} +function listStuff(loc, length, englishFn, intlFn) { + var mode = loc.listingMode(); + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } +} +function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || getCachedIntResolvedOptions(loc.locale).numberingSystem === "latn"; + } +} + +/** + * @private + */ +var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + opts.padTo; + opts.floor; + var otherOpts = _objectWithoutPropertiesLoose(opts, _excluded2); + if (!forceSimple || Object.keys(otherOpts).length > 0) { + var intlOpts = _extends({ + useGrouping: false + }, opts); + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + var _proto = PolyNumberFormatter.prototype; + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(_fixed, this.padTo); + } + }; + return PolyNumberFormatter; +}(); +/** + * @private + */ +var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + this.originalZone = undefined; + var z = undefined; + if (this.opts.timeZone) { + // Don't apply any workarounds if a timeZone is explicitly provided in opts + this.dt = dt; + } else if (dt.zone.type === "fixed") { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + var gmtOffset = -1 * (dt.offset / 60); + var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so + // we manually apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + // Custom zones can have any offset / offsetName so we just manually + // apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + var intlOpts = _extends({}, this.opts); + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + var _proto2 = PolyDateFormatter.prototype; + _proto2.format = function format() { + if (this.originalZone) { + // If we have to substitute in the actual zone name, we have to use + // formatToParts so that the timezone can be replaced. + return this.formatToParts().map(function (_ref) { + var value = _ref.value; + return value; + }).join(""); + } + return this.dtf.format(this.dt.toJSDate()); + }; + _proto2.formatToParts = function formatToParts() { + var _this = this; + var parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map(function (part) { + if (part.type === "timeZoneName") { + var offsetName = _this.originalZone.offsetName(_this.dt.ts, { + locale: _this.dt.locale, + format: _this.opts.timeZoneName + }); + return _extends({}, part, { + value: offsetName + }); + } else { + return part; + } + }); + } + return parts; + }; + _proto2.resolvedOptions = function resolvedOptions() { + return this.dtf.resolvedOptions(); + }; + return PolyDateFormatter; +}(); +/** + * @private + */ +var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = _extends({ + style: "long" + }, opts); + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + var _proto3 = PolyRelFormatter.prototype; + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + return PolyRelFormatter; +}(); +var fallbackWeekSettings = { + firstDay: 1, + minimalDays: 4, + weekend: [6, 7] +}; + +/** + * @private + */ +var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.weekSettings, opts.defaultToEN); + }; + Locale.create = function create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + var specifiedLocale = locale || Settings.defaultLocale; + // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats + var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + var weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings; + return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale); + }; + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache.clear(); + intlNumCache.clear(); + intlRelCache.clear(); + intlResolvedOptionsCache.clear(); + weekInfoCache.clear(); + }; + Locale.fromObject = function fromObject(_temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + locale = _ref2.locale, + numberingSystem = _ref2.numberingSystem, + outputCalendar = _ref2.outputCalendar, + weekSettings = _ref2.weekSettings; + return Locale.create(locale, numberingSystem, outputCalendar, weekSettings); + }; + function Locale(locale, numbering, outputCalendar, weekSettings, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.weekSettings = weekSettings; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + var _proto4 = Locale.prototype; + _proto4.listingMode = function listingMode() { + var isActuallyEn = this.isEnglish(); + var hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + }; + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, validateWeekSettings(alts.weekSettings) || this.weekSettings, alts.defaultToEN || false); + } + }; + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + return this.clone(_extends({}, alts, { + defaultToEN: true + })); + }; + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + return this.clone(_extends({}, alts, { + defaultToEN: false + })); + }; + _proto4.months = function months$1(length, format) { + var _this2 = this; + if (format === void 0) { + format = false; + } + return listStuff(this, length, months, function () { + // Workaround for "ja" locale: formatToParts does not label all parts of the month + // as "month" and for this locale there is no difference between "format" and "non-format". + // As such, just use format() instead of formatToParts() and take the whole string + var monthSpecialCase = _this2.intl === "ja" || _this2.intl.startsWith("ja-"); + format &= !monthSpecialCase; + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + if (!_this2.monthsCache[formatStr][length]) { + var mapper = !monthSpecialCase ? function (dt) { + return _this2.extract(dt, intl, "month"); + } : function (dt) { + return _this2.dtFormatter(dt, intl).format(); + }; + _this2.monthsCache[formatStr][length] = mapMonths(mapper); + } + return _this2.monthsCache[formatStr][length]; + }); + }; + _proto4.weekdays = function weekdays$1(length, format) { + var _this3 = this; + if (format === void 0) { + format = false; + } + return listStuff(this, length, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + if (!_this3.weekdaysCache[formatStr][length]) { + _this3.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this3.extract(dt, intl, "weekday"); + }); + } + return _this3.weekdaysCache[formatStr][length]; + }); + }; + _proto4.meridiems = function meridiems$1() { + var _this4 = this; + return listStuff(this, undefined, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this4.meridiemCache) { + var intl = { + hour: "numeric", + hourCycle: "h12" + }; + _this4.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this4.extract(dt, intl, "dayperiod"); + }); + } + return _this4.meridiemCache; + }); + }; + _proto4.eras = function eras$1(length) { + var _this5 = this; + return listStuff(this, length, eras, function () { + var intl = { + era: length + }; + + // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + if (!_this5.eraCache[length]) { + _this5.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this5.extract(dt, intl, "era"); + }); + } + return _this5.eraCache[length]; + }); + }; + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + _proto4.listFormatter = function listFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + return getCachedLF(this.intl, opts); + }; + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || getCachedIntResolvedOptions(this.intl).locale.startsWith("en-us"); + }; + _proto4.getWeekSettings = function getWeekSettings() { + if (this.weekSettings) { + return this.weekSettings; + } else if (!hasLocaleWeekInfo()) { + return fallbackWeekSettings; + } else { + return getCachedWeekInfo(this.locale); + } + }; + _proto4.getStartOfWeek = function getStartOfWeek() { + return this.getWeekSettings().firstDay; + }; + _proto4.getMinDaysInFirstWeek = function getMinDaysInFirstWeek() { + return this.getWeekSettings().minimalDays; + }; + _proto4.getWeekendDays = function getWeekendDays() { + return this.getWeekSettings().weekend; + }; + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + _proto4.toString = function toString() { + return "Locale(" + this.locale + ", " + this.numberingSystem + ", " + this.outputCalendar + ")"; + }; + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + return this.fastNumbersCached; + } + }]); + return Locale; +}(); + +var singleton = null; + +/** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ +var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */; + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + }; + function FixedOffsetZone(offset) { + var _this; + _this = _Zone.call(this) || this; + /** @private **/ + _this.fixed = offset; + return _this; + } + + /** + * The type of zone. `fixed` for all instances of `FixedOffsetZone`. + * @override + * @type {string} + */ + var _proto = FixedOffsetZone.prototype; + /** + * Returns the offset's common name at the specified timestamp. + * + * For fixed offset zones this equals to the zone name. + * @override + */ + _proto.offsetName = function offsetName() { + return this.name; + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns true for all fixed offset zones. + * @override + * @type {boolean} + */; + /** + * Return the offset in minutes for this zone at the specified timestamp. + * + * For fixed offset zones, this is constant and does not depend on a timestamp. + * @override + * @return {number} + */ + _proto.offset = function offset() { + return this.fixed; + } + + /** + * Return whether this Zone is equal to another zone (i.e. also fixed and same offset) + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + + /** + * Return whether this Zone is valid: + * All fixed offset zones are valid. + * @override + * @type {boolean} + */; + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + + /** + * The name of this zone. + * All fixed zones' names always start with "UTC" (plus optional offset) + * @override + * @type {string} + */ + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + + /** + * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn` + * + * @override + * @type {string} + */ + }, { + key: "ianaName", + get: function get() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return "Etc/GMT" + formatOffset(-this.fixed, "narrow"); + } + } + }, { + key: "isUniversal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "utcInstance", + get: + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + function get() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + }]); + return FixedOffsetZone; +}(Zone); + +/** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ +var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + function InvalidZone(zoneName) { + var _this; + _this = _Zone.call(this) || this; + /** @private */ + _this.zoneName = zoneName; + return _this; + } + + /** @override **/ + var _proto = InvalidZone.prototype; + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + + /** @override **/; + _proto.formatOffset = function formatOffset() { + return ""; + } + + /** @override **/; + _proto.offset = function offset() { + return NaN; + } + + /** @override **/; + _proto.equals = function equals() { + return false; + } + + /** @override **/; + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + + /** @override **/ + }, { + key: "name", + get: function get() { + return this.zoneName; + } + + /** @override **/ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + return InvalidZone; +}(Zone); + +/** + * @private + */ +function normalizeZone(input, defaultZone) { + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "default") return defaultZone;else if (lowered === "local" || lowered === "system") return SystemZone.instance;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } +} + +var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" +}; +var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] +}; +var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); +function parseDigits(str) { + var value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } +} + +// cache of {numberingSystem: {append: regex}} +var digitRegexCache = new Map(); +function resetDigitRegexCache() { + digitRegexCache.clear(); +} +function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + if (append === void 0) { + append = ""; + } + var ns = numberingSystem || "latn"; + var appendCache = digitRegexCache.get(ns); + if (appendCache === undefined) { + appendCache = new Map(); + digitRegexCache.set(ns, appendCache); + } + var regex = appendCache.get(append); + if (regex === undefined) { + regex = new RegExp("" + numberingSystems[ns] + append); + appendCache.set(append, regex); + } + return regex; +} + +var now = function now() { + return Date.now(); + }, + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + twoDigitCutoffYear = 60, + throwOnInvalid, + defaultWeekSettings = null; + +/** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ +var Settings = /*#__PURE__*/function () { + function Settings() {} + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + DateTime.resetCache(); + resetDigitRegexCache(); + }; + _createClass(Settings, null, [{ + key: "now", + get: + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + function get() { + return now; + } + + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */, + set: function set(n) { + now = n; + } + + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + }, { + key: "defaultZone", + get: + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + function get() { + return normalizeZone(defaultZone, SystemZone.instance); + } + + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(zone) { + defaultZone = zone; + } + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(locale) { + defaultLocale = locale; + } + + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + + /** + * @typedef {Object} WeekSettings + * @property {number} firstDay + * @property {number} minimalDays + * @property {number[]} weekend + */ + + /** + * @return {WeekSettings|null} + */ + }, { + key: "defaultWeekSettings", + get: function get() { + return defaultWeekSettings; + } + + /** + * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and + * how many days are required in the first week of a year. + * Does not affect existing instances. + * + * @param {WeekSettings|null} weekSettings + */, + set: function set(weekSettings) { + defaultWeekSettings = validateWeekSettings(weekSettings); + } + + /** + * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + */ + }, { + key: "twoDigitCutoffYear", + get: function get() { + return twoDigitCutoffYear; + } + + /** + * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century + * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century + * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950 + * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50 + * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50 + */, + set: function set(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */, + set: function set(t) { + throwOnInvalid = t; + } + }]); + return Settings; +}(); + +var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + var _proto = Invalid.prototype; + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + return Invalid; +}(); + +var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; +function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); +} +function dayOfWeek(year, month, day) { + var d = new Date(Date.UTC(year, month - 1, day)); + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + var js = d.getUTCDay(); + return js === 0 ? 7 : js; +} +function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; +} +function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; +} +function isoWeekdayToLocal(isoWeekday, startOfWeek) { + return (isoWeekday - startOfWeek + 7) % 7 + 1; +} + +/** + * @private + */ + +function gregorianToWeek(gregObj, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek); + var weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7), + weekYear; + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek); + } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + return _extends({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); +} +function weekToGregorian(weekData, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek, + year; + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + return _extends({ + year: year, + month: month, + day: day + }, timeObject(weekData)); +} +function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day; + var ordinal = computeOrdinal(year, month, day); + return _extends({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); +} +function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal; + var _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + return _extends({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); +} + +/** + * Check if local week units like localWeekday are used in obj. + * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties. + * Modifies obj in-place! + * @param obj the object values + */ +function usesLocalWeekValues(obj, loc) { + var hasLocaleWeekData = !isUndefined(obj.localWeekday) || !isUndefined(obj.localWeekNumber) || !isUndefined(obj.localWeekYear); + if (hasLocaleWeekData) { + var hasIsoWeekData = !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear); + if (hasIsoWeekData) { + throw new ConflictingSpecificationError("Cannot mix locale-based week fields with ISO-based week fields"); + } + if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday; + if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber; + if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear; + delete obj.localWeekday; + delete obj.localWeekNumber; + delete obj.localWeekYear; + return { + minDaysInFirstWeek: loc.getMinDaysInFirstWeek(), + startOfWeek: loc.getStartOfWeek() + }; + } else { + return { + minDaysInFirstWeek: 4, + startOfWeek: 1 + }; + } +} +function hasInvalidWeekData(obj, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)), + validWeekday = integerBetween(obj.weekday, 1, 7); + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.weekNumber); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; +} +function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; +} +function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; +} +function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; +} + +/** + * @private + */ + +// TYPES + +function isUndefined(o) { + return typeof o === "undefined"; +} +function isNumber(o) { + return typeof o === "number"; +} +function isInteger(o) { + return typeof o === "number" && o % 1 === 0; +} +function isString(o) { + return typeof o === "string"; +} +function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; +} + +// CAPABILITIES + +function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } +} +function hasLocaleWeekInfo() { + try { + return typeof Intl !== "undefined" && !!Intl.Locale && ("weekInfo" in Intl.Locale.prototype || "getWeekInfo" in Intl.Locale.prototype); + } catch (e) { + return false; + } +} + +// OBJECTS AND ARRAYS + +function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; +} +function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; +} +function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); +} +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} +function validateWeekSettings(settings) { + if (settings == null) { + return null; + } else if (typeof settings !== "object") { + throw new InvalidArgumentError("Week settings must be an object"); + } else { + if (!integerBetween(settings.firstDay, 1, 7) || !integerBetween(settings.minimalDays, 1, 7) || !Array.isArray(settings.weekend) || settings.weekend.some(function (v) { + return !integerBetween(v, 1, 7); + })) { + throw new InvalidArgumentError("Invalid week settings"); + } + return { + firstDay: settings.firstDay, + minimalDays: settings.minimalDays, + weekend: Array.from(settings.weekend) + }; + } +} + +// NUMBERS AND STRINGS + +function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; +} + +// x % n but takes the sign of n instead of x +function floorMod(x, n) { + return x - n * Math.floor(x / n); +} +function padStart(input, n) { + if (n === void 0) { + n = 2; + } + var isNeg = input < 0; + var padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + return padded; +} +function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } +} +function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } +} +function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } +} +function roundTo(number, digits, rounding) { + if (rounding === void 0) { + rounding = "round"; + } + var factor = Math.pow(10, digits); + switch (rounding) { + case "expand": + return number > 0 ? Math.ceil(number * factor) / factor : Math.floor(number * factor) / factor; + case "trunc": + return Math.trunc(number * factor) / factor; + case "round": + return Math.round(number * factor) / factor; + case "floor": + return Math.floor(number * factor) / factor; + case "ceil": + return Math.ceil(number * factor) / factor; + default: + throw new RangeError("Value rounding " + rounding + " is out of range"); + } +} + +// DATE BASICS + +function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} +function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } +} + +// convert a calendar object to a local timestamp (epoch, but with the offset baked in) +function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); + + // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not + // so if obj.year is in 99, but obj.day makes it roll over into year 100, + // the calculations done by Date.UTC are using year 2000 - which is incorrect + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; +} + +// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js +function firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) { + var fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek); + return -fwdlw + minDaysInFirstWeek - 1; +} +function weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek); + var weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek); + return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7; +} +function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year; +} + +// PARSING + +function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + var date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + if (timeZone) { + intlOpts.timeZone = timeZone; + } + var modified = _extends({ + timeZoneName: offsetFormat + }, intlOpts); + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; +} + +// signedOffset('-5', '30') -> -330 +function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); + + // don't || this because we want to preserve -0 + if (Number.isNaN(offHour)) { + offHour = 0; + } + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; +} + +// COERCION + +function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || !Number.isFinite(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; +} +function normalizeObject(obj, normalizer) { + var normalized = {}; + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; +} + +/** + * Returns the offset's value as a string + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ +function formatOffset(offset, format) { + var hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + switch (format) { + case "short": + return "" + sign + padStart(hours, 2) + ":" + padStart(minutes, 2); + case "narrow": + return "" + sign + hours + (minutes > 0 ? ":" + minutes : ""); + case "techie": + return "" + sign + padStart(hours, 2) + padStart(minutes, 2); + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } +} +function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); +} + +/** + * @private + */ + +var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; +var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; +var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; +function months(length) { + switch (length) { + case "narrow": + return [].concat(monthsNarrow); + case "short": + return [].concat(monthsShort); + case "long": + return [].concat(monthsLong); + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } +} +var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; +var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; +var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; +function weekdays(length) { + switch (length) { + case "narrow": + return [].concat(weekdaysNarrow); + case "short": + return [].concat(weekdaysShort); + case "long": + return [].concat(weekdaysLong); + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } +} +var meridiems = ["AM", "PM"]; +var erasLong = ["Before Christ", "Anno Domini"]; +var erasShort = ["BC", "AD"]; +var erasNarrow = ["B", "A"]; +function eras(length) { + switch (length) { + case "narrow": + return [].concat(erasNarrow); + case "short": + return [].concat(erasShort); + case "long": + return [].concat(erasLong); + default: + return null; + } +} +function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; +} +function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; +} +function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; +} +function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; +} +function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + if (narrow === void 0) { + narrow = false; + } + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + case 0: + return isDay ? "today" : "this " + units[unit][0]; + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; +} + +function stringifyTokens(splits, tokenToString) { + var s = ""; + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + return s; +} +var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS +}; + +/** + * @private + */ +var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + return new Formatter(locale, opts); + }; + Formatter.parseFormat = function parseFormat(fmt) { + // white-space is always considered a literal in user-provided formats + // the " " token has a special meaning (see unitForToken) + + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + if (c === "'") { + // turn '' into a literal signal quote instead of just skipping the empty literal + if (currentFull.length > 0 || bracketed) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull === "" ? "'" : currentFull + }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: /^\s+$/.test(currentFull), + val: currentFull + }); + } + currentFull = c; + current = c; + } + } + if (currentFull.length > 0) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull + }); + } + return splits; + }; + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + var _proto = Formatter.prototype; + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + var df = this.systemLoc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + _proto.dtFormatter = function dtFormatter(dt, opts) { + if (opts === void 0) { + opts = {}; + } + return this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + }; + _proto.formatDateTime = function formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + }; + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + }; + _proto.formatInterval = function formatInterval(interval, opts) { + var df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + }; + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + }; + _proto.num = function num(n, p, signDisplay) { + if (p === void 0) { + p = 0; + } + if (signDisplay === void 0) { + signDisplay = undefined; + } + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + var opts = _extends({}, this.opts); + if (p > 0) { + opts.padTo = p; + } + if (signDisplay) { + opts.signDisplay = signDisplay; + } + return this.loc.numberFormatter(opts).format(n); + }; + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hourCycle: "h12" + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + case "u": + // falls through + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + case "s": + return _this.num(dt.second); + case "ss": + return _this.num(dt.second, 2); + // fractional seconds + case "uu": + return _this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return _this.num(Math.floor(dt.millisecond / 100)); + // minutes + case "m": + return _this.num(dt.minute); + case "mm": + return _this.num(dt.minute, 2); + // hours + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return _this.num(dt.hour); + case "HH": + return _this.num(dt.hour, 2); + // offset + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + case "a": + return meridiem(); + // dates + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + case "c": + // like 1 + return _this.num(dt.weekday); + case "ccc": + // like 'Tues' + return weekday("short", true); + case "cccc": + // like 'Tuesday' + return weekday("long", true); + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + case "E": + // like 1 + return _this.num(dt.weekday); + case "EEE": + // like 'Tues' + return weekday("short", false); + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + case "LLL": + // like Jan + return month("short", true); + case "LLLL": + // like January + return month("long", true); + case "LLLLL": + // like J + return month("narrow", true); + // months - format + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + case "MMM": + // like Jan + return month("short", false); + case "MMMM": + // like January + return month("long", false); + case "MMMMM": + // like J + return month("narrow", false); + // years + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + case "G": + // like AD + return era("short"); + case "GG": + // like Anno Domini + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return _this.num(dt.weekYear, 4); + case "W": + return _this.num(dt.weekNumber); + case "WW": + return _this.num(dt.weekNumber, 2); + case "n": + return _this.num(dt.localWeekNumber); + case "nn": + return _this.num(dt.localWeekNumber, 2); + case "ii": + return _this.num(dt.localWeekYear.toString().slice(-2), 2); + case "iiii": + return _this.num(dt.localWeekYear, 4); + case "o": + return _this.num(dt.ordinal); + case "ooo": + return _this.num(dt.ordinal, 3); + case "q": + // like 1 + return _this.num(dt.quarter); + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + case "x": + return _this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + var invertLargest = this.opts.signMode === "negativeLargestOnly" ? -1 : 1; + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "milliseconds"; + case "s": + return "seconds"; + case "m": + return "minutes"; + case "h": + return "hours"; + case "d": + return "days"; + case "w": + return "weeks"; + case "M": + return "months"; + case "y": + return "years"; + default: + return null; + } + }, + tokenToString = function tokenToString(lildur, info) { + return function (token) { + var mapped = tokenToField(token); + if (mapped) { + var inversionFactor = info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1; + var signDisplay; + if (_this2.opts.signMode === "negativeLargestOnly" && mapped !== info.largestUnit) { + signDisplay = "never"; + } else if (_this2.opts.signMode === "all") { + signDisplay = "always"; + } else { + // "auto" and "negative" are the same, but "auto" has better support + signDisplay = "auto"; + } + return _this2.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })), + durationInfo = { + isNegativeDuration: collapsed < 0, + // this relies on "collapsed" being based on "shiftTo", which builds up the object + // in order + largestUnit: Object.keys(collapsed.values)[0] + }; + return stringifyTokens(tokens, tokenToString(collapsed, durationInfo)); + }; + return Formatter; +}(); + +/* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + +var ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; +function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); +} +function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + return [_extends({}, mergedVals, val), zone || mergedZone, next]; + }, [{}, null, 1]).slice(0, 2); + }; +} +function parse(s) { + if (s == null) { + return [null, null]; + } + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + if (m) { + return extractor(m); + } + } + return [null, null]; +} +function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + return function (match, cursor) { + var ret = {}; + var i; + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + return [ret, null, cursor + i]; + }; +} + +// ISO and SQL parsing +var offsetRegex = /(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/; +var isoExtendedZone = "(?:" + offsetRegex.source + "?(?:\\[(" + ianaRegex.source + ")\\])?)?"; +var isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; +var isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + isoExtendedZone); +var isoTimeExtensionRegex = RegExp("(?:[Tt]" + isoTimeRegex.source + ")?"); +var isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; +var isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; +var isoOrdinalRegex = /(\d{4})-?(\d{3})/; +var extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); +var extractISOOrdinalData = simpleParse("year", "ordinal"); +var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one +var sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"); +var sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); +function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); +} +function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; +} +function extractISOTime(match, cursor) { + var item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; +} +function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; +} +function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; +} + +// ISO time parsing + +var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); + +// ISO duration parsing + +var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; +function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + var negativeSeconds = secondStr && secondStr[0] === "-"; + var maybeNegate = function maybeNegate(num, force) { + if (force === void 0) { + force = false; + } + return num !== undefined && (force || num && hasNegativePrefix) ? -num : num; + }; + return [{ + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + }]; +} + +// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York +// and not just that we're in -240 *right now*. But since I don't think these are used that often +// I'm just going to ignore that +var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 +}; +function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + return result; +} + +// RFC 2822/5322 +var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; +function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + return [result, new FixedOffsetZone(offset)]; +} +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); +} + +// http date + +var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; +function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} +function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} +var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); +var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); +var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); +var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); +var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + +/* + * @private + */ + +function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); +} +function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); +} +function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); +} +function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); +} +var extractISOTimeOnly = combineExtractors(extractISOTime); +function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); +} +var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); +var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); +var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); +function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); +} + +var INVALID$2 = "Invalid Duration"; + +// unit conversion constants +var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } + }, + casualMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix); + +// units ordered by size +var orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; +var reverseUnits = orderedUnits$1.slice(0).reverse(); + +// clone really means "create another instance just like this one, but with these changes" +function clone$1(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + // deep merge for vals + var conf = { + values: clear ? alts.values : _extends({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix + }; + return new Duration(conf); +} +function durationToMillis(matrix, vals) { + var _vals$milliseconds; + var sum = (_vals$milliseconds = vals.milliseconds) != null ? _vals$milliseconds : 0; + for (var _iterator = _createForOfIteratorHelperLoose(reverseUnits.slice(1)), _step; !(_step = _iterator()).done;) { + var unit = _step.value; + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; +} + +// NB: mutates parameters +function normalizeValues(matrix, vals) { + // the logic below assumes the overall value of the duration is positive + // if this is not the case, factor is used to make it so + var factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + orderedUnits$1.reduceRight(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + var previousVal = vals[previous] * factor; + var conv = matrix[current][previous]; + + // if (previousVal < 0): + // lower order unit is negative (e.g. { years: 2, days: -2 }) + // normalize this by reducing the higher order unit by the appropriate amount + // and increasing the lower order unit + // this can never make the higher order unit negative, because this function only operates + // on positive durations, so the amount of time represented by the lower order unit cannot + // be larger than the higher order unit + // else: + // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 }) + // in this case we attempt to convert as much as possible from the lower order unit into + // the higher order one + // + // Math.floor takes care of both of these cases, rounding away from 0 + // if previousVal < 0 it makes the absolute value larger + // if previousVal >= it makes the absolute value smaller + var rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + + // try to convert any decimals into smaller units if possible + // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 } + orderedUnits$1.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + var fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); +} + +// Remove all properties with a value of 0 from an object +function removeZeroes(vals) { + var newVals = {}; + for (var _i = 0, _Object$entries = Object.entries(vals); _i < _Object$entries.length; _i++) { + var _Object$entries$_i = _Object$entries[_i], + key = _Object$entries$_i[0], + value = _Object$entries$_i[1]; + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; +} + +/** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ +var Duration = /*#__PURE__*/function (_Symbol$for) { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + var matrix = accurate ? accurateMatrix : casualMatrix; + if (config.matrix) { + matrix = config.matrix; + } + + /** + * @access private + */ + this.values = config.values; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.matrix = matrix; + /** + * @access private + */ + this.isLuxonDuration = true; + } + + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject({ + milliseconds: count + }, opts); + } + + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the custom conversion system to use + * @return {Duration} + */; + Duration.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix + }); + } + + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */; + Duration.fromDurationLike = function fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationLike + " of type " + typeof durationLike); + } + } + + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the preset conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */; + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */; + Duration.fromISOTime = function fromISOTime(text, opts) { + var _parseISOTimeOnly = parseISOTimeOnly(text), + parsed = _parseISOTimeOnly[0]; + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */; + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + + /** + * @private + */; + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */; + var _proto = Duration.prototype; + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * Tokens can be escaped by wrapping with single quotes. + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat("d s", { signMode: "all" }) //=> "+6 +2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "all" }) //=> "-6 -2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "negativeLargestOnly" }) //=> "-6 2" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = _extends({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options + * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`. + * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor. + * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero + * @example + * ```js + * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 mth, 0 wks, 5 hr, 6 min' + * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes' + * ``` + */; + _proto.toHuman = function toHuman(opts) { + var _this = this; + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return INVALID$2; + var showZeros = opts.showZeros !== false; + var l = orderedUnits$1.map(function (unit) { + var val = _this.values[unit]; + if (isUndefined(val) || val === 0 && !showZeros) { + return null; + } + return _this.loc.numberFormatter(_extends({ + style: "unit", + unitDisplay: "long" + }, opts, { + unit: unit.slice(0, -1) + })).format(val); + }).filter(function (n) { + return n; + }); + return this.loc.listFormatter(_extends({ + type: "conjunction", + style: opts.listStyle || "narrow" + }, opts)).format(l); + } + + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */; + _proto.toObject = function toObject() { + if (!this.isValid) return {}; + return _extends({}, this.values); + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */; + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */; + _proto.toISOTime = function toISOTime(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return null; + var millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + opts = _extends({ + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended" + }, opts, { + includeOffset: false + }); + var dateTime = DateTime.fromMillis(millis, { + zone: "UTC" + }); + return dateTime.toISOTime(opts); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */; + _proto.toJSON = function toJSON() { + return this.toISO(); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */; + _proto.toString = function toString() { + return this.toISO(); + } + + /** + * Returns a string representation of this Duration appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "Duration { values: " + JSON.stringify(this.values) + " }"; + } else { + return "Duration { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */; + _proto.toMillis = function toMillis() { + if (!this.isValid) return NaN; + return durationToMillis(this.matrix, this.values); + } + + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */; + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */; + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration), + result = {}; + for (var _i2 = 0, _orderedUnits = orderedUnits$1; _i2 < _orderedUnits.length; _i2++) { + var k = _orderedUnits[_i2]; + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */; + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */; + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + for (var _i3 = 0, _Object$keys = Object.keys(this.values); _i3 < _Object$keys.length; _i3++) { + var k = _Object$keys[_i3]; + result[k] = asNumber(fn(this.values[k], k)); + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */; + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */; + _proto.set = function set(values) { + if (!this.isValid) return this; + var mixed = _extends({}, this.values, normalizeObject(values, Duration.normalizeUnit)); + return clone$1(this, { + values: mixed + }); + } + + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */; + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy, + matrix = _ref.matrix; + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }); + var opts = { + loc: loc, + matrix: matrix, + conversionAccuracy: conversionAccuracy + }; + return clone$1(this, opts); + } + + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */; + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + + /** + * Reduce this Duration to its canonical representation in its current units. + * Assuming the overall value of the Duration is positive, this means: + * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example) + * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise + * the overall value would be negative, see third example) + * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example) + * + * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 } + * @return {Duration} + */; + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Rescale units to its largest representation + * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 } + * @return {Duration} + */; + _proto.rescale = function rescale() { + if (!this.isValid) return this; + var vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */; + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + if (!this.isValid) return this; + if (units.length === 0) { + return this; + } + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + for (var _i4 = 0, _orderedUnits2 = orderedUnits$1; _i4 < _orderedUnits2.length; _i4++) { + var k = _orderedUnits2[_i4]; + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; + + // anything we haven't boiled down yet should get boiled to this unit + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + + // plus anything that's already in this unit + if (isNumber(vals[k])) { + own += vals[k]; + } + + // only keep the integer part for now in the hopes of putting any decimal part + // into a smaller unit later + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; + + // otherwise, keep it in the wings to boil it later + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + + // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + normalizeValues(this.matrix, built); + return clone$1(this, { + values: built + }, true); + } + + /** + * Shift this Duration to all available units. + * Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds") + * @return {Duration} + */; + _proto.shiftToAll = function shiftToAll() { + if (!this.isValid) return this; + return this.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"); + } + + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */; + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + for (var _i5 = 0, _Object$keys2 = Object.keys(this.values); _i5 < _Object$keys2.length; _i5++) { + var k = _Object$keys2[_i5]; + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { + values: negated + }, true); + } + + /** + * Removes all units with values equal to 0 from this Duration. + * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 } + * @return {Duration} + */; + _proto.removeZeros = function removeZeros() { + if (!this.isValid) return this; + var vals = removeZeroes(this.values); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Get the years. + * @type {number} + */; + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + if (!this.loc.equals(other.loc)) { + return false; + } + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + for (var _i6 = 0, _orderedUnits3 = orderedUnits$1; _i6 < _orderedUnits3.length; _i6++) { + var u = _orderedUnits3[_i6]; + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + }; + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + + /** + * Get the quarters. + * @type {number} + */ + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + + /** + * Get the months. + * @type {number} + */ + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + + /** + * Get the weeks + * @type {number} + */ + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + + /** + * Get the days. + * @type {number} + */ + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + + /** + * Get the hours. + * @type {number} + */ + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + + /** + * Get the minutes. + * @type {number} + */ + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + + /** + * Get the seconds. + * @return {number} + */ + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + + /** + * Get the milliseconds. + * @return {number} + */ + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + return Duration; +}(Symbol.for("nodejs.util.inspect.custom")); + +var INVALID$1 = "Invalid Interval"; + +// checks if the start is equal to or before the end +function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } +} + +/** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ +var Interval = /*#__PURE__*/function (_Symbol$for) { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + this.e = config.end; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.isLuxonInterval = true; + } + + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */; + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */; + Interval.after = function after(start, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */; + Interval.before = function before(end, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */; + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + if (s && e) { + var start, startIsValid; + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + var end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + if (startIsValid) { + var dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + var _dur = Duration.fromISO(s, opts); + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + + /** + * Returns the start of the Interval + * @type {DateTime} + */; + var _proto = Interval.prototype; + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime + * @return {number} + */; + _proto.count = function count(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (!this.isValid) return NaN; + var start = this.start.startOf(unit, opts); + var end; + if (opts != null && opts.useLocaleWeeks) { + end = this.end.reconfigure({ + locale: start.locale + }); + } else { + end = this.end; + } + end = end.startOf(unit, opts); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */; + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */; + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */; + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */; + _proto.splitAt = function splitAt() { + var _this = this; + if (!this.isValid) return []; + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(function (a, b) { + return a.toMillis() - b.toMillis(); + }), + results = []; + var s = this.s, + i = 0; + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + return results; + } + + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */; + _proto.splitBy = function splitBy(duration) { + var dur = Duration.fromDurationLike(duration); + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + var s = this.s, + idx = 1, + next; + var results = []; + while (s < this.e) { + var added = this.start.plus(dur.mapUnits(function (x) { + return x * idx; + })); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + return results; + } + + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */; + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */; + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */; + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */; + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + + /** + * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise. + * @param {Interval} other + * @return {boolean} + */; + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */; + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + return this.s.equals(other.s) && this.e.equals(other.e); + } + + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */; + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */; + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + + /** + * Merge an array of Intervals into an equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval + * and ending with the latest. + * + * @param {Array} intervals + * @return {Array} + */; + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + if (final) { + found.push(final); + } + return found; + } + + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */; + Interval.xor = function xor(intervals) { + var _Array$prototype; + var start = null, + currentCount = 0; + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + start = null; + } + } + return Interval.merge(results); + } + + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */; + _proto.difference = function difference() { + var _this2 = this; + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */; + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + + /** + * Returns a string representation of this Interval appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "Interval { start: " + this.s.toISO() + ", end: " + this.e.toISO() + " }"; + } else { + return "Interval { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns a localized string representing this Interval. Accepts the same options as the + * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as + * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method + * is browser-specific, but in general it will return an appropriate representation of the + * Interval in the assigned locale. Defaults to the system's locale if no locale has been + * specified. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or + * Intl.DateTimeFormat constructor options. + * @param {Object} opts - Options to override the configuration of the start DateTime. + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022 + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p + * @return {string} + */; + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1; + } + + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */; + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */; + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */; + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + + /** + * Returns a string representation of this Interval formatted according to the specified format + * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible + * formatting tool. + * @param {string} dateFormat - The format string. This string formats the start and end time. + * See {@link DateTime#toFormat} for details. + * @param {Object} opts - Options. + * @param {string} [opts.separator = ' – '] - A separator to place between the start and end + * representations. + * @return {string} + */; + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */; + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */; + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + + /** + * Returns the end of the Interval. This is the first instant which is not part of the interval + * (Interval is half-open). + * @type {DateTime} + */ + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + + /** + * Returns the last DateTime included in the interval (since end is not part of the interval) + * @type {DateTime} + */ + }, { + key: "lastDateTime", + get: function get() { + return this.isValid ? this.e ? this.e.minus(1) : null : null; + } + + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + return Interval; +}(Symbol.for("nodejs.util.inspect.custom")); + +/** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ +var Info = /*#__PURE__*/function () { + function Info() {} + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + var proto = DateTime.now().setZone(zone).set({ + month: 12 + }); + return !zone.isUniversal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */; + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */; + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + + /** + * Get the weekday on which the week starts according to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} the start of the week, 1 for Monday through 7 for Sunday + */; + Info.getStartOfWeek = function getStartOfWeek(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$locObj = _ref.locObj, + locObj = _ref$locObj === void 0 ? null : _ref$locObj; + return (locObj || Locale.create(locale)).getStartOfWeek(); + } + + /** + * Get the minimum number of days necessary in a week before it is considered part of the next year according + * to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} + */; + Info.getMinimumDaysInFirstWeek = function getMinimumDaysInFirstWeek(_temp2) { + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$locObj = _ref2.locObj, + locObj = _ref2$locObj === void 0 ? null : _ref2$locObj; + return (locObj || Locale.create(locale)).getMinDaysInFirstWeek(); + } + + /** + * Get the weekdays, which are considered the weekend according to the given locale + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday + */; + Info.getWeekendWeekdays = function getWeekendWeekdays(_temp3) { + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$locObj = _ref3.locObj, + locObj = _ref3$locObj === void 0 ? null : _ref3$locObj; + // copy the array, because we cache it internally + return (locObj || Locale.create(locale)).getWeekendDays().slice(); + } + + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */; + Info.months = function months(length, _temp4) { + if (length === void 0) { + length = "long"; + } + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem, + _ref4$locObj = _ref4.locObj, + locObj = _ref4$locObj === void 0 ? null : _ref4$locObj, + _ref4$outputCalendar = _ref4.outputCalendar, + outputCalendar = _ref4$outputCalendar === void 0 ? "gregory" : _ref4$outputCalendar; + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */; + Info.monthsFormat = function monthsFormat(length, _temp5) { + if (length === void 0) { + length = "long"; + } + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale, + _ref5$numberingSystem = _ref5.numberingSystem, + numberingSystem = _ref5$numberingSystem === void 0 ? null : _ref5$numberingSystem, + _ref5$locObj = _ref5.locObj, + locObj = _ref5$locObj === void 0 ? null : _ref5$locObj, + _ref5$outputCalendar = _ref5.outputCalendar, + outputCalendar = _ref5$outputCalendar === void 0 ? "gregory" : _ref5$outputCalendar; + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */; + Info.weekdays = function weekdays(length, _temp6) { + if (length === void 0) { + length = "long"; + } + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale, + _ref6$numberingSystem = _ref6.numberingSystem, + numberingSystem = _ref6$numberingSystem === void 0 ? null : _ref6$numberingSystem, + _ref6$locObj = _ref6.locObj, + locObj = _ref6$locObj === void 0 ? null : _ref6$locObj; + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */; + Info.weekdaysFormat = function weekdaysFormat(length, _temp7) { + if (length === void 0) { + length = "long"; + } + var _ref7 = _temp7 === void 0 ? {} : _temp7, + _ref7$locale = _ref7.locale, + locale = _ref7$locale === void 0 ? null : _ref7$locale, + _ref7$numberingSystem = _ref7.numberingSystem, + numberingSystem = _ref7$numberingSystem === void 0 ? null : _ref7$numberingSystem, + _ref7$locObj = _ref7.locObj, + locObj = _ref7$locObj === void 0 ? null : _ref7$locObj; + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */; + Info.meridiems = function meridiems(_temp8) { + var _ref8 = _temp8 === void 0 ? {} : _temp8, + _ref8$locale = _ref8.locale, + locale = _ref8$locale === void 0 ? null : _ref8$locale; + return Locale.create(locale).meridiems(); + } + + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */; + Info.eras = function eras(length, _temp9) { + if (length === void 0) { + length = "short"; + } + var _ref9 = _temp9 === void 0 ? {} : _temp9, + _ref9$locale = _ref9.locale, + locale = _ref9$locale === void 0 ? null : _ref9$locale; + return Locale.create(locale, null, "gregory").eras(length); + } + + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale + * @example Info.features() //=> { relative: false, localeWeek: true } + * @return {Object} + */; + Info.features = function features() { + return { + relative: hasRelative(), + localeWeek: hasLocaleWeekInfo() + }; + }; + return Info; +}(); + +function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); +} +function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["quarters", function (a, b) { + return b.quarter - a.quarter + (b.year - a.year) * 4; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var earlier = cursor; + var lowestOrder, highWater; + + /* This loop tries to diff using larger units first. + If we overshoot, we backtrack and try the next smaller unit. + "cursor" starts out at the earlier timestamp and moves closer and closer to "later" + as we use smaller and smaller units. + highWater keeps track of where we would be if we added one more of the smallest unit, + this is used later to potentially convert any difference smaller than the smallest higher order unit + into a fraction of that smallest higher order unit + */ + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + if (highWater > later) { + // we overshot the end point, backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + + // if we are still overshooting now, we need to backtrack again + // this happens in certain situations when diffing times in different zones, + // because this calculation ignores time zones + if (cursor > later) { + // keep the "overshot by 1" around as highWater + highWater = cursor; + // backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + return [cursor, results, highWater, lowestOrder]; +} +function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus; + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[lowestOrder] = 1, _cursor$plus)); + } + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + var duration = Duration.fromObject(results, opts); + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } +} + +var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; +function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; +} +var NBSP = String.fromCharCode(160); +var spaceOrNBSP = "[ " + NBSP + "]"; +var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); +function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); +} +function stripInsensitivities(s) { + return s.replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); +} +function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } +} +function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; +} +function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; +} +function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); +} + +/** + * @param token + * @param {Locale} loc + */ +function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + // years + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + // months + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + // dates + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + // ordinals + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + // time + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + // meridiem + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + // weekdays + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + // offset/zone + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + // this special-case "token" represents a place where a macro-token expanded into a white-space literal + // in this case we accept any non-newline white-space + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; +} +var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh" + }, + hour24: { + numeric: "H", + "2-digit": "HH" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ" + } +}; +function tokenForPart(part, formatOpts, resolvedOpts) { + var type = part.type, + value = part.value; + if (type === "literal") { + var isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value + }; + } + var style = formatOpts[type]; + + // The user might have explicitly specified hour12 or hourCycle + // if so, respect their decision + // if not, refer back to the resolvedOpts, which are based on the locale + var actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + // tokens only differentiate between 24 hours or not, + // so we do not need to check hourCycle here, which is less supported anyways + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + var val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + if (val) { + return { + literal: false, + val: val + }; + } + return undefined; +} +function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; +} +function match(input, regex, handlers) { + var matches = input.match(regex); + if (matches) { + var all = {}; + var matchIndex = 1; + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } +} +function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + var zone = null; + var specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + if (f) { + r[f] = matches[k]; + } + return r; + }, {}); + return [vals, zone, specificOffset]; +} +var dummyDateTimeCache = null; +function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + return dummyDateTimeCache; +} +function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + var tokens = formatOptsToTokens(formatOpts, locale); + if (tokens == null || tokens.includes(undefined)) { + return token; + } + return tokens; +} +function expandMacroTokens(tokens, locale) { + var _Array$prototype; + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); +} + +/** + * @private + */ + +var TokenParser = /*#__PURE__*/function () { + function TokenParser(locale, format) { + this.locale = locale; + this.format = format; + this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale); + this.units = this.tokens.map(function (t) { + return unitForToken(t, locale); + }); + this.disqualifyingUnit = this.units.find(function (t) { + return t.invalidReason; + }); + if (!this.disqualifyingUnit) { + var _buildRegex = buildRegex(this.units), + regexString = _buildRegex[0], + handlers = _buildRegex[1]; + this.regex = RegExp(regexString, "i"); + this.handlers = handlers; + } + } + var _proto = TokenParser.prototype; + _proto.explainFromTokens = function explainFromTokens(input) { + if (!this.isValid) { + return { + input: input, + tokens: this.tokens, + invalidReason: this.invalidReason + }; + } else { + var _match = match(input, this.regex, this.handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null, undefined], + result = _ref6[0], + zone = _ref6[1], + specificOffset = _ref6[2]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + return { + input: input, + tokens: this.tokens, + regex: this.regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone, + specificOffset: specificOffset + }; + } + }; + _createClass(TokenParser, [{ + key: "isValid", + get: function get() { + return !this.disqualifyingUnit; + } + }, { + key: "invalidReason", + get: function get() { + return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null; + } + }]); + return TokenParser; +}(); +function explainFromTokens(locale, input, format) { + var parser = new TokenParser(locale, format); + return parser.explainFromTokens(input); +} +function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + specificOffset = _explainFromTokens.specificOffset, + invalidReason = _explainFromTokens.invalidReason; + return [result, zone, specificOffset, invalidReason]; +} +function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + var formatter = Formatter.create(locale, formatOpts); + var df = formatter.dtFormatter(getDummyDateTime()); + var parts = df.formatToParts(); + var resolvedOpts = df.resolvedOptions(); + return parts.map(function (p) { + return tokenForPart(p, formatOpts, resolvedOpts); + }); +} + +var INVALID = "Invalid DateTime"; +var MAX_DATE = 8.64e15; +function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); +} + +// we cache week data on the DT object and this intermediates the cache +/** + * @param {DateTime} dt + */ +function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; +} + +/** + * @param {DateTime} dt + */ +function possiblyCachedLocalWeekData(dt) { + if (dt.localWeekData === null) { + dt.localWeekData = gregorianToWeek(dt.c, dt.loc.getMinDaysInFirstWeek(), dt.loc.getStartOfWeek()); + } + return dt.localWeekData; +} + +// clone really means, "make a new object with these modifications". all "setters" really use this +// to create a new object while only changing some of the properties +function clone(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(_extends({}, current, alts, { + old: current + })); +} + +// find the right offset a given local time. The o input is our guess, which determines which +// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) +function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; + + // Test whether the zone matches the offset for this ts + var o2 = tz.offset(utcGuess); + + // If so, offset didn't change and we're done + if (o === o2) { + return [utcGuess, o]; + } + + // If not, change the ts by the difference in the offset + utcGuess -= (o2 - o) * 60 * 1000; + + // If that gives us the local time we want, we're done + var o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + + // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; +} + +// convert an epoch timestamp into a calendar object with the given offset +function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; +} + +// convert a calendar object to a epoch timestamp +function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); +} + +// create a new DT instance by adding a duration, adjusting for DSTs +function adjustTime(inst, dur) { + var oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = _extends({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }), + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + if (millisToAdd !== 0) { + ts += millisToAdd; + // that could have changed the offset by going over a DST, but we want to keep the ts the same + o = inst.zone.offset(ts); + } + return { + ts: ts, + o: o + }; +} + +// helper useful in turning the results of parsing into real dates +// by handling the zone options +function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + var setZone = opts.setZone, + zone = opts.zone; + if (parsed && Object.keys(parsed).length !== 0 || parsedZone) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, _extends({}, opts, { + zone: interpretationZone, + specificOffset: specificOffset + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } +} + +// if you want to output a technical format (e.g. RFC 2822), this helper +// helps handle the details +function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; +} +function _toISODate(o, extended, precision) { + var longFormat = o.c.year > 9999 || o.c.year < 0; + var c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + if (precision === "year") return c; + if (extended) { + c += "-"; + c += padStart(o.c.month); + if (precision === "month") return c; + c += "-"; + } else { + c += padStart(o.c.month); + if (precision === "month") return c; + } + c += padStart(o.c.day); + return c; +} +function _toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision) { + var showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0, + c = ""; + switch (precision) { + case "day": + case "month": + case "year": + break; + default: + c += padStart(o.c.hour); + if (precision === "hour") break; + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += ":"; + c += padStart(o.c.second); + } + } else { + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += padStart(o.c.second); + } + } + if (precision === "second") break; + if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; +} + +// defaults for unspecified units in the supported calendars +var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + +// Units in the supported calendars, sorted by bigness +var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + +// standardize case and plurality in units +function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; +} +function normalizeUnitWithLocalWeeks(unit) { + switch (unit.toLowerCase()) { + case "localweekday": + case "localweekdays": + return "localWeekday"; + case "localweeknumber": + case "localweeknumbers": + return "localWeekNumber"; + case "localweekyear": + case "localweekyears": + return "localWeekYear"; + default: + return normalizeUnit(unit); + } +} + +// cache offsets for zones based on the current timestamp when this function is +// first called. When we are handling a datetime from components like (year, +// month, day, hour) in a time zone, we need a guess about what the timezone +// offset is so that we can convert into a UTC timestamp. One way is to find the +// offset of now in the zone. The actual date may have a different offset (for +// example, if we handle a date in June while we're in December in a zone that +// observes DST), but we can check and adjust that. +// +// When handling many dates, calculating the offset for now every time is +// expensive. It's just a guess, so we can cache the offset to use even if we +// are right on a time change boundary (we'll just correct in the other +// direction). Using a timestamp from first read is a slight optimization for +// handling dates close to the current date, since those dates will usually be +// in the same offset (we could set the timestamp statically, instead). We use a +// single timestamp for all zones to make things a bit more predictable. +// +// This is safe for quickDT (used by local() and utc()) because we don't fill in +// higher-order units from tsNow (as we do in fromObject, this requires that +// offset is calculated from tsNow). +/** + * @param {Zone} zone + * @return {number} + */ +function guessOffsetForZone(zone) { + if (zoneOffsetTs === undefined) { + zoneOffsetTs = Settings.now(); + } + + // Do not cache anything but IANA zones, because it is not safe to do so. + // Guessing an offset which is not present in the zone can cause wrong results from fixOffset + if (zone.type !== "iana") { + return zone.offset(zoneOffsetTs); + } + var zoneName = zone.name; + var offsetGuess = zoneOffsetGuessCache.get(zoneName); + if (offsetGuess === undefined) { + offsetGuess = zone.offset(zoneOffsetTs); + zoneOffsetGuessCache.set(zoneName, offsetGuess); + } + return offsetGuess; +} + +// this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. +function quickDT(obj, opts) { + var zone = normalizeZone(opts.zone, Settings.defaultZone); + if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } + var loc = Locale.fromObject(opts); + var ts, o; + + // assume we have the higher-order units + if (!isUndefined(obj.year)) { + for (var _i = 0, _orderedUnits = orderedUnits; _i < _orderedUnits.length; _i++) { + var u = _orderedUnits[_i]; + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + var offsetProvis = guessOffsetForZone(zone); + var _objToTS = objToTS(obj, offsetProvis, zone); + ts = _objToTS[0]; + o = _objToTS[1]; + } else { + ts = Settings.now(); + } + return new DateTime({ + ts: ts, + zone: zone, + loc: loc, + o: o + }); +} +function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + rounding = isUndefined(opts.rounding) ? "trunc" : opts.rounding, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? "round" : rounding); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + for (var _iterator = _createForOfIteratorHelperLoose(opts.units), _step; !(_step = _iterator()).done;) { + var unit = _step.value; + var count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); +} +function lastOpts(argList) { + var opts = {}, + args; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + return [opts, args]; +} + +/** + * Timestamp to use for cached zone offset guesses (exposed for test) + */ +var zoneOffsetTs; +/** + * Cache for zone offset guesses (exposed for test). + * + * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of + * zone.offset(). + */ +var zoneOffsetGuessCache = new Map(); + +/** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ +var DateTime = /*#__PURE__*/function (_Symbol$for) { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + if (unchanged) { + var _ref = [config.old.c, config.old.o]; + c = _ref[0]; + o = _ref[1]; + } else { + // If an offset has been passed and we have not been called from + // clone(), we can trust it and avoid the offset calculation. + var ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + + /** + * @access private + */ + this._zone = zone; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.invalid = invalid; + /** + * @access private + */ + this.weekData = null; + /** + * @access private + */ + this.localWeekData = null; + /** + * @access private + */ + this.c = c; + /** + * @access private + */ + this.o = o; + /** + * @access private + */ + this.isLuxonDateTime = true; + } + + // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + DateTime.now = function now() { + return new DateTime({}); + } + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */; + DateTime.local = function local() { + var _lastOpts = lastOpts(arguments), + opts = _lastOpts[0], + args = _lastOpts[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */; + DateTime.utc = function utc() { + var _lastOpts2 = lastOpts(arguments), + opts = _lastOpts2[0], + args = _lastOpts2[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */; + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + var ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.localWeekYear - a week year, according to the locale + * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale + * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system\'s locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: "en-US" }).toISODate() //=> '2021-12-26' + * @return {DateTime} + */; + DateTime.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + obj = obj || {}; + var zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + var loc = Locale.fromObject(opts); + var normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks); + var _usesLocalWeekValues = usesLocalWeekValues(normalized, loc), + minDaysInFirstWeek = _usesLocalWeekValues.minDaysInFirstWeek, + startOfWeek = _usesLocalWeekValues.startOfWeek; + var tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; + + // configure ourselves to deal with gregorian dates or week stuff + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + + // set default values for missing stuff + var foundFirst = false; + for (var _iterator2 = _createForOfIteratorHelperLoose(units), _step2; !(_step2 = _iterator2()).done;) { + var u = _step2.value; + var v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + + // make sure the values we have are in range + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + if (invalid) { + return DateTime.invalid(invalid); + } + + // compute the actual time + var gregorian = useWeekData ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); + + // gregorian data + weekday serves only to validate + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + if (!inst.isValid) { + return DateTime.invalid(inst.invalid); + } + return inst; + } + + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */; + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */; + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */; + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + specificOffset = _parseFromTokens[2], + invalid = _parseFromTokens[3]; + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text, specificOffset); + } + } + + /** + * @deprecated use fromFormat instead + */; + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + return DateTime.fromFormat(text, fmt, opts); + } + + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */; + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent. + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */; + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } + + /** + * Produce the format string for a set of options + * @param formatOpts + * @param localeOpts + * @returns {string} + */; + DateTime.parseFormatForOpts = function parseFormatForOpts(formatOpts, localeOpts) { + if (localeOpts === void 0) { + localeOpts = {}; + } + var tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map(function (t) { + return t ? t.val : null; + }).join(""); + } + + /** + * Produce the the fully expanded format token for the locale + * Does NOT quote characters, so quoted tokens will not round trip correctly + * @param fmt + * @param localeOpts + * @returns {string} + */; + DateTime.expandFormat = function expandFormat(fmt, localeOpts) { + if (localeOpts === void 0) { + localeOpts = {}; + } + var expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map(function (t) { + return t.val; + }).join(""); + }; + DateTime.resetCache = function resetCache() { + zoneOffsetTs = undefined; + zoneOffsetGuessCache.clear(); + } + + // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */; + var _proto = DateTime.prototype; + _proto.get = function get(unit) { + return this[unit]; + } + + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */; + /** + * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC + * in this DateTime's zone. During DST changes local time can be ambiguous, for example + * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`. + * This method will return both possible DateTimes if this DateTime's local time is ambiguous. + * @returns {DateTime[]} + */ + _proto.getPossibleOffsets = function getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + var dayMs = 86400000; + var minuteMs = 60000; + var localTS = objToLocalTS(this.c); + var oEarlier = this.zone.offset(localTS - dayMs); + var oLater = this.zone.offset(localTS + dayMs); + var o1 = this.zone.offset(localTS - oEarlier * minuteMs); + var o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + var ts1 = localTS - o1 * minuteMs; + var ts2 = localTS - o2 * minuteMs; + var c1 = tsToObj(ts1, o1); + var c2 = tsToObj(ts2, o2); + if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) { + return [clone(this, { + ts: ts1 + }), clone(this, { + ts: ts2 + })]; + } + return [this]; + } + + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */; + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOptions = function resolvedLocaleOptions(opts) { + if (opts === void 0) { + opts = {}; + } + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } + + // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */; + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + if (opts === void 0) { + opts = {}; + } + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */; + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */; + _proto.setZone = function setZone(zone, _temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + _ref2$keepLocalTime = _ref2.keepLocalTime, + keepLocalTime = _ref2$keepLocalTime === void 0 ? false : _ref2$keepLocalTime, + _ref2$keepCalendarTim = _ref2.keepCalendarTime, + keepCalendarTime = _ref2$keepCalendarTim === void 0 ? false : _ref2$keepCalendarTim; + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + newTS = _objToTS3[0]; + } + return clone(this, { + ts: newTS, + zone: zone + }); + } + } + + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */; + _proto.reconfigure = function reconfigure(_temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + locale = _ref3.locale, + numberingSystem = _ref3.numberingSystem, + outputCalendar = _ref3.outputCalendar; + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone(this, { + loc: loc + }); + } + + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */; + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * + * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`. + * They cannot be mixed with ISO-week units like `weekday`. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */; + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnitWithLocalWeeks); + var _usesLocalWeekValues2 = usesLocalWeekValues(normalized, this.loc), + minDaysInFirstWeek = _usesLocalWeekValues2.minDaysInFirstWeek, + startOfWeek = _usesLocalWeekValues2.startOfWeek; + var settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + var mixed; + if (settingWeekStuff) { + mixed = weekToGregorian(_extends({}, gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), normalized), minDaysInFirstWeek, startOfWeek); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(_extends({}, gregorianToOrdinal(this.c), normalized)); + } else { + mixed = _extends({}, this.toObject(), normalized); + + // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + return clone(this, { + ts: ts, + o: o + }); + } + + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */; + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */; + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */; + _proto.startOf = function startOf(unit, _temp3) { + var _ref4 = _temp3 === void 0 ? {} : _temp3, + _ref4$useLocaleWeeks = _ref4.useLocaleWeeks, + useLocaleWeeks = _ref4$useLocaleWeeks === void 0 ? false : _ref4$useLocaleWeeks; + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + case "quarters": + case "months": + o.day = 1; + // falls through + case "weeks": + case "days": + o.hour = 0; + // falls through + case "hours": + o.minute = 0; + // falls through + case "minutes": + o.second = 0; + // falls through + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + if (useLocaleWeeks) { + var startOfWeek = this.loc.getStartOfWeek(); + var weekday = this.weekday; + if (weekday < startOfWeek) { + o.weekNumber = this.weekNumber - 1; + } + o.weekday = startOfWeek; + } else { + o.weekday = 1; + } + } + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + return this.set(o); + } + + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */; + _proto.endOf = function endOf(unit, opts) { + var _this$plus; + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit, opts).minus(1) : this; + } + + // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */; + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */; + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */; + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=false] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z' + * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z' + * @return {string|null} + */; + _proto.toISO = function toISO(_temp4) { + var _ref5 = _temp4 === void 0 ? {} : _temp4, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format, + _ref5$suppressSeconds = _ref5.suppressSeconds, + suppressSeconds = _ref5$suppressSeconds === void 0 ? false : _ref5$suppressSeconds, + _ref5$suppressMillise = _ref5.suppressMilliseconds, + suppressMilliseconds = _ref5$suppressMillise === void 0 ? false : _ref5$suppressMillise, + _ref5$includeOffset = _ref5.includeOffset, + includeOffset = _ref5$includeOffset === void 0 ? true : _ref5$includeOffset, + _ref5$extendedZone = _ref5.extendedZone, + extendedZone = _ref5$extendedZone === void 0 ? false : _ref5$extendedZone, + _ref5$precision = _ref5.precision, + precision = _ref5$precision === void 0 ? "milliseconds" : _ref5$precision; + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + var ext = format === "extended"; + var c = _toISODate(this, ext, precision); + if (orderedUnits.indexOf(precision) >= 3) c += "T"; + c += _toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + return c; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'. + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05' + * @return {string|null} + */; + _proto.toISODate = function toISODate(_temp5) { + var _ref6 = _temp5 === void 0 ? {} : _temp5, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format, + _ref6$precision = _ref6.precision, + precision = _ref6$precision === void 0 ? "day" : _ref6$precision; + if (!this.isValid) { + return null; + } + return _toISODate(this, format === "extended", normalizeUnit(precision)); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */; + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z' + * @return {string} + */; + _proto.toISOTime = function toISOTime(_temp6) { + var _ref7 = _temp6 === void 0 ? {} : _temp6, + _ref7$suppressMillise = _ref7.suppressMilliseconds, + suppressMilliseconds = _ref7$suppressMillise === void 0 ? false : _ref7$suppressMillise, + _ref7$suppressSeconds = _ref7.suppressSeconds, + suppressSeconds = _ref7$suppressSeconds === void 0 ? false : _ref7$suppressSeconds, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includePrefix = _ref7.includePrefix, + includePrefix = _ref7$includePrefix === void 0 ? false : _ref7$includePrefix, + _ref7$extendedZone = _ref7.extendedZone, + extendedZone = _ref7$extendedZone === void 0 ? false : _ref7$extendedZone, + _ref7$format = _ref7.format, + format = _ref7$format === void 0 ? "extended" : _ref7$format, + _ref7$precision = _ref7.precision, + precision = _ref7$precision === void 0 ? "milliseconds" : _ref7$precision; + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + var c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? "T" : ""; + return c + _toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + } + + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */; + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */; + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string|null} + */; + _proto.toSQLDate = function toSQLDate() { + if (!this.isValid) { + return null; + } + return _toISODate(this, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */; + _proto.toSQLTime = function toSQLTime(_temp7) { + var _ref8 = _temp7 === void 0 ? {} : _temp7, + _ref8$includeOffset = _ref8.includeOffset, + includeOffset = _ref8$includeOffset === void 0 ? true : _ref8$includeOffset, + _ref8$includeZone = _ref8.includeZone, + includeZone = _ref8$includeZone === void 0 ? false : _ref8$includeZone, + _ref8$includeOffsetSp = _ref8.includeOffsetSpace, + includeOffsetSpace = _ref8$includeOffsetSp === void 0 ? true : _ref8$includeOffsetSp; + var fmt = "HH:mm:ss.SSS"; + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + return toTechFormat(this, fmt, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */; + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) { + return null; + } + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */; + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID; + } + + /** + * Returns a string representation of this DateTime appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "DateTime { ts: " + this.toISO() + ", zone: " + this.zone.name + ", locale: " + this.locale + " }"; + } else { + return "DateTime { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */; + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */; + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + + /** + * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime. + * @return {number} + */; + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */; + _proto.toUnixInteger = function toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */; + _proto.toJSON = function toJSON() { + return this.toISO(); + } + + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */; + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */; + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return {}; + var base = _extends({}, this.c); + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */; + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + + // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */; + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (opts === void 0) { + opts = {}; + } + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + var durOpts = _extends({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + return otherIsLater ? diffed.negate() : diffed; + } + + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */; + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (opts === void 0) { + opts = {}; + } + return this.diff(DateTime.now(), unit, opts); + } + + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval|DateTime} + */; + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */; + _proto.hasSame = function hasSame(otherDateTime, unit, opts) { + if (!this.isValid) return false; + var inputMs = otherDateTime.valueOf(); + var adjustedToZone = this.setZone(otherDateTime.zone, { + keepLocalTime: true + }); + return adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts); + } + + /** + * Equality check + * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */; + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {string} [options.rounding="trunc"] - rounding method to use when rounding the numbers in the output. Can be "trunc" (toward zero), "expand" (away from zero), "round", "floor", or "ceil". + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */; + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({}, { + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + var units = ["years", "months", "days", "hours", "minutes", "seconds"]; + var unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + return diffRelative(base, this.plus(padding), _extends({}, options, { + numeric: "always", + units: units, + unit: unit + })); + } + + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */; + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({}, { + zone: this.zone + }), this, _extends({}, options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */; + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */; + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } + + // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */; + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + + /** + * @deprecated use fromFormatExplain instead + */; + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + return DateTime.fromFormatExplain(text, fmt, options); + } + + /** + * Build a parser for `fmt` using the given locale. This parser can be passed + * to {@link DateTime.fromFormatParser} to a parse a date in this format. This + * can be used to optimize cases where many dates need to be parsed in a + * specific format. + * + * @param {String} fmt - the format the string is expected to be in (see + * description) + * @param {Object} options - options used to set locale and numberingSystem + * for parser + * @returns {TokenParser} - opaque object to be used + */; + DateTime.buildFormatParser = function buildFormatParser(fmt, options) { + if (options === void 0) { + options = {}; + } + var _options2 = options, + _options2$locale = _options2.locale, + locale = _options2$locale === void 0 ? null : _options2$locale, + _options2$numberingSy = _options2.numberingSystem, + numberingSystem = _options2$numberingSy === void 0 ? null : _options2$numberingSy, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return new TokenParser(localeToUse, fmt); + } + + /** + * Create a DateTime from an input string and format parser. + * + * The format parser must have been created with the same locale as this call. + * + * @param {String} text - the string to parse + * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser} + * @param {Object} opts - options taken by fromFormat() + * @returns {DateTime} + */; + DateTime.fromFormatParser = function fromFormatParser(text, formatParser, opts) { + if (opts === void 0) { + opts = {}; + } + if (isUndefined(text) || isUndefined(formatParser)) { + throw new InvalidArgumentError("fromFormatParser requires an input string and a format parser"); + } + var _opts2 = opts, + _opts2$locale = _opts2.locale, + locale = _opts2$locale === void 0 ? null : _opts2$locale, + _opts2$numberingSyste = _opts2.numberingSystem, + numberingSystem = _opts2$numberingSyste === void 0 ? null : _opts2$numberingSyste, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + if (!localeToUse.equals(formatParser.locale)) { + throw new InvalidArgumentError("fromFormatParser called with a locale of " + localeToUse + ", " + ("but the format parser was created for " + formatParser.locale)); + } + var _formatParser$explain = formatParser.explainFromTokens(text), + result = _formatParser$explain.result, + zone = _formatParser$explain.zone, + specificOffset = _formatParser$explain.specificOffset, + invalidReason = _formatParser$explain.invalidReason; + if (invalidReason) { + return DateTime.invalid(invalidReason); + } else { + return parseDataToDateTime(result, zone, opts, "format " + formatParser.format, text, specificOffset); + } + } + + // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */; + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + }, { + key: "zone", + get: function get() { + return this._zone; + } + + /** + * Get the name of the time zone. + * @type {string} + */ + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + + /** + * Returns true if this date is on a weekend according to the locale, false otherwise + * @returns {boolean} + */ + }, { + key: "isWeekend", + get: function get() { + return this.isValid && this.loc.getWeekendDays().includes(this.weekday); + } + + /** + * Get the day of the week according to the locale. + * 1 is the first day of the week and 7 is the last day of the week. + * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1, + * @returns {number} + */ + }, { + key: "localWeekday", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN; + } + + /** + * Get the week number of the week year according to the locale. Different locales assign week numbers differently, + * because the week can start on different days of the week (see localWeekday) and because a different number of days + * is required for a week to count as the first week of a year. + * @returns {number} + */ + }, { + key: "localWeekNumber", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN; + } + + /** + * Get the week year according to the locale. Different locales assign week numbers (and therefor week years) + * differently, see localWeekNumber. + * @returns {number} + */ + }, { + key: "localWeekYear", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN; + } + + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.isUniversal : null; + } + + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1, + day: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's local week year + * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52 + * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53 + * @type {number} + */ + }, { + key: "weeksInLocalWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.localWeekYear, this.loc.getMinDaysInFirstWeek(), this.loc.getStartOfWeek()) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_MED_WITH_WEEKDAY", + get: function get() { + return DATE_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + return DateTime; +}(Symbol.for("nodejs.util.inspect.custom")); +function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } +} + +var VERSION = "3.7.2"; + +exports.DateTime = DateTime; +exports.Duration = Duration; +exports.FixedOffsetZone = FixedOffsetZone; +exports.IANAZone = IANAZone; +exports.Info = Info; +exports.Interval = Interval; +exports.InvalidZone = InvalidZone; +exports.Settings = Settings; +exports.SystemZone = SystemZone; +exports.VERSION = VERSION; +exports.Zone = Zone; +//# sourceMappingURL=luxon.js.map diff --git a/node_modules/luxon/build/cjs-browser/luxon.js.map b/node_modules/luxon/build/cjs-browser/luxon.js.map new file mode 100644 index 00000000..e965cb94 --- /dev/null +++ b/node_modules/luxon/build/cjs-browser/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/zone.js","../../src/zones/systemZone.js","../../src/zones/IANAZone.js","../../src/impl/locale.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/impl/digits.js","../../src/settings.js","../../src/impl/invalid.js","../../src/impl/conversions.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/tokenParser.js","../../src/datetime.js","../../src/luxon.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n let dtf = dtfCache.get(zoneName);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zoneName,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n dtfCache.set(zoneName, dtf);\n }\n return dtf;\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n let zone = ianaZoneCache.get(name);\n if (zone === undefined) {\n ianaZoneCache.set(name, (zone = new IANAZone(name)));\n }\n return zone;\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache.clear();\n dtfCache.clear();\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n if (!this.valid) return NaN;\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache.get(key);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache.set(key, dtf);\n }\n return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache.get(key);\n if (inf === undefined) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache.set(key, inf);\n }\n return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache.get(key);\n if (inf === undefined) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache.set(key, inf);\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n let opts = intlResolvedOptionsCache.get(locString);\n if (opts === undefined) {\n opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n intlResolvedOptionsCache.set(locString, opts);\n }\n return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache.get(locString);\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n if (!(\"minimalDays\" in data)) {\n data = { ...fallbackWeekSettings, ...data };\n }\n weekInfoCache.set(locString, data);\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache.clear();\n intlNumCache.clear();\n intlRelCache.clear();\n intlResolvedOptionsCache.clear();\n weekInfoCache.clear();\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n // As such, just use format() instead of formatToParts() and take the whole string\n const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n format &= !monthSpecialCase;\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n const mapper = !monthSpecialCase\n ? (dt) => this.extract(dt, intl, \"month\")\n : (dt) => this.dtFormatter(dt, intl).format();\n this.monthsCache[formatStr][length] = mapMonths(mapper);\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n let appendCache = digitRegexCache.get(ns);\n if (appendCache === undefined) {\n appendCache = new Map();\n digitRegexCache.set(ns, appendCache);\n }\n let regex = appendCache.get(append);\n if (regex === undefined) {\n regex = new RegExp(`${numberingSystems[ns]}${append}`);\n appendCache.set(append, regex);\n }\n\n return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n const factor = 10 ** digits;\n switch (rounding) {\n case \"expand\":\n return number > 0\n ? Math.ceil(number * factor) / factor\n : Math.floor(number * factor) / factor;\n case \"trunc\":\n return Math.trunc(number * factor) / factor;\n case \"round\":\n return Math.round(number * factor) / factor;\n case \"floor\":\n return Math.floor(number * factor) / factor;\n case \"ceil\":\n return Math.ceil(number * factor) / factor;\n default:\n throw new RangeError(`Value rounding ${rounding} is out of range`);\n }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n // turn '' into a literal signal quote instead of just skipping the empty literal\n if (currentFull.length > 0 || bracketed) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull === \"\" ? \"'\" : currentFull,\n });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0, signDisplay = undefined) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n if (signDisplay) {\n opts.signDisplay = signDisplay;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"milliseconds\";\n case \"s\":\n return \"seconds\";\n case \"m\":\n return \"minutes\";\n case \"h\":\n return \"hours\";\n case \"d\":\n return \"days\";\n case \"w\":\n return \"weeks\";\n case \"M\":\n return \"months\";\n case \"y\":\n return \"years\";\n default:\n return null;\n }\n },\n tokenToString = (lildur, info) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n const inversionFactor =\n info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n let signDisplay;\n if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n signDisplay = \"never\";\n } else if (this.opts.signMode === \"all\") {\n signDisplay = \"always\";\n } else {\n // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n signDisplay = \"auto\";\n }\n return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n durationInfo = {\n isNegativeDuration: collapsed < 0,\n // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n // in order\n largestUnit: Object.keys(collapsed.values)[0],\n };\n return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n * @example\n * ```js\n * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const showZeros = opts.showZeros !== false;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val) || (val === 0 && !showZeros)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Removes all units with values equal to 0 from this Duration.\n * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n * @return {Duration}\n */\n removeZeros() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.values);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval. This is the first instant which is not part of the interval\n * (Interval is half-open).\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns the last DateTime included in the interval (since end is not part of the interval)\n * @type {DateTime}\n */\n get lastDateTime() {\n return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into an equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n * and ending with the latest.\n *\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended, precision) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (precision === \"year\") return c;\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n c += \"-\";\n } else {\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n }\n c += padStart(o.c.day);\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n) {\n let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n c = \"\";\n switch (precision) {\n case \"day\":\n case \"month\":\n case \"year\":\n break;\n default:\n c += padStart(o.c.hour);\n if (precision === \"hour\") break;\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += \":\";\n c += padStart(o.c.second);\n }\n } else {\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += padStart(o.c.second);\n }\n }\n if (precision === \"second\") break;\n if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n // Do not cache anything but IANA zones, because it is not safe to do so.\n // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n if (zone.type !== \"iana\") {\n return zone.offset(zoneOffsetTs);\n }\n const zoneName = zone.name;\n let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n if (offsetGuess === undefined) {\n offsetGuess = zone.offset(zoneOffsetTs);\n zoneOffsetGuessCache.set(zoneName, offsetGuess);\n }\n return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache.clear();\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n * @return {string|null}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext, precision);\n if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n c += toISOTime(\n this,\n ext,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n );\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n * @return {string|null}\n */\n toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\", normalizeUnit(precision));\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string|null}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval|DateTime}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n"],"names":["LuxonError","_Error","_inheritsLoose","apply","arguments","_wrapNativeSuper","Error","InvalidDateTimeError","_LuxonError","reason","call","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","unit","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","_proto","prototype","offsetName","ts","opts","formatOffset","format","offset","equals","otherZone","_createClass","key","get","name","singleton","SystemZone","_Zone","_ref","locale","parseZoneInfo","Date","getTimezoneOffset","type","Intl","DateTimeFormat","resolvedOptions","timeZone","dtfCache","Map","makeDTF","zoneName","dtf","undefined","hour12","era","set","typeToPos","hackyOffset","date","formatted","replace","parsed","exec","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","formatToParts","filled","i","length","_formatted$i","value","pos","isUndefined","parseInt","ianaZoneCache","IANAZone","create","zone","resetCache","clear","isValidSpecifier","isValidZone","e","_this","valid","NaN","isNaN","_ref2","adOrBc","Math","abs","adjustedHour","asUTC","objToLocalTS","millisecond","asTS","over","intlLFCache","getCachedLF","locString","JSON","stringify","ListFormat","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","NumberFormat","intlRelCache","getCachedRTF","_opts","base","cacheKeyOpts","_objectWithoutPropertiesLoose","_excluded","RelativeTimeFormat","sysLocaleCache","systemLocale","intlResolvedOptionsCache","getCachedIntResolvedOptions","weekInfoCache","getCachedWeekInfo","data","Locale","getWeekInfo","weekInfo","_extends","fallbackWeekSettings","parseLocaleString","localeStr","xIndex","indexOf","substring","uIndex","options","selectedStr","smaller","_options","numberingSystem","calendar","intlConfigString","outputCalendar","includes","mapMonths","f","ms","dt","DateTime","utc","push","mapWeekdays","listStuff","loc","englishFn","intlFn","mode","listingMode","supportsFastNumbers","startsWith","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","_excluded2","Object","keys","intlOpts","useGrouping","minimumIntegerDigits","fixed","roundTo","padStart","PolyDateFormatter","originalZone","z","gmtOffset","offsetZ","setZone","plus","minutes","_proto2","map","join","toJSDate","parts","part","PolyRelFormatter","isEnglish","style","hasRelative","rtf","_proto3","count","English","numeric","firstDay","minimalDays","weekend","fromOpts","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","_temp","numbering","_parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","_proto4","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","months","_this2","monthSpecialCase","formatStr","mapper","extract","dtFormatter","weekdays","_this3","meridiems","_this4","eras","_this5","field","df","results","matching","find","m","toLowerCase","numberFormatter","fastNumbers","relFormatter","listFormatter","getWeekSettings","hasLocaleWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","toString","FixedOffsetZone","instance","utcInstance","parseSpecifier","r","match","signedOffset","InvalidZone","normalizeZone","input","defaultZone","isString","lowered","isNumber","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","split","parseDigits","str","code","charCodeAt","search","_numberingSystemsUTF","min","max","digitRegexCache","resetDigitRegexCache","digitRegex","append","ns","appendCache","regex","RegExp","now","twoDigitCutoffYear","throwOnInvalid","resetCaches","cutoffYear","t","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","d","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","findIndex","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekNumber","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","usesLocalWeekValues","obj","hasLocaleWeekData","localWeekday","localWeekNumber","localWeekYear","hasIsoWeekData","hasInvalidWeekData","validYear","isInteger","validWeek","integerBetween","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","o","isDate","maybeArray","thing","Array","isArray","bestBy","arr","by","compare","reduce","best","next","pair","pick","a","k","hasOwnProperty","prop","settings","some","v","from","bottom","top","floorMod","x","isNeg","padded","parseInteger","string","parseFloating","parseFloat","parseMillis","fraction","number","digits","rounding","factor","pow","ceil","trunc","round","RangeError","modMonth","modYear","firstWeekOffset","fwdlw","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","Number","offMin","offMinSigned","is","asNumber","numericValue","isFinite","normalizeObject","normalizer","normalized","u","hours","sign","monthsLong","monthsShort","monthsNarrow","concat","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","meridiemForDateTime","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","_iterator","_createForOfIteratorHelperLoose","_step","done","token","literal","val","macroTokenToFormatOpts","D","Formats","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","parseFormat","fmt","current","currentFull","bracketed","c","charAt","test","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","start","formatRange","end","num","p","signDisplay","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","isValid","meridiem","maybeMacro","slice","quarter","formatDurationFromString","dur","invertLargest","signMode","tokenToField","lildur","info","mapped","inversionFactor","isNegativeDuration","largestUnit","tokens","realTokens","found","collapsed","shiftTo","filter","durationInfo","values","ianaRegex","combineRegexes","_len","regexes","_key","full","source","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","_ex","parse","_len3","patterns","_key3","_i","_patterns","_patterns$_i","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","item","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","trim","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","conf","conversionAccuracy","matrix","Duration","durationToMillis","vals","_vals$milliseconds","sum","normalizeValues","reduceRight","previous","previousVal","conv","rollUp","removeZeroes","newVals","_Object$entries","entries","_Object$entries$_i","_Symbol$for","config","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","text","_parseISODuration","fromISOTime","_parseISOTimeOnly","week","toFormat","fmtOpts","toHuman","showZeros","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","dateTime","toJSON","invalidReason","valueOf","duration","_i2","_orderedUnits","minus","negate","mapUnits","fn","_i3","_Object$keys","mixed","reconfigure","as","normalize","rescale","shiftToAll","built","accumulated","lastUnit","_i4","_orderedUnits2","own","ak","negated","_i5","_Object$keys2","removeZeros","eq","v1","v2","_i6","_orderedUnits3","Symbol","for","validateStartEnd","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","_split","startIsValid","endIsValid","isInterval","toDuration","startOf","useLocaleWeeks","diff","hasSame","isEmpty","isAfter","isBefore","contains","splitAt","dateTimes","sorted","sort","b","added","splitBy","idx","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","_intervals$sort$reduc","sofar","final","xor","_Array$prototype","currentCount","ends","time","flattened","difference","toLocaleString","toISODate","dateFormat","_temp2","_ref3","_ref3$separator","separator","mapEndpoints","mapFn","Info","hasDST","proto","isUniversal","isValidIANAZone","_ref$locale","_ref$locObj","locObj","getMinimumDaysInFirstWeek","_ref2$locale","_ref2$locObj","getWeekendWeekdays","_temp3","_ref3$locale","_ref3$locObj","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_ref4$locObj","_ref4$outputCalendar","monthsFormat","_temp5","_ref5","_ref5$locale","_ref5$numberingSystem","_ref5$locObj","_ref5$outputCalendar","_temp6","_ref6","_ref6$locale","_ref6$numberingSystem","_ref6$locObj","weekdaysFormat","_temp7","_ref7","_ref7$locale","_ref7$numberingSystem","_ref7$locObj","_temp8","_ref8","_ref8$locale","_temp9","_ref9","_ref9$locale","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highOrderDiffs","differs","lowestOrder","highWater","_differs","_differs$_i","differ","_highOrderDiffs","remainingMillis","lowerOrderUnits","_cursor$plus","_Duration$fromMillis","MISSING_FTP","intUnit","post","deser","NBSP","String","fromCharCode","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","groups","h","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","tokenForPart","resolvedOpts","isSpace","actualType","buildRegex","re","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","specificOffset","Z","q","M","G","y","S","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatOptsToTokens","expandMacroTokens","TokenParser","disqualifyingUnit","_buildRegex","regexString","explainFromTokens","_match","rawMatches","parser","parseFromTokens","_explainFromTokens","formatter","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","precision","longFormat","extendedZone","showSeconds","ianaName","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","normalizeUnitWithLocalWeeks","guessOffsetForZone","zoneOffsetTs","offsetGuess","zoneOffsetGuessCache","quickDT","offsetProvis","_objToTS","diffRelative","calendary","lastOpts","argList","args","unchanged","ot","_zone","isLuxonDateTime","_lastOpts","_lastOpts2","fromJSDate","zoneToUse","fromSeconds","_usesLocalWeekValues","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","_iterator2","_step2","higherOrderInvalid","gregorian","_objToTS2","tsFinal","offsetFinal","_parseISODate","fromRFC2822","_parseRFC2822Date","fromHTTP","_parseHTTPDate","fromFormat","_opts$locale","_opts$numberingSystem","localeToUse","_parseFromTokens","fromString","fromSQL","_parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","expanded","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","resolvedLocaleOptions","_Formatter$create$res","toLocal","_ref2$keepLocalTime","_ref2$keepCalendarTim","keepCalendarTime","newTS","asObj","_objToTS3","setLocale","_usesLocalWeekValues2","settingWeekStuff","_objToTS4","_ref4$useLocaleWeeks","normalizedUnit","endOf","_this$plus","toLocaleParts","_ref5$format","_ref5$suppressSeconds","_ref5$suppressMillise","_ref5$includeOffset","_ref5$extendedZone","_ref5$precision","ext","_ref6$format","_ref6$precision","toISOWeekDate","_ref7$suppressMillise","_ref7$suppressSeconds","_ref7$includeOffset","_ref7$includePrefix","_ref7$extendedZone","_ref7$format","_ref7$precision","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref8$includeOffset","_ref8$includeZone","includeZone","_ref8$includeOffsetSp","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","buildFormatParser","_options2","_options2$locale","_options2$numberingSy","fromFormatParser","formatParser","_opts2","_opts2$locale","_opts2$numberingSyste","_formatParser$explain","dateTimeish","VERSION"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/luxon/build/es6/luxon.mjs b/node_modules/luxon/build/es6/luxon.mjs new file mode 100644 index 00000000..06e1d6cb --- /dev/null +++ b/node_modules/luxon/build/es6/luxon.mjs @@ -0,0 +1,8133 @@ +// these aren't really private, but nor are they really useful to document + +/** + * @private + */ +class LuxonError extends Error {} + +/** + * @private + */ +class InvalidDateTimeError extends LuxonError { + constructor(reason) { + super(`Invalid DateTime: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class InvalidIntervalError extends LuxonError { + constructor(reason) { + super(`Invalid Interval: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class InvalidDurationError extends LuxonError { + constructor(reason) { + super(`Invalid Duration: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class ConflictingSpecificationError extends LuxonError {} + +/** + * @private + */ +class InvalidUnitError extends LuxonError { + constructor(unit) { + super(`Invalid unit ${unit}`); + } +} + +/** + * @private + */ +class InvalidArgumentError extends LuxonError {} + +/** + * @private + */ +class ZoneIsAbstractError extends LuxonError { + constructor() { + super("Zone is an abstract class"); + } +} + +/** + * @private + */ + +const n = "numeric", + s = "short", + l = "long"; + +const DATE_SHORT = { + year: n, + month: n, + day: n, +}; + +const DATE_MED = { + year: n, + month: s, + day: n, +}; + +const DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, +}; + +const DATE_FULL = { + year: n, + month: l, + day: n, +}; + +const DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l, +}; + +const TIME_SIMPLE = { + hour: n, + minute: n, +}; + +const TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n, +}; + +const TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s, +}; + +const TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l, +}; + +const TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23", +}; + +const TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", +}; + +const TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s, +}; + +const TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l, +}; + +const DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n, +}; + +const DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n, +}; + +const DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n, +}; + +const DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n, +}; + +const DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n, +}; + +const DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s, +}; + +const DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s, +}; + +const DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l, +}; + +const DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l, +}; + +/** + * @interface + */ +class Zone { + /** + * The type of zone + * @abstract + * @type {string} + */ + get type() { + throw new ZoneIsAbstractError(); + } + + /** + * The name of this zone. + * @abstract + * @type {string} + */ + get name() { + throw new ZoneIsAbstractError(); + } + + /** + * The IANA name of this zone. + * Defaults to `name` if not overwritten by a subclass. + * @abstract + * @type {string} + */ + get ianaName() { + return this.name; + } + + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + get isUniversal() { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + offset(ts) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + get isValid() { + throw new ZoneIsAbstractError(); + } +} + +let singleton$1 = null; + +/** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ +class SystemZone extends Zone { + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + static get instance() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + + /** @override **/ + get type() { + return "system"; + } + + /** @override **/ + get name() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName(ts, { format, locale }) { + return parseZoneInfo(ts, format, locale); + } + + /** @override **/ + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/ + offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + + /** @override **/ + equals(otherZone) { + return otherZone.type === "system"; + } + + /** @override **/ + get isValid() { + return true; + } +} + +const dtfCache = new Map(); +function makeDTF(zoneName) { + let dtf = dtfCache.get(zoneName); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zoneName, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short", + }); + dtfCache.set(zoneName, dtf); + } + return dtf; +} + +const typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6, +}; + +function hackyOffset(dtf, date) { + const formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; +} + +function partsOffset(dtf, date) { + const formatted = dtf.formatToParts(date); + const filled = []; + for (let i = 0; i < formatted.length; i++) { + const { type, value } = formatted[i]; + const pos = typeToPos[type]; + + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; +} + +const ianaZoneCache = new Map(); +/** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ +class IANAZone extends Zone { + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + static create(name) { + let zone = ianaZoneCache.get(name); + if (zone === undefined) { + ianaZoneCache.set(name, (zone = new IANAZone(name))); + } + return zone; + } + + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + static resetCache() { + ianaZoneCache.clear(); + dtfCache.clear(); + } + + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead. + * @return {boolean} + */ + static isValidSpecifier(s) { + return this.isValidZone(s); + } + + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + static isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { timeZone: zone }).format(); + return true; + } catch (e) { + return false; + } + } + + constructor(name) { + super(); + /** @private **/ + this.zoneName = name; + /** @private **/ + this.valid = IANAZone.isValidZone(name); + } + + /** + * The type of zone. `iana` for all instances of `IANAZone`. + * @override + * @type {string} + */ + get type() { + return "iana"; + } + + /** + * The name of this zone (i.e. the IANA zone name). + * @override + * @type {string} + */ + get name() { + return this.zoneName; + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns false for all IANA zones. + * @override + * @type {boolean} + */ + get isUniversal() { + return false; + } + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @override + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + offsetName(ts, { format, locale }) { + return parseZoneInfo(ts, format, locale, this.name); + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @override + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + offset(ts) { + if (!this.valid) return NaN; + const date = new Date(ts); + + if (isNaN(date)) return NaN; + + const dtf = makeDTF(this.name); + let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts + ? partsOffset(dtf, date) + : hackyOffset(dtf, date); + + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + + // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + const adjustedHour = hour === 24 ? 0 : hour; + + const asUTC = objToLocalTS({ + year, + month, + day, + hour: adjustedHour, + minute, + second, + millisecond: 0, + }); + + let asTS = +date; + const over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + + /** + * Return whether this Zone is equal to another zone + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + + /** + * Return whether this Zone is valid. + * @override + * @type {boolean} + */ + get isValid() { + return this.valid; + } +} + +// todo - remap caching + +let intlLFCache = {}; +function getCachedLF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; +} + +const intlDTCache = new Map(); +function getCachedDTF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlDTCache.get(key); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache.set(key, dtf); + } + return dtf; +} + +const intlNumCache = new Map(); +function getCachedINF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let inf = intlNumCache.get(key); + if (inf === undefined) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache.set(key, inf); + } + return inf; +} + +const intlRelCache = new Map(); +function getCachedRTF(locString, opts = {}) { + const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options + const key = JSON.stringify([locString, cacheKeyOpts]); + let inf = intlRelCache.get(key); + if (inf === undefined) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache.set(key, inf); + } + return inf; +} + +let sysLocaleCache = null; +function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } +} + +const intlResolvedOptionsCache = new Map(); +function getCachedIntResolvedOptions(locString) { + let opts = intlResolvedOptionsCache.get(locString); + if (opts === undefined) { + opts = new Intl.DateTimeFormat(locString).resolvedOptions(); + intlResolvedOptionsCache.set(locString, opts); + } + return opts; +} + +const weekInfoCache = new Map(); +function getCachedWeekInfo(locString) { + let data = weekInfoCache.get(locString); + if (!data) { + const locale = new Intl.Locale(locString); + // browsers currently implement this as a property, but spec says it should be a getter function + data = "getWeekInfo" in locale ? locale.getWeekInfo() : locale.weekInfo; + // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86 + if (!("minimalDays" in data)) { + data = { ...fallbackWeekSettings, ...data }; + } + weekInfoCache.set(locString, data); + } + return data; +} + +function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + + // private subtags and unicode subtags have ordering requirements, + // and we're not properly parsing this, so just strip out the + // private ones if they exist. + const xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + + const uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + let options; + let selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + const smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + + const { numberingSystem, calendar } = options; + return [selectedStr, numberingSystem, calendar]; + } +} + +function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + + if (outputCalendar) { + localeStr += `-ca-${outputCalendar}`; + } + + if (numberingSystem) { + localeStr += `-nu-${numberingSystem}`; + } + return localeStr; + } else { + return localeStr; + } +} + +function mapMonths(f) { + const ms = []; + for (let i = 1; i <= 12; i++) { + const dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; +} + +function mapWeekdays(f) { + const ms = []; + for (let i = 1; i <= 7; i++) { + const dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; +} + +function listStuff(loc, length, englishFn, intlFn) { + const mode = loc.listingMode(); + + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } +} + +function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return ( + loc.numberingSystem === "latn" || + !loc.locale || + loc.locale.startsWith("en") || + getCachedIntResolvedOptions(loc.locale).numberingSystem === "latn" + ); + } +} + +/** + * @private + */ + +class PolyNumberFormatter { + constructor(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + + const { padTo, floor, ...otherOpts } = opts; + + if (!forceSimple || Object.keys(otherOpts).length > 0) { + const intlOpts = { useGrouping: false, ...opts }; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + + format(i) { + if (this.inf) { + const fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + const fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(fixed, this.padTo); + } + } +} + +/** + * @private + */ + +class PolyDateFormatter { + constructor(dt, intl, opts) { + this.opts = opts; + this.originalZone = undefined; + + let z = undefined; + if (this.opts.timeZone) { + // Don't apply any workarounds if a timeZone is explicitly provided in opts + this.dt = dt; + } else if (dt.zone.type === "fixed") { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + const gmtOffset = -1 * (dt.offset / 60); + const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so + // we manually apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ minutes: dt.offset }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + // Custom zones can have any offset / offsetName so we just manually + // apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ minutes: dt.offset }); + this.originalZone = dt.zone; + } + + const intlOpts = { ...this.opts }; + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + + format() { + if (this.originalZone) { + // If we have to substitute in the actual zone name, we have to use + // formatToParts so that the timezone can be replaced. + return this.formatToParts() + .map(({ value }) => value) + .join(""); + } + return this.dtf.format(this.dt.toJSDate()); + } + + formatToParts() { + const parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map((part) => { + if (part.type === "timeZoneName") { + const offsetName = this.originalZone.offsetName(this.dt.ts, { + locale: this.dt.locale, + format: this.opts.timeZoneName, + }); + return { + ...part, + value: offsetName, + }; + } else { + return part; + } + }); + } + return parts; + } + + resolvedOptions() { + return this.dtf.resolvedOptions(); + } +} + +/** + * @private + */ +class PolyRelFormatter { + constructor(intl, isEnglish, opts) { + this.opts = { style: "long", ...opts }; + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + + format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + } + + formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + } +} + +const fallbackWeekSettings = { + firstDay: 1, + minimalDays: 4, + weekend: [6, 7], +}; + +/** + * @private + */ +class Locale { + static fromOpts(opts) { + return Locale.create( + opts.locale, + opts.numberingSystem, + opts.outputCalendar, + opts.weekSettings, + opts.defaultToEN + ); + } + + static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) { + const specifiedLocale = locale || Settings.defaultLocale; + // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats + const localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings; + return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale); + } + + static resetCache() { + sysLocaleCache = null; + intlDTCache.clear(); + intlNumCache.clear(); + intlRelCache.clear(); + intlResolvedOptionsCache.clear(); + weekInfoCache.clear(); + } + + static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) { + return Locale.create(locale, numberingSystem, outputCalendar, weekSettings); + } + + constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) { + const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale); + + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.weekSettings = weekSettings; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + + this.weekdaysCache = { format: {}, standalone: {} }; + this.monthsCache = { format: {}, standalone: {} }; + this.meridiemCache = null; + this.eraCache = {}; + + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + + get fastNumbers() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + + return this.fastNumbersCached; + } + + listingMode() { + const isActuallyEn = this.isEnglish(); + const hasNoWeirdness = + (this.numberingSystem === null || this.numberingSystem === "latn") && + (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + } + + clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create( + alts.locale || this.specifiedLocale, + alts.numberingSystem || this.numberingSystem, + alts.outputCalendar || this.outputCalendar, + validateWeekSettings(alts.weekSettings) || this.weekSettings, + alts.defaultToEN || false + ); + } + } + + redefaultToEN(alts = {}) { + return this.clone({ ...alts, defaultToEN: true }); + } + + redefaultToSystem(alts = {}) { + return this.clone({ ...alts, defaultToEN: false }); + } + + months(length, format = false) { + return listStuff(this, length, months, () => { + // Workaround for "ja" locale: formatToParts does not label all parts of the month + // as "month" and for this locale there is no difference between "format" and "non-format". + // As such, just use format() instead of formatToParts() and take the whole string + const monthSpecialCase = this.intl === "ja" || this.intl.startsWith("ja-"); + format &= !monthSpecialCase; + const intl = format ? { month: length, day: "numeric" } : { month: length }, + formatStr = format ? "format" : "standalone"; + if (!this.monthsCache[formatStr][length]) { + const mapper = !monthSpecialCase + ? (dt) => this.extract(dt, intl, "month") + : (dt) => this.dtFormatter(dt, intl).format(); + this.monthsCache[formatStr][length] = mapMonths(mapper); + } + return this.monthsCache[formatStr][length]; + }); + } + + weekdays(length, format = false) { + return listStuff(this, length, weekdays, () => { + const intl = format + ? { weekday: length, year: "numeric", month: "long", day: "numeric" } + : { weekday: length }, + formatStr = format ? "format" : "standalone"; + if (!this.weekdaysCache[formatStr][length]) { + this.weekdaysCache[formatStr][length] = mapWeekdays((dt) => + this.extract(dt, intl, "weekday") + ); + } + return this.weekdaysCache[formatStr][length]; + }); + } + + meridiems() { + return listStuff( + this, + undefined, + () => meridiems, + () => { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!this.meridiemCache) { + const intl = { hour: "numeric", hourCycle: "h12" }; + this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map( + (dt) => this.extract(dt, intl, "dayperiod") + ); + } + + return this.meridiemCache; + } + ); + } + + eras(length) { + return listStuff(this, length, eras, () => { + const intl = { era: length }; + + // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + if (!this.eraCache[length]) { + this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) => + this.extract(dt, intl, "era") + ); + } + + return this.eraCache[length]; + }); + } + + extract(dt, intlOpts, field) { + const df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find((m) => m.type.toLowerCase() === field); + return matching ? matching.value : null; + } + + numberFormatter(opts = {}) { + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + } + + dtFormatter(dt, intlOpts = {}) { + return new PolyDateFormatter(dt, this.intl, intlOpts); + } + + relFormatter(opts = {}) { + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + } + + listFormatter(opts = {}) { + return getCachedLF(this.intl, opts); + } + + isEnglish() { + return ( + this.locale === "en" || + this.locale.toLowerCase() === "en-us" || + getCachedIntResolvedOptions(this.intl).locale.startsWith("en-us") + ); + } + + getWeekSettings() { + if (this.weekSettings) { + return this.weekSettings; + } else if (!hasLocaleWeekInfo()) { + return fallbackWeekSettings; + } else { + return getCachedWeekInfo(this.locale); + } + } + + getStartOfWeek() { + return this.getWeekSettings().firstDay; + } + + getMinDaysInFirstWeek() { + return this.getWeekSettings().minimalDays; + } + + getWeekendDays() { + return this.getWeekSettings().weekend; + } + + equals(other) { + return ( + this.locale === other.locale && + this.numberingSystem === other.numberingSystem && + this.outputCalendar === other.outputCalendar + ); + } + + toString() { + return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`; + } +} + +let singleton = null; + +/** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ +class FixedOffsetZone extends Zone { + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + static get utcInstance() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + static instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + static parseSpecifier(s) { + if (s) { + const r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + } + + constructor(offset) { + super(); + /** @private **/ + this.fixed = offset; + } + + /** + * The type of zone. `fixed` for all instances of `FixedOffsetZone`. + * @override + * @type {string} + */ + get type() { + return "fixed"; + } + + /** + * The name of this zone. + * All fixed zones' names always start with "UTC" (plus optional offset) + * @override + * @type {string} + */ + get name() { + return this.fixed === 0 ? "UTC" : `UTC${formatOffset(this.fixed, "narrow")}`; + } + + /** + * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn` + * + * @override + * @type {string} + */ + get ianaName() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return `Etc/GMT${formatOffset(-this.fixed, "narrow")}`; + } + } + + /** + * Returns the offset's common name at the specified timestamp. + * + * For fixed offset zones this equals to the zone name. + * @override + */ + offsetName() { + return this.name; + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + return formatOffset(this.fixed, format); + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns true for all fixed offset zones. + * @override + * @type {boolean} + */ + get isUniversal() { + return true; + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * + * For fixed offset zones, this is constant and does not depend on a timestamp. + * @override + * @return {number} + */ + offset() { + return this.fixed; + } + + /** + * Return whether this Zone is equal to another zone (i.e. also fixed and same offset) + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + + /** + * Return whether this Zone is valid: + * All fixed offset zones are valid. + * @override + * @type {boolean} + */ + get isValid() { + return true; + } +} + +/** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ +class InvalidZone extends Zone { + constructor(zoneName) { + super(); + /** @private */ + this.zoneName = zoneName; + } + + /** @override **/ + get type() { + return "invalid"; + } + + /** @override **/ + get name() { + return this.zoneName; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName() { + return null; + } + + /** @override **/ + formatOffset() { + return ""; + } + + /** @override **/ + offset() { + return NaN; + } + + /** @override **/ + equals() { + return false; + } + + /** @override **/ + get isValid() { + return false; + } +} + +/** + * @private + */ + +function normalizeZone(input, defaultZone) { + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + const lowered = input.toLowerCase(); + if (lowered === "default") return defaultZone; + else if (lowered === "local" || lowered === "system") return SystemZone.instance; + else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance; + else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } +} + +const numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d", +}; + +const numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881], +}; + +const hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + +function parseDigits(str) { + let value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (let i = 0; i < str.length; i++) { + const code = str.charCodeAt(i); + + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (const key in numberingSystemsUTF16) { + const [min, max] = numberingSystemsUTF16[key]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } +} + +// cache of {numberingSystem: {append: regex}} +const digitRegexCache = new Map(); +function resetDigitRegexCache() { + digitRegexCache.clear(); +} + +function digitRegex({ numberingSystem }, append = "") { + const ns = numberingSystem || "latn"; + + let appendCache = digitRegexCache.get(ns); + if (appendCache === undefined) { + appendCache = new Map(); + digitRegexCache.set(ns, appendCache); + } + let regex = appendCache.get(append); + if (regex === undefined) { + regex = new RegExp(`${numberingSystems[ns]}${append}`); + appendCache.set(append, regex); + } + + return regex; +} + +let now = () => Date.now(), + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + twoDigitCutoffYear = 60, + throwOnInvalid, + defaultWeekSettings = null; + +/** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ +class Settings { + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + static get now() { + return now; + } + + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + static set now(n) { + now = n; + } + + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + static set defaultZone(zone) { + defaultZone = zone; + } + + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + static get defaultZone() { + return normalizeZone(defaultZone, SystemZone.instance); + } + + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultLocale() { + return defaultLocale; + } + + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultLocale(locale) { + defaultLocale = locale; + } + + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultNumberingSystem() { + return defaultNumberingSystem; + } + + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultNumberingSystem(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultOutputCalendar() { + return defaultOutputCalendar; + } + + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultOutputCalendar(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + + /** + * @typedef {Object} WeekSettings + * @property {number} firstDay + * @property {number} minimalDays + * @property {number[]} weekend + */ + + /** + * @return {WeekSettings|null} + */ + static get defaultWeekSettings() { + return defaultWeekSettings; + } + + /** + * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and + * how many days are required in the first week of a year. + * Does not affect existing instances. + * + * @param {WeekSettings|null} weekSettings + */ + static set defaultWeekSettings(weekSettings) { + defaultWeekSettings = validateWeekSettings(weekSettings); + } + + /** + * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + */ + static get twoDigitCutoffYear() { + return twoDigitCutoffYear; + } + + /** + * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century + * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century + * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950 + * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50 + * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50 + */ + static set twoDigitCutoffYear(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + static get throwOnInvalid() { + return throwOnInvalid; + } + + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + static set throwOnInvalid(t) { + throwOnInvalid = t; + } + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + static resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + DateTime.resetCache(); + resetDigitRegexCache(); + } +} + +class Invalid { + constructor(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + + toMessage() { + if (this.explanation) { + return `${this.reason}: ${this.explanation}`; + } else { + return this.reason; + } + } +} + +const nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + +function unitOutOfRange(unit, value) { + return new Invalid( + "unit out of range", + `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid` + ); +} + +function dayOfWeek(year, month, day) { + const d = new Date(Date.UTC(year, month - 1, day)); + + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + const js = d.getUTCDay(); + + return js === 0 ? 7 : js; +} + +function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; +} + +function uncomputeOrdinal(year, ordinal) { + const table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex((i) => i < ordinal), + day = ordinal - table[month0]; + return { month: month0 + 1, day }; +} + +function isoWeekdayToLocal(isoWeekday, startOfWeek) { + return ((isoWeekday - startOfWeek + 7) % 7) + 1; +} + +/** + * @private + */ + +function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) { + const { year, month, day } = gregObj, + ordinal = computeOrdinal(year, month, day), + weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek); + + let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7), + weekYear; + + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek); + } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + + return { weekYear, weekNumber, weekday, ...timeObject(gregObj) }; +} + +function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) { + const { weekYear, weekNumber, weekday } = weekData, + weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek), + yearInDays = daysInYear(weekYear); + + let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek, + year; + + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + + const { month, day } = uncomputeOrdinal(year, ordinal); + return { year, month, day, ...timeObject(weekData) }; +} + +function gregorianToOrdinal(gregData) { + const { year, month, day } = gregData; + const ordinal = computeOrdinal(year, month, day); + return { year, ordinal, ...timeObject(gregData) }; +} + +function ordinalToGregorian(ordinalData) { + const { year, ordinal } = ordinalData; + const { month, day } = uncomputeOrdinal(year, ordinal); + return { year, month, day, ...timeObject(ordinalData) }; +} + +/** + * Check if local week units like localWeekday are used in obj. + * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties. + * Modifies obj in-place! + * @param obj the object values + */ +function usesLocalWeekValues(obj, loc) { + const hasLocaleWeekData = + !isUndefined(obj.localWeekday) || + !isUndefined(obj.localWeekNumber) || + !isUndefined(obj.localWeekYear); + if (hasLocaleWeekData) { + const hasIsoWeekData = + !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear); + + if (hasIsoWeekData) { + throw new ConflictingSpecificationError( + "Cannot mix locale-based week fields with ISO-based week fields" + ); + } + if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday; + if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber; + if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear; + delete obj.localWeekday; + delete obj.localWeekNumber; + delete obj.localWeekYear; + return { + minDaysInFirstWeek: loc.getMinDaysInFirstWeek(), + startOfWeek: loc.getStartOfWeek(), + }; + } else { + return { minDaysInFirstWeek: 4, startOfWeek: 1 }; + } +} + +function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) { + const validYear = isInteger(obj.weekYear), + validWeek = integerBetween( + obj.weekNumber, + 1, + weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek) + ), + validWeekday = integerBetween(obj.weekday, 1, 7); + + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.weekNumber); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; +} + +function hasInvalidOrdinalData(obj) { + const validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; +} + +function hasInvalidGregorianData(obj) { + const validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; +} + +function hasInvalidTimeData(obj) { + const { hour, minute, second, millisecond } = obj; + const validHour = + integerBetween(hour, 0, 23) || + (hour === 24 && minute === 0 && second === 0 && millisecond === 0), + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; +} + +/* + This is just a junk drawer, containing anything used across multiple classes. + Because Luxon is small(ish), this should stay small and we won't worry about splitting + it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area. +*/ + +/** + * @private + */ + +// TYPES + +function isUndefined(o) { + return typeof o === "undefined"; +} + +function isNumber(o) { + return typeof o === "number"; +} + +function isInteger(o) { + return typeof o === "number" && o % 1 === 0; +} + +function isString(o) { + return typeof o === "string"; +} + +function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; +} + +// CAPABILITIES + +function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } +} + +function hasLocaleWeekInfo() { + try { + return ( + typeof Intl !== "undefined" && + !!Intl.Locale && + ("weekInfo" in Intl.Locale.prototype || "getWeekInfo" in Intl.Locale.prototype) + ); + } catch (e) { + return false; + } +} + +// OBJECTS AND ARRAYS + +function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; +} + +function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + return arr.reduce((best, next) => { + const pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; +} + +function pick(obj, keys) { + return keys.reduce((a, k) => { + a[k] = obj[k]; + return a; + }, {}); +} + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +function validateWeekSettings(settings) { + if (settings == null) { + return null; + } else if (typeof settings !== "object") { + throw new InvalidArgumentError("Week settings must be an object"); + } else { + if ( + !integerBetween(settings.firstDay, 1, 7) || + !integerBetween(settings.minimalDays, 1, 7) || + !Array.isArray(settings.weekend) || + settings.weekend.some((v) => !integerBetween(v, 1, 7)) + ) { + throw new InvalidArgumentError("Invalid week settings"); + } + return { + firstDay: settings.firstDay, + minimalDays: settings.minimalDays, + weekend: Array.from(settings.weekend), + }; + } +} + +// NUMBERS AND STRINGS + +function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; +} + +// x % n but takes the sign of n instead of x +function floorMod(x, n) { + return x - n * Math.floor(x / n); +} + +function padStart(input, n = 2) { + const isNeg = input < 0; + let padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + return padded; +} + +function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } +} + +function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } +} + +function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + const f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } +} + +function roundTo(number, digits, rounding = "round") { + const factor = 10 ** digits; + switch (rounding) { + case "expand": + return number > 0 + ? Math.ceil(number * factor) / factor + : Math.floor(number * factor) / factor; + case "trunc": + return Math.trunc(number * factor) / factor; + case "round": + return Math.round(number * factor) / factor; + case "floor": + return Math.floor(number * factor) / factor; + case "ceil": + return Math.ceil(number * factor) / factor; + default: + throw new RangeError(`Value rounding ${rounding} is out of range`); + } +} + +// DATE BASICS + +function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function daysInMonth(year, month) { + const modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } +} + +// convert a calendar object to a local timestamp (epoch, but with the offset baked in) +function objToLocalTS(obj) { + let d = Date.UTC( + obj.year, + obj.month - 1, + obj.day, + obj.hour, + obj.minute, + obj.second, + obj.millisecond + ); + + // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not + // so if obj.year is in 99, but obj.day makes it roll over into year 100, + // the calculations done by Date.UTC are using year 2000 - which is incorrect + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; +} + +// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js +function firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) { + const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek); + return -fwdlw + minDaysInFirstWeek - 1; +} + +function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) { + const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek); + const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek); + return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7; +} + +function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year; +} + +// PARSING + +function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) { + const date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + }; + + if (timeZone) { + intlOpts.timeZone = timeZone; + } + + const modified = { timeZoneName: offsetFormat, ...intlOpts }; + + const parsed = new Intl.DateTimeFormat(locale, modified) + .formatToParts(date) + .find((m) => m.type.toLowerCase() === "timezonename"); + return parsed ? parsed.value : null; +} + +// signedOffset('-5', '30') -> -330 +function signedOffset(offHourStr, offMinuteStr) { + let offHour = parseInt(offHourStr, 10); + + // don't || this because we want to preserve -0 + if (Number.isNaN(offHour)) { + offHour = 0; + } + + const offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; +} + +// COERCION + +function asNumber(value) { + const numericValue = Number(value); + if (typeof value === "boolean" || value === "" || !Number.isFinite(numericValue)) + throw new InvalidArgumentError(`Invalid unit value ${value}`); + return numericValue; +} + +function normalizeObject(obj, normalizer) { + const normalized = {}; + for (const u in obj) { + if (hasOwnProperty(obj, u)) { + const v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; +} + +/** + * Returns the offset's value as a string + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ +function formatOffset(offset, format) { + const hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + + switch (format) { + case "short": + return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`; + case "narrow": + return `${sign}${hours}${minutes > 0 ? `:${minutes}` : ""}`; + case "techie": + return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`; + default: + throw new RangeError(`Value format ${format} is out of range for property format`); + } +} + +function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); +} + +/** + * @private + */ + +const monthsLong = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", +]; + +const monthsShort = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; + +const monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + +function months(length) { + switch (length) { + case "narrow": + return [...monthsNarrow]; + case "short": + return [...monthsShort]; + case "long": + return [...monthsLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } +} + +const weekdaysLong = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday", +]; + +const weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + +const weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + +function weekdays(length) { + switch (length) { + case "narrow": + return [...weekdaysNarrow]; + case "short": + return [...weekdaysShort]; + case "long": + return [...weekdaysLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } +} + +const meridiems = ["AM", "PM"]; + +const erasLong = ["Before Christ", "Anno Domini"]; + +const erasShort = ["BC", "AD"]; + +const erasNarrow = ["B", "A"]; + +function eras(length) { + switch (length) { + case "narrow": + return [...erasNarrow]; + case "short": + return [...erasShort]; + case "long": + return [...erasLong]; + default: + return null; + } +} + +function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; +} + +function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; +} + +function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; +} + +function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; +} + +function formatRelativeTime(unit, count, numeric = "always", narrow = false) { + const units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."], + }; + + const lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + + if (numeric === "auto" && lastable) { + const isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : `next ${units[unit][0]}`; + case -1: + return isDay ? "yesterday" : `last ${units[unit][0]}`; + case 0: + return isDay ? "today" : `this ${units[unit][0]}`; + } + } + + const isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow + ? singular + ? lilUnits[1] + : lilUnits[2] || lilUnits[1] + : singular + ? units[unit][0] + : unit; + return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`; +} + +function stringifyTokens(splits, tokenToString) { + let s = ""; + for (const token of splits) { + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + return s; +} + +const macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS, +}; + +/** + * @private + */ + +class Formatter { + static create(locale, opts = {}) { + return new Formatter(locale, opts); + } + + static parseFormat(fmt) { + // white-space is always considered a literal in user-provided formats + // the " " token has a special meaning (see unitForToken) + + let current = null, + currentFull = "", + bracketed = false; + const splits = []; + for (let i = 0; i < fmt.length; i++) { + const c = fmt.charAt(i); + if (c === "'") { + // turn '' into a literal signal quote instead of just skipping the empty literal + if (currentFull.length > 0 || bracketed) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull === "" ? "'" : currentFull, + }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ literal: /^\s+$/.test(currentFull), val: currentFull }); + } + currentFull = c; + current = c; + } + } + + if (currentFull.length > 0) { + splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull }); + } + + return splits; + } + + static macroTokenToFormatOpts(token) { + return macroTokenToFormatOpts[token]; + } + + constructor(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + + formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts }); + return df.format(); + } + + dtFormatter(dt, opts = {}) { + return this.loc.dtFormatter(dt, { ...this.opts, ...opts }); + } + + formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + } + + formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + } + + formatInterval(interval, opts) { + const df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + } + + resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + } + + num(n, p = 0, signDisplay = undefined) { + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + + const opts = { ...this.opts }; + + if (p > 0) { + opts.padTo = p; + } + if (signDisplay) { + opts.signDisplay = signDisplay; + } + + return this.loc.numberFormatter(opts).format(n); + } + + formatDateTimeFromString(dt, fmt) { + const knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = (opts, extract) => this.loc.extract(dt, opts, extract), + formatOffset = (opts) => { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = () => + knownEnglish + ? meridiemForDateTime(dt) + : string({ hour: "numeric", hourCycle: "h12" }, "dayperiod"), + month = (length, standalone) => + knownEnglish + ? monthForDateTime(dt, length) + : string(standalone ? { month: length } : { month: length, day: "numeric" }, "month"), + weekday = (length, standalone) => + knownEnglish + ? weekdayForDateTime(dt, length) + : string( + standalone ? { weekday: length } : { weekday: length, month: "long", day: "numeric" }, + "weekday" + ), + maybeMacro = (token) => { + const formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = (length) => + knownEnglish ? eraForDateTime(dt, length) : string({ era: length }, "era"), + tokenToString = (token) => { + // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols + switch (token) { + // ms + case "S": + return this.num(dt.millisecond); + case "u": + // falls through + case "SSS": + return this.num(dt.millisecond, 3); + // seconds + case "s": + return this.num(dt.second); + case "ss": + return this.num(dt.second, 2); + // fractional seconds + case "uu": + return this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return this.num(Math.floor(dt.millisecond / 100)); + // minutes + case "m": + return this.num(dt.minute); + case "mm": + return this.num(dt.minute, 2); + // hours + case "h": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return this.num(dt.hour); + case "HH": + return this.num(dt.hour, 2); + // offset + case "Z": + // like +6 + return formatOffset({ format: "narrow", allowZ: this.opts.allowZ }); + case "ZZ": + // like +06:00 + return formatOffset({ format: "short", allowZ: this.opts.allowZ }); + case "ZZZ": + // like +0600 + return formatOffset({ format: "techie", allowZ: this.opts.allowZ }); + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { format: "short", locale: this.loc.locale }); + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { format: "long", locale: this.loc.locale }); + // zone + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + case "a": + return meridiem(); + // dates + case "d": + return useDateTimeFormatter ? string({ day: "numeric" }, "day") : this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ day: "2-digit" }, "day") : this.num(dt.day, 2); + // weekdays - standalone + case "c": + // like 1 + return this.num(dt.weekday); + case "ccc": + // like 'Tues' + return weekday("short", true); + case "cccc": + // like 'Tuesday' + return weekday("long", true); + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + case "E": + // like 1 + return this.num(dt.weekday); + case "EEE": + // like 'Tues' + return weekday("short", false); + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + case "L": + // like 1 + return useDateTimeFormatter + ? string({ month: "numeric", day: "numeric" }, "month") + : this.num(dt.month); + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter + ? string({ month: "2-digit", day: "numeric" }, "month") + : this.num(dt.month, 2); + case "LLL": + // like Jan + return month("short", true); + case "LLLL": + // like January + return month("long", true); + case "LLLLL": + // like J + return month("narrow", true); + // months - format + case "M": + // like 1 + return useDateTimeFormatter + ? string({ month: "numeric" }, "month") + : this.num(dt.month); + case "MM": + // like 01 + return useDateTimeFormatter + ? string({ month: "2-digit" }, "month") + : this.num(dt.month, 2); + case "MMM": + // like Jan + return month("short", false); + case "MMMM": + // like January + return month("long", false); + case "MMMMM": + // like J + return month("narrow", false); + // years + case "y": + // like 2014 + return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year); + case "yy": + // like 14 + return useDateTimeFormatter + ? string({ year: "2-digit" }, "year") + : this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + // like 0012 + return useDateTimeFormatter + ? string({ year: "numeric" }, "year") + : this.num(dt.year, 4); + case "yyyyyy": + // like 000012 + return useDateTimeFormatter + ? string({ year: "numeric" }, "year") + : this.num(dt.year, 6); + // eras + case "G": + // like AD + return era("short"); + case "GG": + // like Anno Domini + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return this.num(dt.weekYear, 4); + case "W": + return this.num(dt.weekNumber); + case "WW": + return this.num(dt.weekNumber, 2); + case "n": + return this.num(dt.localWeekNumber); + case "nn": + return this.num(dt.localWeekNumber, 2); + case "ii": + return this.num(dt.localWeekYear.toString().slice(-2), 2); + case "iiii": + return this.num(dt.localWeekYear, 4); + case "o": + return this.num(dt.ordinal); + case "ooo": + return this.num(dt.ordinal, 3); + case "q": + // like 1 + return this.num(dt.quarter); + case "qq": + // like 01 + return this.num(dt.quarter, 2); + case "X": + return this.num(Math.floor(dt.ts / 1000)); + case "x": + return this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + } + + formatDurationFromString(dur, fmt) { + const invertLargest = this.opts.signMode === "negativeLargestOnly" ? -1 : 1; + const tokenToField = (token) => { + switch (token[0]) { + case "S": + return "milliseconds"; + case "s": + return "seconds"; + case "m": + return "minutes"; + case "h": + return "hours"; + case "d": + return "days"; + case "w": + return "weeks"; + case "M": + return "months"; + case "y": + return "years"; + default: + return null; + } + }, + tokenToString = (lildur, info) => (token) => { + const mapped = tokenToField(token); + if (mapped) { + const inversionFactor = + info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1; + let signDisplay; + if (this.opts.signMode === "negativeLargestOnly" && mapped !== info.largestUnit) { + signDisplay = "never"; + } else if (this.opts.signMode === "all") { + signDisplay = "always"; + } else { + // "auto" and "negative" are the same, but "auto" has better support + signDisplay = "auto"; + } + return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay); + } else { + return token; + } + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce( + (found, { literal, val }) => (literal ? found : found.concat(val)), + [] + ), + collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)), + durationInfo = { + isNegativeDuration: collapsed < 0, + // this relies on "collapsed" being based on "shiftTo", which builds up the object + // in order + largestUnit: Object.keys(collapsed.values)[0], + }; + return stringifyTokens(tokens, tokenToString(collapsed, durationInfo)); + } +} + +/* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + +const ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; + +function combineRegexes(...regexes) { + const full = regexes.reduce((f, r) => f + r.source, ""); + return RegExp(`^${full}$`); +} + +function combineExtractors(...extractors) { + return (m) => + extractors + .reduce( + ([mergedVals, mergedZone, cursor], ex) => { + const [val, zone, next] = ex(m, cursor); + return [{ ...mergedVals, ...val }, zone || mergedZone, next]; + }, + [{}, null, 1] + ) + .slice(0, 2); +} + +function parse(s, ...patterns) { + if (s == null) { + return [null, null]; + } + + for (const [regex, extractor] of patterns) { + const m = regex.exec(s); + if (m) { + return extractor(m); + } + } + return [null, null]; +} + +function simpleParse(...keys) { + return (match, cursor) => { + const ret = {}; + let i; + + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + return [ret, null, cursor + i]; + }; +} + +// ISO and SQL parsing +const offsetRegex = /(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/; +const isoExtendedZone = `(?:${offsetRegex.source}?(?:\\[(${ianaRegex.source})\\])?)?`; +const isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; +const isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`); +const isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`); +const isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; +const isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; +const isoOrdinalRegex = /(\d{4})-?(\d{3})/; +const extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); +const extractISOOrdinalData = simpleParse("year", "ordinal"); +const sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one +const sqlTimeRegex = RegExp( + `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?` +); +const sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`); + +function int(match, pos, fallback) { + const m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); +} + +function extractISOYmd(match, cursor) { + const item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1), + }; + + return [item, null, cursor + 3]; +} + +function extractISOTime(match, cursor) { + const item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]), + }; + + return [item, null, cursor + 4]; +} + +function extractISOOffset(match, cursor) { + const local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; +} + +function extractIANAZone(match, cursor) { + const zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; +} + +// ISO time parsing + +const isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`); + +// ISO duration parsing + +const isoDuration = + /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; + +function extractISODuration(match) { + const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = + match; + + const hasNegativePrefix = s[0] === "-"; + const negativeSeconds = secondStr && secondStr[0] === "-"; + + const maybeNegate = (num, force = false) => + num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num; + + return [ + { + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds), + }, + ]; +} + +// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York +// and not just that we're in -240 *right now*. But since I don't think these are used that often +// I'm just going to ignore that +const obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, +}; + +function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + const result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr), + }; + + if (secondStr) result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = + weekdayStr.length > 3 + ? weekdaysLong.indexOf(weekdayStr) + 1 + : weekdaysShort.indexOf(weekdayStr) + 1; + } + + return result; +} + +// RFC 2822/5322 +const rfc2822 = + /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + +function extractRFC2822(match) { + const [ + , + weekdayStr, + dayStr, + monthStr, + yearStr, + hourStr, + minuteStr, + secondStr, + obsOffset, + milOffset, + offHourStr, + offMinuteStr, + ] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + + let offset; + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + + return [result, new FixedOffsetZone(offset)]; +} + +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^()]*\)|[\n\t]/g, " ") + .replace(/(\s\s+)/g, " ") + .trim(); +} + +// http date + +const rfc1123 = + /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = + /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = + /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + +function extractRFC1123Or850(match) { + const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +function extractASCII(match) { + const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +const isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); +const isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); +const isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); +const isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + +const extractISOYmdTimeAndOffset = combineExtractors( + extractISOYmd, + extractISOTime, + extractISOOffset, + extractIANAZone +); +const extractISOWeekTimeAndOffset = combineExtractors( + extractISOWeekData, + extractISOTime, + extractISOOffset, + extractIANAZone +); +const extractISOOrdinalDateAndTime = combineExtractors( + extractISOOrdinalData, + extractISOTime, + extractISOOffset, + extractIANAZone +); +const extractISOTimeAndOffset = combineExtractors( + extractISOTime, + extractISOOffset, + extractIANAZone +); + +/* + * @private + */ + +function parseISODate(s) { + return parse( + s, + [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], + [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], + [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], + [isoTimeCombinedRegex, extractISOTimeAndOffset] + ); +} + +function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); +} + +function parseHTTPDate(s) { + return parse( + s, + [rfc1123, extractRFC1123Or850], + [rfc850, extractRFC1123Or850], + [ascii, extractASCII] + ); +} + +function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); +} + +const extractISOTimeOnly = combineExtractors(extractISOTime); + +function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); +} + +const sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); +const sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + +const extractISOTimeOffsetAndIANAZone = combineExtractors( + extractISOTime, + extractISOOffset, + extractIANAZone +); + +function parseSQL(s) { + return parse( + s, + [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], + [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone] + ); +} + +const INVALID$2 = "Invalid Duration"; + +// unit conversion constants +const lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000, + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000, + }, + hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 }, + minutes: { seconds: 60, milliseconds: 60 * 1000 }, + seconds: { milliseconds: 1000 }, + }, + casualMatrix = { + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000, + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000, + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000, + }, + + ...lowOrderMatrix, + }, + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = { + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000, + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: (daysInYearAccurate * 24) / 4, + minutes: (daysInYearAccurate * 24 * 60) / 4, + seconds: (daysInYearAccurate * 24 * 60 * 60) / 4, + milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4, + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000, + }, + ...lowOrderMatrix, + }; + +// units ordered by size +const orderedUnits$1 = [ + "years", + "quarters", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds", +]; + +const reverseUnits = orderedUnits$1.slice(0).reverse(); + +// clone really means "create another instance just like this one, but with these changes" +function clone$1(dur, alts, clear = false) { + // deep merge for vals + const conf = { + values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) }, + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix, + }; + return new Duration(conf); +} + +function durationToMillis(matrix, vals) { + let sum = vals.milliseconds ?? 0; + for (const unit of reverseUnits.slice(1)) { + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; +} + +// NB: mutates parameters +function normalizeValues(matrix, vals) { + // the logic below assumes the overall value of the duration is positive + // if this is not the case, factor is used to make it so + const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + + orderedUnits$1.reduceRight((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const previousVal = vals[previous] * factor; + const conv = matrix[current][previous]; + + // if (previousVal < 0): + // lower order unit is negative (e.g. { years: 2, days: -2 }) + // normalize this by reducing the higher order unit by the appropriate amount + // and increasing the lower order unit + // this can never make the higher order unit negative, because this function only operates + // on positive durations, so the amount of time represented by the lower order unit cannot + // be larger than the higher order unit + // else: + // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 }) + // in this case we attempt to convert as much as possible from the lower order unit into + // the higher order one + // + // Math.floor takes care of both of these cases, rounding away from 0 + // if previousVal < 0 it makes the absolute value larger + // if previousVal >= it makes the absolute value smaller + const rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + + // try to convert any decimals into smaller units if possible + // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 } + orderedUnits$1.reduce((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); +} + +// Remove all properties with a value of 0 from an object +function removeZeroes(vals) { + const newVals = {}; + for (const [key, value] of Object.entries(vals)) { + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; +} + +/** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ +class Duration { + /** + * @private + */ + constructor(config) { + const accurate = config.conversionAccuracy === "longterm" || false; + let matrix = accurate ? accurateMatrix : casualMatrix; + + if (config.matrix) { + matrix = config.matrix; + } + + /** + * @access private + */ + this.values = config.values; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.matrix = matrix; + /** + * @access private + */ + this.isLuxonDuration = true; + } + + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + static fromMillis(count, opts) { + return Duration.fromObject({ milliseconds: count }, opts); + } + + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the custom conversion system to use + * @return {Duration} + */ + static fromObject(obj, opts = {}) { + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError( + `Duration.fromObject: argument expected to be an object, got ${ + obj === null ? "null" : typeof obj + }` + ); + } + + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix, + }); + } + + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */ + static fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError( + `Unknown duration argument ${durationLike} of type ${typeof durationLike}` + ); + } + } + + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the preset conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + static fromISO(text, opts) { + const [parsed] = parseISODuration(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */ + static fromISOTime(text, opts) { + const [parsed] = parseISOTimeOnly(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ invalid }); + } + } + + /** + * @private + */ + static normalizeUnit(unit) { + const normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds", + }[unit ? unit.toLowerCase() : unit]; + + if (!normalized) throw new InvalidUnitError(unit); + + return normalized; + } + + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isDuration(o) { + return (o && o.isLuxonDuration) || false; + } + + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + get locale() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * Tokens can be escaped by wrapping with single quotes. + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat("d s", { signMode: "all" }) //=> "+6 +2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "all" }) //=> "-6 -2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "negativeLargestOnly" }) //=> "-6 2" + * @return {string} + */ + toFormat(fmt, opts = {}) { + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + const fmtOpts = { + ...opts, + floor: opts.round !== false && opts.floor !== false, + }; + return this.isValid + ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) + : INVALID$2; + } + + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options + * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`. + * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor. + * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero + * @example + * ```js + * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 mth, 0 wks, 5 hr, 6 min' + * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes' + * ``` + */ + toHuman(opts = {}) { + if (!this.isValid) return INVALID$2; + + const showZeros = opts.showZeros !== false; + + const l = orderedUnits$1 + .map((unit) => { + const val = this.values[unit]; + if (isUndefined(val) || (val === 0 && !showZeros)) { + return null; + } + return this.loc + .numberFormatter({ style: "unit", unitDisplay: "long", ...opts, unit: unit.slice(0, -1) }) + .format(val); + }) + .filter((n) => n); + + return this.loc + .listFormatter({ type: "conjunction", style: opts.listStyle || "narrow", ...opts }) + .format(l); + } + + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + toObject() { + if (!this.isValid) return {}; + return { ...this.values }; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + + let s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) + s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */ + toISOTime(opts = {}) { + if (!this.isValid) return null; + + const millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + + opts = { + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended", + ...opts, + includeOffset: false, + }; + + const dateTime = DateTime.fromMillis(millis, { zone: "UTC" }); + return dateTime.toISOTime(opts); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + toJSON() { + return this.toISO(); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + toString() { + return this.toISO(); + } + + /** + * Returns a string representation of this Duration appropriate for the REPL. + * @return {string} + */ + [Symbol.for("nodejs.util.inspect.custom")]() { + if (this.isValid) { + return `Duration { values: ${JSON.stringify(this.values)} }`; + } else { + return `Duration { Invalid, reason: ${this.invalidReason} }`; + } + } + + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + toMillis() { + if (!this.isValid) return NaN; + + return durationToMillis(this.matrix, this.values); + } + + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */ + valueOf() { + return this.toMillis(); + } + + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + plus(duration) { + if (!this.isValid) return this; + + const dur = Duration.fromDurationLike(duration), + result = {}; + + for (const k of orderedUnits$1) { + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + + return clone$1(this, { values: result }, true); + } + + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + minus(duration) { + if (!this.isValid) return this; + + const dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + mapUnits(fn) { + if (!this.isValid) return this; + const result = {}; + for (const k of Object.keys(this.values)) { + result[k] = asNumber(fn(this.values[k], k)); + } + return clone$1(this, { values: result }, true); + } + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */ + get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + set(values) { + if (!this.isValid) return this; + + const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) }; + return clone$1(this, { values: mixed }); + } + + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) { + const loc = this.loc.clone({ locale, numberingSystem }); + const opts = { loc, matrix, conversionAccuracy }; + return clone$1(this, opts); + } + + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + + /** + * Reduce this Duration to its canonical representation in its current units. + * Assuming the overall value of the Duration is positive, this means: + * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example) + * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise + * the overall value would be negative, see third example) + * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example) + * + * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 } + * @return {Duration} + */ + normalize() { + if (!this.isValid) return this; + const vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { values: vals }, true); + } + + /** + * Rescale units to its largest representation + * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 } + * @return {Duration} + */ + rescale() { + if (!this.isValid) return this; + const vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { values: vals }, true); + } + + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + shiftTo(...units) { + if (!this.isValid) return this; + + if (units.length === 0) { + return this; + } + + units = units.map((u) => Duration.normalizeUnit(u)); + + const built = {}, + accumulated = {}, + vals = this.toObject(); + let lastUnit; + + for (const k of orderedUnits$1) { + if (units.indexOf(k) >= 0) { + lastUnit = k; + + let own = 0; + + // anything we haven't boiled down yet should get boiled to this unit + for (const ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + + // plus anything that's already in this unit + if (isNumber(vals[k])) { + own += vals[k]; + } + + // only keep the integer part for now in the hopes of putting any decimal part + // into a smaller unit later + const i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; + + // otherwise, keep it in the wings to boil it later + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + + // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + for (const key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += + key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + + normalizeValues(this.matrix, built); + return clone$1(this, { values: built }, true); + } + + /** + * Shift this Duration to all available units. + * Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds") + * @return {Duration} + */ + shiftToAll() { + if (!this.isValid) return this; + return this.shiftTo( + "years", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds" + ); + } + + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + negate() { + if (!this.isValid) return this; + const negated = {}; + for (const k of Object.keys(this.values)) { + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { values: negated }, true); + } + + /** + * Removes all units with values equal to 0 from this Duration. + * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 } + * @return {Duration} + */ + removeZeros() { + if (!this.isValid) return this; + const vals = removeZeroes(this.values); + return clone$1(this, { values: vals }, true); + } + + /** + * Get the years. + * @type {number} + */ + get years() { + return this.isValid ? this.values.years || 0 : NaN; + } + + /** + * Get the quarters. + * @type {number} + */ + get quarters() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + + /** + * Get the months. + * @type {number} + */ + get months() { + return this.isValid ? this.values.months || 0 : NaN; + } + + /** + * Get the weeks + * @type {number} + */ + get weeks() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + + /** + * Get the days. + * @type {number} + */ + get days() { + return this.isValid ? this.values.days || 0 : NaN; + } + + /** + * Get the hours. + * @type {number} + */ + get hours() { + return this.isValid ? this.values.hours || 0 : NaN; + } + + /** + * Get the minutes. + * @type {number} + */ + get minutes() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + + /** + * Get the seconds. + * @return {number} + */ + get seconds() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + + /** + * Get the milliseconds. + * @return {number} + */ + get milliseconds() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + get isValid() { + return this.invalid === null; + } + + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + if (!this.loc.equals(other.loc)) { + return false; + } + + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + + for (const u of orderedUnits$1) { + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + } +} + +const INVALID$1 = "Invalid Interval"; + +// checks if the start is equal to or before the end +function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid( + "end before start", + `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}` + ); + } else { + return null; + } +} + +/** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ +class Interval { + /** + * @private + */ + constructor(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + this.e = config.end; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.isLuxonInterval = true; + } + + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ invalid }); + } + } + + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + static fromDateTimes(start, end) { + const builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + + const validateError = validateStartEnd(builtStart, builtEnd); + + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd, + }); + } else { + return validateError; + } + } + + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + static after(start, duration) { + const dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + static before(end, duration) { + const dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + static fromISO(text, opts) { + const [s, e] = (text || "").split("/", 2); + if (s && e) { + let start, startIsValid; + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + + let end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + + if (startIsValid) { + const dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + const dur = Duration.fromISO(s, opts); + if (dur.isValid) { + return Interval.before(end, dur); + } + } + } + return Interval.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isInterval(o) { + return (o && o.isLuxonInterval) || false; + } + + /** + * Returns the start of the Interval + * @type {DateTime} + */ + get start() { + return this.isValid ? this.s : null; + } + + /** + * Returns the end of the Interval. This is the first instant which is not part of the interval + * (Interval is half-open). + * @type {DateTime} + */ + get end() { + return this.isValid ? this.e : null; + } + + /** + * Returns the last DateTime included in the interval (since end is not part of the interval) + * @type {DateTime} + */ + get lastDateTime() { + return this.isValid ? (this.e ? this.e.minus(1) : null) : null; + } + + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + get isValid() { + return this.invalidReason === null; + } + + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + length(unit = "milliseconds") { + return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN; + } + + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime + * @return {number} + */ + count(unit = "milliseconds", opts) { + if (!this.isValid) return NaN; + const start = this.start.startOf(unit, opts); + let end; + if (opts?.useLocaleWeeks) { + end = this.end.reconfigure({ locale: start.locale }); + } else { + end = this.end; + } + end = end.startOf(unit, opts); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + set({ start, end } = {}) { + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */ + splitAt(...dateTimes) { + if (!this.isValid) return []; + const sorted = dateTimes + .map(friendlyDateTime) + .filter((d) => this.contains(d)) + .sort((a, b) => a.toMillis() - b.toMillis()), + results = []; + let { s } = this, + i = 0; + + while (s < this.e) { + const added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + + return results; + } + + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */ + splitBy(duration) { + const dur = Duration.fromDurationLike(duration); + + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + + let { s } = this, + idx = 1, + next; + + const results = []; + while (s < this.e) { + const added = this.start.plus(dur.mapUnits((x) => x * idx)); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + + return results; + } + + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */ + divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + overlaps(other) { + return this.e > other.s && this.s < other.e; + } + + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + + /** + * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise. + * @param {Interval} other + * @return {boolean} + */ + engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + return this.s.equals(other.s) && this.e.equals(other.e); + } + + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + intersection(other) { + if (!this.isValid) return this; + const s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + union(other) { + if (!this.isValid) return this; + const s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + + /** + * Merge an array of Intervals into an equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval + * and ending with the latest. + * + * @param {Array} intervals + * @return {Array} + */ + static merge(intervals) { + const [found, final] = intervals + .sort((a, b) => a.s - b.s) + .reduce( + ([sofar, current], item) => { + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, + [[], null] + ); + if (final) { + found.push(final); + } + return found; + } + + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */ + static xor(intervals) { + let start = null, + currentCount = 0; + const results = [], + ends = intervals.map((i) => [ + { time: i.s, type: "s" }, + { time: i.e, type: "e" }, + ]), + flattened = Array.prototype.concat(...ends), + arr = flattened.sort((a, b) => a.time - b.time); + + for (const i of arr) { + currentCount += i.type === "s" ? 1 : -1; + + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + + start = null; + } + } + + return Interval.merge(results); + } + + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */ + difference(...intervals) { + return Interval.xor([this].concat(intervals)) + .map((i) => this.intersection(i)) + .filter((i) => i && !i.isEmpty()); + } + + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + toString() { + if (!this.isValid) return INVALID$1; + return `[${this.s.toISO()} – ${this.e.toISO()})`; + } + + /** + * Returns a string representation of this Interval appropriate for the REPL. + * @return {string} + */ + [Symbol.for("nodejs.util.inspect.custom")]() { + if (this.isValid) { + return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`; + } else { + return `Interval { Invalid, reason: ${this.invalidReason} }`; + } + } + + /** + * Returns a localized string representing this Interval. Accepts the same options as the + * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as + * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method + * is browser-specific, but in general it will return an appropriate representation of the + * Interval in the assigned locale. Defaults to the system's locale if no locale has been + * specified. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or + * Intl.DateTimeFormat constructor options. + * @param {Object} opts - Options to override the configuration of the start DateTime. + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022 + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p + * @return {string} + */ + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid + ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) + : INVALID$1; + } + + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + toISO(opts) { + if (!this.isValid) return INVALID$1; + return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`; + } + + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + toISODate() { + if (!this.isValid) return INVALID$1; + return `${this.s.toISODate()}/${this.e.toISODate()}`; + } + + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`; + } + + /** + * Returns a string representation of this Interval formatted according to the specified format + * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible + * formatting tool. + * @param {string} dateFormat - The format string. This string formats the start and end time. + * See {@link DateTime#toFormat} for details. + * @param {Object} opts - Options. + * @param {string} [opts.separator = ' – '] - A separator to place between the start and end + * representations. + * @return {string} + */ + toFormat(dateFormat, { separator = " – " } = {}) { + if (!this.isValid) return INVALID$1; + return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`; + } + + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + } +} + +/** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ +class Info { + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + static hasDST(zone = Settings.defaultZone) { + const proto = DateTime.now().setZone(zone).set({ month: 12 }); + + return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset; + } + + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + static isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + static normalizeZone(input) { + return normalizeZone(input, Settings.defaultZone); + } + + /** + * Get the weekday on which the week starts according to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} the start of the week, 1 for Monday through 7 for Sunday + */ + static getStartOfWeek({ locale = null, locObj = null } = {}) { + return (locObj || Locale.create(locale)).getStartOfWeek(); + } + + /** + * Get the minimum number of days necessary in a week before it is considered part of the next year according + * to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} + */ + static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) { + return (locObj || Locale.create(locale)).getMinDaysInFirstWeek(); + } + + /** + * Get the weekdays, which are considered the weekend according to the given locale + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday + */ + static getWeekendWeekdays({ locale = null, locObj = null } = {}) { + // copy the array, because we cache it internally + return (locObj || Locale.create(locale)).getWeekendDays().slice(); + } + + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */ + static months( + length = "long", + { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {} + ) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */ + static monthsFormat( + length = "long", + { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {} + ) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */ + static weekdays(length = "long", { locale = null, numberingSystem = null, locObj = null } = {}) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */ + static weekdaysFormat( + length = "long", + { locale = null, numberingSystem = null, locObj = null } = {} + ) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */ + static meridiems({ locale = null } = {}) { + return Locale.create(locale).meridiems(); + } + + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */ + static eras(length = "short", { locale = null } = {}) { + return Locale.create(locale, null, "gregory").eras(length); + } + + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale + * @example Info.features() //=> { relative: false, localeWeek: true } + * @return {Object} + */ + static features() { + return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() }; + } +} + +function dayDiff(earlier, later) { + const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf("day").valueOf(), + ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); +} + +function highOrderDiffs(cursor, later, units) { + const differs = [ + ["years", (a, b) => b.year - a.year], + ["quarters", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4], + ["months", (a, b) => b.month - a.month + (b.year - a.year) * 12], + [ + "weeks", + (a, b) => { + const days = dayDiff(a, b); + return (days - (days % 7)) / 7; + }, + ], + ["days", dayDiff], + ]; + + const results = {}; + const earlier = cursor; + let lowestOrder, highWater; + + /* This loop tries to diff using larger units first. + If we overshoot, we backtrack and try the next smaller unit. + "cursor" starts out at the earlier timestamp and moves closer and closer to "later" + as we use smaller and smaller units. + highWater keeps track of where we would be if we added one more of the smallest unit, + this is used later to potentially convert any difference smaller than the smallest higher order unit + into a fraction of that smallest higher order unit + */ + for (const [unit, differ] of differs) { + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + + if (highWater > later) { + // we overshot the end point, backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + + // if we are still overshooting now, we need to backtrack again + // this happens in certain situations when diffing times in different zones, + // because this calculation ignores time zones + if (cursor > later) { + // keep the "overshot by 1" around as highWater + highWater = cursor; + // backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + + return [cursor, results, highWater, lowestOrder]; +} + +function diff (earlier, later, units, opts) { + let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units); + + const remainingMillis = later - cursor; + + const lowerOrderUnits = units.filter( + (u) => ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0 + ); + + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + highWater = cursor.plus({ [lowestOrder]: 1 }); + } + + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + + const duration = Duration.fromObject(results, opts); + + if (lowerOrderUnits.length > 0) { + return Duration.fromMillis(remainingMillis, opts) + .shiftTo(...lowerOrderUnits) + .plus(duration); + } else { + return duration; + } +} + +const MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + +function intUnit(regex, post = (i) => i) { + return { regex, deser: ([s]) => post(parseDigits(s)) }; +} + +const NBSP = String.fromCharCode(160); +const spaceOrNBSP = `[ ${NBSP}]`; +const spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + +function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); +} + +function stripInsensitivities(s) { + return s + .replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); +} + +function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: ([s]) => + strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex, + }; + } +} + +function offset(regex, groups) { + return { regex, deser: ([, h, m]) => signedOffset(h, m), groups }; +} + +function simple(regex) { + return { regex, deser: ([s]) => s }; +} + +function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); +} + +/** + * @param token + * @param {Locale} loc + */ +function unitForToken(token, loc) { + const one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }), + unitate = (t) => { + if (token.literal) { + return literal(t); + } + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + // years + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + // months + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + // dates + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + // ordinals + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + // time + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + // meridiem + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + // weekdays + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + // offset/zone + case "Z": + case "ZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2); + case "ZZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + // this special-case "token" represents a place where a macro-token expanded into a white-space literal + // in this case we accept any non-newline white-space + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + + const unit = unitate(token) || { + invalidReason: MISSING_FTP, + }; + + unit.token = token; + + return unit; +} + +const partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy", + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM", + }, + day: { + numeric: "d", + "2-digit": "dd", + }, + weekday: { + short: "EEE", + long: "EEEE", + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh", + }, + hour24: { + numeric: "H", + "2-digit": "HH", + }, + minute: { + numeric: "m", + "2-digit": "mm", + }, + second: { + numeric: "s", + "2-digit": "ss", + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ", + }, +}; + +function tokenForPart(part, formatOpts, resolvedOpts) { + const { type, value } = part; + + if (type === "literal") { + const isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value, + }; + } + + const style = formatOpts[type]; + + // The user might have explicitly specified hour12 or hourCycle + // if so, respect their decision + // if not, refer back to the resolvedOpts, which are based on the locale + let actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + // tokens only differentiate between 24 hours or not, + // so we do not need to check hourCycle here, which is less supported anyways + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + let val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + + if (val) { + return { + literal: false, + val, + }; + } + + return undefined; +} + +function buildRegex(units) { + const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, ""); + return [`^${re}$`, units]; +} + +function match(input, regex, handlers) { + const matches = input.match(regex); + + if (matches) { + const all = {}; + let matchIndex = 1; + for (const i in handlers) { + if (hasOwnProperty(handlers, i)) { + const h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } +} + +function dateTimeFromMatches(matches) { + const toField = (token) => { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + + let zone = null; + let specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + + const vals = Object.keys(matches).reduce((r, k) => { + const f = toField(k); + if (f) { + r[f] = matches[k]; + } + + return r; + }, {}); + + return [vals, zone, specificOffset]; +} + +let dummyDateTimeCache = null; + +function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + + return dummyDateTimeCache; +} + +function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + + const formatOpts = Formatter.macroTokenToFormatOpts(token.val); + const tokens = formatOptsToTokens(formatOpts, locale); + + if (tokens == null || tokens.includes(undefined)) { + return token; + } + + return tokens; +} + +function expandMacroTokens(tokens, locale) { + return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale))); +} + +/** + * @private + */ + +class TokenParser { + constructor(locale, format) { + this.locale = locale; + this.format = format; + this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale); + this.units = this.tokens.map((t) => unitForToken(t, locale)); + this.disqualifyingUnit = this.units.find((t) => t.invalidReason); + + if (!this.disqualifyingUnit) { + const [regexString, handlers] = buildRegex(this.units); + this.regex = RegExp(regexString, "i"); + this.handlers = handlers; + } + } + + explainFromTokens(input) { + if (!this.isValid) { + return { input, tokens: this.tokens, invalidReason: this.invalidReason }; + } else { + const [rawMatches, matches] = match(input, this.regex, this.handlers), + [result, zone, specificOffset] = matches + ? dateTimeFromMatches(matches) + : [null, null, undefined]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError( + "Can't include meridiem when specifying 24-hour format" + ); + } + return { + input, + tokens: this.tokens, + regex: this.regex, + rawMatches, + matches, + result, + zone, + specificOffset, + }; + } + } + + get isValid() { + return !this.disqualifyingUnit; + } + + get invalidReason() { + return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null; + } +} + +function explainFromTokens(locale, input, format) { + const parser = new TokenParser(locale, format); + return parser.explainFromTokens(input); +} + +function parseFromTokens(locale, input, format) { + const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format); + return [result, zone, specificOffset, invalidReason]; +} + +function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + + const formatter = Formatter.create(locale, formatOpts); + const df = formatter.dtFormatter(getDummyDateTime()); + const parts = df.formatToParts(); + const resolvedOpts = df.resolvedOptions(); + return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts)); +} + +const INVALID = "Invalid DateTime"; +const MAX_DATE = 8.64e15; + +function unsupportedZone(zone) { + return new Invalid("unsupported zone", `the zone "${zone.name}" is not supported`); +} + +// we cache week data on the DT object and this intermediates the cache +/** + * @param {DateTime} dt + */ +function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; +} + +/** + * @param {DateTime} dt + */ +function possiblyCachedLocalWeekData(dt) { + if (dt.localWeekData === null) { + dt.localWeekData = gregorianToWeek( + dt.c, + dt.loc.getMinDaysInFirstWeek(), + dt.loc.getStartOfWeek() + ); + } + return dt.localWeekData; +} + +// clone really means, "make a new object with these modifications". all "setters" really use this +// to create a new object while only changing some of the properties +function clone(inst, alts) { + const current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid, + }; + return new DateTime({ ...current, ...alts, old: current }); +} + +// find the right offset a given local time. The o input is our guess, which determines which +// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) +function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + let utcGuess = localTS - o * 60 * 1000; + + // Test whether the zone matches the offset for this ts + const o2 = tz.offset(utcGuess); + + // If so, offset didn't change and we're done + if (o === o2) { + return [utcGuess, o]; + } + + // If not, change the ts by the difference in the offset + utcGuess -= (o2 - o) * 60 * 1000; + + // If that gives us the local time we want, we're done + const o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + + // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; +} + +// convert an epoch timestamp into a calendar object with the given offset +function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + + const d = new Date(ts); + + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds(), + }; +} + +// convert a calendar object to a epoch timestamp +function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); +} + +// create a new DT instance by adding a duration, adjusting for DSTs +function adjustTime(inst, dur) { + const oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = { + ...inst.c, + year, + month, + day: + Math.min(inst.c.day, daysInMonth(year, month)) + + Math.trunc(dur.days) + + Math.trunc(dur.weeks) * 7, + }, + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds, + }).as("milliseconds"), + localTS = objToLocalTS(c); + + let [ts, o] = fixOffset(localTS, oPre, inst.zone); + + if (millisToAdd !== 0) { + ts += millisToAdd; + // that could have changed the offset by going over a DST, but we want to keep the ts the same + o = inst.zone.offset(ts); + } + + return { ts, o }; +} + +// helper useful in turning the results of parsing into real dates +// by handling the zone options +function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + const { setZone, zone } = opts; + if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) { + const interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, { + ...opts, + zone: interpretationZone, + specificOffset, + }); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid( + new Invalid("unparsable", `the input "${text}" can't be parsed as ${format}`) + ); + } +} + +// if you want to output a technical format (e.g. RFC 2822), this helper +// helps handle the details +function toTechFormat(dt, format, allowZ = true) { + return dt.isValid + ? Formatter.create(Locale.create("en-US"), { + allowZ, + forceSimple: true, + }).formatDateTimeFromString(dt, format) + : null; +} + +function toISODate(o, extended, precision) { + const longFormat = o.c.year > 9999 || o.c.year < 0; + let c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + if (precision === "year") return c; + if (extended) { + c += "-"; + c += padStart(o.c.month); + if (precision === "month") return c; + c += "-"; + } else { + c += padStart(o.c.month); + if (precision === "month") return c; + } + c += padStart(o.c.day); + return c; +} + +function toISOTime( + o, + extended, + suppressSeconds, + suppressMilliseconds, + includeOffset, + extendedZone, + precision +) { + let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0, + c = ""; + switch (precision) { + case "day": + case "month": + case "year": + break; + default: + c += padStart(o.c.hour); + if (precision === "hour") break; + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += ":"; + c += padStart(o.c.second); + } + } else { + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += padStart(o.c.second); + } + } + if (precision === "second") break; + if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; +} + +// defaults for unspecified units in the supported calendars +const defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }; + +// Units in the supported calendars, sorted by bigness +const orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = [ + "weekYear", + "weekNumber", + "weekday", + "hour", + "minute", + "second", + "millisecond", + ], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + +// standardize case and plurality in units +function normalizeUnit(unit) { + const normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal", + }[unit.toLowerCase()]; + + if (!normalized) throw new InvalidUnitError(unit); + + return normalized; +} + +function normalizeUnitWithLocalWeeks(unit) { + switch (unit.toLowerCase()) { + case "localweekday": + case "localweekdays": + return "localWeekday"; + case "localweeknumber": + case "localweeknumbers": + return "localWeekNumber"; + case "localweekyear": + case "localweekyears": + return "localWeekYear"; + default: + return normalizeUnit(unit); + } +} + +// cache offsets for zones based on the current timestamp when this function is +// first called. When we are handling a datetime from components like (year, +// month, day, hour) in a time zone, we need a guess about what the timezone +// offset is so that we can convert into a UTC timestamp. One way is to find the +// offset of now in the zone. The actual date may have a different offset (for +// example, if we handle a date in June while we're in December in a zone that +// observes DST), but we can check and adjust that. +// +// When handling many dates, calculating the offset for now every time is +// expensive. It's just a guess, so we can cache the offset to use even if we +// are right on a time change boundary (we'll just correct in the other +// direction). Using a timestamp from first read is a slight optimization for +// handling dates close to the current date, since those dates will usually be +// in the same offset (we could set the timestamp statically, instead). We use a +// single timestamp for all zones to make things a bit more predictable. +// +// This is safe for quickDT (used by local() and utc()) because we don't fill in +// higher-order units from tsNow (as we do in fromObject, this requires that +// offset is calculated from tsNow). +/** + * @param {Zone} zone + * @return {number} + */ +function guessOffsetForZone(zone) { + if (zoneOffsetTs === undefined) { + zoneOffsetTs = Settings.now(); + } + + // Do not cache anything but IANA zones, because it is not safe to do so. + // Guessing an offset which is not present in the zone can cause wrong results from fixOffset + if (zone.type !== "iana") { + return zone.offset(zoneOffsetTs); + } + const zoneName = zone.name; + let offsetGuess = zoneOffsetGuessCache.get(zoneName); + if (offsetGuess === undefined) { + offsetGuess = zone.offset(zoneOffsetTs); + zoneOffsetGuessCache.set(zoneName, offsetGuess); + } + return offsetGuess; +} + +// this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. +function quickDT(obj, opts) { + const zone = normalizeZone(opts.zone, Settings.defaultZone); + if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } + + const loc = Locale.fromObject(opts); + + let ts, o; + + // assume we have the higher-order units + if (!isUndefined(obj.year)) { + for (const u of orderedUnits) { + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + + const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + + const offsetProvis = guessOffsetForZone(zone); + [ts, o] = objToTS(obj, offsetProvis, zone); + } else { + ts = Settings.now(); + } + + return new DateTime({ ts, zone, loc, o }); +} + +function diffRelative(start, end, opts) { + const round = isUndefined(opts.round) ? true : opts.round, + rounding = isUndefined(opts.rounding) ? "trunc" : opts.rounding, + format = (c, unit) => { + c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? "round" : rounding); + const formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = (unit) => { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + + for (const unit of opts.units) { + const count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); +} + +function lastOpts(argList) { + let opts = {}, + args; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + return [opts, args]; +} + +/** + * Timestamp to use for cached zone offset guesses (exposed for test) + */ +let zoneOffsetTs; +/** + * Cache for zone offset guesses (exposed for test). + * + * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of + * zone.offset(). + */ +const zoneOffsetGuessCache = new Map(); + +/** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ +class DateTime { + /** + * @access private + */ + constructor(config) { + const zone = config.zone || Settings.defaultZone; + + let invalid = + config.invalid || + (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || + (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + + let c = null, + o = null; + if (!invalid) { + const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + + if (unchanged) { + [c, o] = [config.old.c, config.old.o]; + } else { + // If an offset has been passed and we have not been called from + // clone(), we can trust it and avoid the offset calculation. + const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + + /** + * @access private + */ + this._zone = zone; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.invalid = invalid; + /** + * @access private + */ + this.weekData = null; + /** + * @access private + */ + this.localWeekData = null; + /** + * @access private + */ + this.c = c; + /** + * @access private + */ + this.o = o; + /** + * @access private + */ + this.isLuxonDateTime = true; + } + + // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + static now() { + return new DateTime({}); + } + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + static local() { + const [opts, args] = lastOpts(arguments), + [year, month, day, hour, minute, second, millisecond] = args; + return quickDT({ year, month, day, hour, minute, second, millisecond }, opts); + } + + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */ + static utc() { + const [opts, args] = lastOpts(arguments), + [year, month, day, hour, minute, second, millisecond] = args; + + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ year, month, day, hour, minute, second, millisecond }, opts); + } + + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + static fromJSDate(date, options = {}) { + const ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + + const zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options), + }); + } + + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromMillis(milliseconds, options = {}) { + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError( + `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}` + ); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options), + }); + } + } + + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromSeconds(seconds, options = {}) { + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options), + }); + } + } + + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.localWeekYear - a week year, according to the locale + * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale + * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system\'s locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: "en-US" }).toISODate() //=> '2021-12-26' + * @return {DateTime} + */ + static fromObject(obj, opts = {}) { + obj = obj || {}; + const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + const loc = Locale.fromObject(opts); + const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks); + const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc); + + const tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) + ? opts.specificOffset + : zoneToUse.offset(tsNow), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError( + "Can't mix weekYear/weekNumber units with year/month/day or ordinals" + ); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor); + + // configure ourselves to deal with gregorian dates or week stuff + let units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + + // set default values for missing stuff + let foundFirst = false; + for (const u of units) { + const v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + + // make sure the values we have are in range + const higherOrderInvalid = useWeekData + ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) + : containsOrdinal + ? hasInvalidOrdinalData(normalized) + : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + + if (invalid) { + return DateTime.invalid(invalid); + } + + // compute the actual time + const gregorian = useWeekData + ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) + : containsOrdinal + ? ordinalToGregorian(normalized) + : normalized, + [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc, + }); + + // gregorian data + weekday serves only to validate + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid( + "mismatched weekday", + `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}` + ); + } + + if (!inst.isValid) { + return DateTime.invalid(inst.invalid); + } + + return inst; + } + + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + static fromISO(text, opts = {}) { + const [vals, parsedZone] = parseISODate(text); + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + static fromRFC2822(text, opts = {}) { + const [vals, parsedZone] = parseRFC2822Date(text); + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + static fromHTTP(text, opts = {}) { + const [vals, parsedZone] = parseHTTPDate(text); + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromFormat(text, fmt, opts = {}) { + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + + const { locale = null, numberingSystem = null } = opts, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true, + }), + [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt); + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset); + } + } + + /** + * @deprecated use fromFormat instead + */ + static fromString(text, fmt, opts = {}) { + return DateTime.fromFormat(text, fmt, opts); + } + + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + static fromSQL(text, opts = {}) { + const [vals, parsedZone] = parseSQL(text); + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent. + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ invalid }); + } + } + + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isDateTime(o) { + return (o && o.isLuxonDateTime) || false; + } + + /** + * Produce the format string for a set of options + * @param formatOpts + * @param localeOpts + * @returns {string} + */ + static parseFormatForOpts(formatOpts, localeOpts = {}) { + const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(""); + } + + /** + * Produce the the fully expanded format token for the locale + * Does NOT quote characters, so quoted tokens will not round trip correctly + * @param fmt + * @param localeOpts + * @returns {string} + */ + static expandFormat(fmt, localeOpts = {}) { + const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map((t) => t.val).join(""); + } + + static resetCache() { + zoneOffsetTs = undefined; + zoneOffsetGuessCache.clear(); + } + + // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + get(unit) { + return this[unit]; + } + + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + get isValid() { + return this.invalid === null; + } + + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + get locale() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + get outputCalendar() { + return this.isValid ? this.loc.outputCalendar : null; + } + + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + get zone() { + return this._zone; + } + + /** + * Get the name of the time zone. + * @type {string} + */ + get zoneName() { + return this.isValid ? this.zone.name : null; + } + + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + get year() { + return this.isValid ? this.c.year : NaN; + } + + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + get quarter() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + get month() { + return this.isValid ? this.c.month : NaN; + } + + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + get day() { + return this.isValid ? this.c.day : NaN; + } + + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + get hour() { + return this.isValid ? this.c.hour : NaN; + } + + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + get minute() { + return this.isValid ? this.c.minute : NaN; + } + + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + get second() { + return this.isValid ? this.c.second : NaN; + } + + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + get millisecond() { + return this.isValid ? this.c.millisecond : NaN; + } + + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + get weekYear() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + get weekNumber() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + get weekday() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + + /** + * Returns true if this date is on a weekend according to the locale, false otherwise + * @returns {boolean} + */ + get isWeekend() { + return this.isValid && this.loc.getWeekendDays().includes(this.weekday); + } + + /** + * Get the day of the week according to the locale. + * 1 is the first day of the week and 7 is the last day of the week. + * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1, + * @returns {number} + */ + get localWeekday() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN; + } + + /** + * Get the week number of the week year according to the locale. Different locales assign week numbers differently, + * because the week can start on different days of the week (see localWeekday) and because a different number of days + * is required for a week to count as the first week of a year. + * @returns {number} + */ + get localWeekNumber() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN; + } + + /** + * Get the week year according to the locale. Different locales assign week numbers (and therefor week years) + * differently, see localWeekNumber. + * @returns {number} + */ + get localWeekYear() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN; + } + + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + get ordinal() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + get monthShort() { + return this.isValid ? Info.months("short", { locObj: this.loc })[this.month - 1] : null; + } + + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + get monthLong() { + return this.isValid ? Info.months("long", { locObj: this.loc })[this.month - 1] : null; + } + + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + get weekdayShort() { + return this.isValid ? Info.weekdays("short", { locObj: this.loc })[this.weekday - 1] : null; + } + + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + get weekdayLong() { + return this.isValid ? Info.weekdays("long", { locObj: this.loc })[this.weekday - 1] : null; + } + + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + get offset() { + return this.isValid ? +this.o : NaN; + } + + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + get offsetNameShort() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale, + }); + } else { + return null; + } + } + + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + get offsetNameLong() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale, + }); + } else { + return null; + } + } + + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + get isOffsetFixed() { + return this.isValid ? this.zone.isUniversal : null; + } + + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + get isInDST() { + if (this.isOffsetFixed) { + return false; + } else { + return ( + this.offset > this.set({ month: 1, day: 1 }).offset || + this.offset > this.set({ month: 5 }).offset + ); + } + } + + /** + * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC + * in this DateTime's zone. During DST changes local time can be ambiguous, for example + * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`. + * This method will return both possible DateTimes if this DateTime's local time is ambiguous. + * @returns {DateTime[]} + */ + getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + const dayMs = 86400000; + const minuteMs = 60000; + const localTS = objToLocalTS(this.c); + const oEarlier = this.zone.offset(localTS - dayMs); + const oLater = this.zone.offset(localTS + dayMs); + + const o1 = this.zone.offset(localTS - oEarlier * minuteMs); + const o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + const ts1 = localTS - o1 * minuteMs; + const ts2 = localTS - o2 * minuteMs; + const c1 = tsToObj(ts1, o1); + const c2 = tsToObj(ts2, o2); + if ( + c1.hour === c2.hour && + c1.minute === c2.minute && + c1.second === c2.second && + c1.millisecond === c2.millisecond + ) { + return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })]; + } + return [this]; + } + + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + get isInLeapYear() { + return isLeapYear(this.year); + } + + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + get daysInMonth() { + return daysInMonth(this.year, this.month); + } + + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + get daysInYear() { + return this.isValid ? daysInYear(this.year) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + get weeksInWeekYear() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's local week year + * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52 + * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53 + * @type {number} + */ + get weeksInLocalWeekYear() { + return this.isValid + ? weeksInWeekYear( + this.localWeekYear, + this.loc.getMinDaysInFirstWeek(), + this.loc.getStartOfWeek() + ) + : NaN; + } + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + resolvedLocaleOptions(opts = {}) { + const { locale, numberingSystem, calendar } = Formatter.create( + this.loc.clone(opts), + opts + ).resolvedOptions(this); + return { locale, numberingSystem, outputCalendar: calendar }; + } + + // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + toUTC(offset = 0, opts = {}) { + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + toLocal() { + return this.setZone(Settings.defaultZone); + } + + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) { + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + let newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + const offsetGuess = zone.offset(this.ts); + const asObj = this.toObject(); + [newTS] = objToTS(asObj, offsetGuess, zone); + } + return clone(this, { ts: newTS, zone }); + } + } + + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + reconfigure({ locale, numberingSystem, outputCalendar } = {}) { + const loc = this.loc.clone({ locale, numberingSystem, outputCalendar }); + return clone(this, { loc }); + } + + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + setLocale(locale) { + return this.reconfigure({ locale }); + } + + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * + * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`. + * They cannot be mixed with ISO-week units like `weekday`. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + set(values) { + if (!this.isValid) return this; + + const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks); + const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc); + + const settingWeekStuff = + !isUndefined(normalized.weekYear) || + !isUndefined(normalized.weekNumber) || + !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError( + "Can't mix weekYear/weekNumber units with year/month/day or ordinals" + ); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + let mixed; + if (settingWeekStuff) { + mixed = weekToGregorian( + { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized }, + minDaysInFirstWeek, + startOfWeek + ); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized }); + } else { + mixed = { ...this.toObject(), ...normalized }; + + // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + + const [ts, o] = objToTS(mixed, this.o, this.zone); + return clone(this, { ts, o }); + } + + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + plus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + minus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + startOf(unit, { useLocaleWeeks = false } = {}) { + if (!this.isValid) return this; + + const o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + case "quarters": + case "months": + o.day = 1; + // falls through + case "weeks": + case "days": + o.hour = 0; + // falls through + case "hours": + o.minute = 0; + // falls through + case "minutes": + o.second = 0; + // falls through + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + if (useLocaleWeeks) { + const startOfWeek = this.loc.getStartOfWeek(); + const { weekday } = this; + if (weekday < startOfWeek) { + o.weekNumber = this.weekNumber - 1; + } + o.weekday = startOfWeek; + } else { + o.weekday = 1; + } + } + + if (normalizedUnit === "quarters") { + const q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + + return this.set(o); + } + + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + endOf(unit, opts) { + return this.isValid + ? this.plus({ [unit]: 1 }) + .startOf(unit, opts) + .minus(1) + : this; + } + + // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + toFormat(fmt, opts = {}) { + return this.isValid + ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) + : INVALID; + } + + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */ + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid + ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) + : INVALID; + } + + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + toLocaleParts(opts = {}) { + return this.isValid + ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) + : []; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=false] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z' + * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z' + * @return {string|null} + */ + toISO({ + format = "extended", + suppressSeconds = false, + suppressMilliseconds = false, + includeOffset = true, + extendedZone = false, + precision = "milliseconds", + } = {}) { + if (!this.isValid) { + return null; + } + + precision = normalizeUnit(precision); + const ext = format === "extended"; + + let c = toISODate(this, ext, precision); + if (orderedUnits.indexOf(precision) >= 3) c += "T"; + c += toISOTime( + this, + ext, + suppressSeconds, + suppressMilliseconds, + includeOffset, + extendedZone, + precision + ); + return c; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'. + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05' + * @return {string|null} + */ + toISODate({ format = "extended", precision = "day" } = {}) { + if (!this.isValid) { + return null; + } + return toISODate(this, format === "extended", normalizeUnit(precision)); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z' + * @return {string} + */ + toISOTime({ + suppressMilliseconds = false, + suppressSeconds = false, + includeOffset = true, + includePrefix = false, + extendedZone = false, + format = "extended", + precision = "milliseconds", + } = {}) { + if (!this.isValid) { + return null; + } + + precision = normalizeUnit(precision); + let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? "T" : ""; + return ( + c + + toISOTime( + this, + format === "extended", + suppressSeconds, + suppressMilliseconds, + includeOffset, + extendedZone, + precision + ) + ); + } + + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string|null} + */ + toSQLDate() { + if (!this.isValid) { + return null; + } + return toISODate(this, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) { + let fmt = "HH:mm:ss.SSS"; + + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + + return toTechFormat(this, fmt, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + toSQL(opts = {}) { + if (!this.isValid) { + return null; + } + + return `${this.toSQLDate()} ${this.toSQLTime(opts)}`; + } + + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + toString() { + return this.isValid ? this.toISO() : INVALID; + } + + /** + * Returns a string representation of this DateTime appropriate for the REPL. + * @return {string} + */ + [Symbol.for("nodejs.util.inspect.custom")]() { + if (this.isValid) { + return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`; + } else { + return `DateTime { Invalid, reason: ${this.invalidReason} }`; + } + } + + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */ + valueOf() { + return this.toMillis(); + } + + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + toMillis() { + return this.isValid ? this.ts : NaN; + } + + /** + * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime. + * @return {number} + */ + toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */ + toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + toJSON() { + return this.toISO(); + } + + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + toBSON() { + return this.toJSDate(); + } + + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + toObject(opts = {}) { + if (!this.isValid) return {}; + + const base = { ...this.c }; + + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */ + toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + + // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + diff(otherDateTime, unit = "milliseconds", opts = {}) { + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + + const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts }; + + const units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = diff(earlier, later, units, durOpts); + + return otherIsLater ? diffed.negate() : diffed; + } + + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + diffNow(unit = "milliseconds", opts = {}) { + return this.diff(DateTime.now(), unit, opts); + } + + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval|DateTime} + */ + until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */ + hasSame(otherDateTime, unit, opts) { + if (!this.isValid) return false; + + const inputMs = otherDateTime.valueOf(); + const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true }); + return ( + adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts) + ); + } + + /** + * Equality check + * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + equals(other) { + return ( + this.isValid && + other.isValid && + this.valueOf() === other.valueOf() && + this.zone.equals(other.zone) && + this.loc.equals(other.loc) + ); + } + + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {string} [options.rounding="trunc"] - rounding method to use when rounding the numbers in the output. Can be "trunc" (toward zero), "expand" (away from zero), "round", "floor", or "ceil". + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + toRelative(options = {}) { + if (!this.isValid) return null; + const base = options.base || DateTime.fromObject({}, { zone: this.zone }), + padding = options.padding ? (this < base ? -options.padding : options.padding) : 0; + let units = ["years", "months", "days", "hours", "minutes", "seconds"]; + let unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + return diffRelative(base, this.plus(padding), { + ...options, + numeric: "always", + units, + unit, + }); + } + + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + toRelativeCalendar(options = {}) { + if (!this.isValid) return null; + + return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, { + ...options, + numeric: "auto", + units: ["years", "months", "days"], + calendary: true, + }); + } + + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + static min(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, (i) => i.valueOf(), Math.min); + } + + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + static max(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, (i) => i.valueOf(), Math.max); + } + + // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + static fromFormatExplain(text, fmt, options = {}) { + const { locale = null, numberingSystem = null } = options, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true, + }); + return explainFromTokens(localeToUse, text, fmt); + } + + /** + * @deprecated use fromFormatExplain instead + */ + static fromStringExplain(text, fmt, options = {}) { + return DateTime.fromFormatExplain(text, fmt, options); + } + + /** + * Build a parser for `fmt` using the given locale. This parser can be passed + * to {@link DateTime.fromFormatParser} to a parse a date in this format. This + * can be used to optimize cases where many dates need to be parsed in a + * specific format. + * + * @param {String} fmt - the format the string is expected to be in (see + * description) + * @param {Object} options - options used to set locale and numberingSystem + * for parser + * @returns {TokenParser} - opaque object to be used + */ + static buildFormatParser(fmt, options = {}) { + const { locale = null, numberingSystem = null } = options, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true, + }); + return new TokenParser(localeToUse, fmt); + } + + /** + * Create a DateTime from an input string and format parser. + * + * The format parser must have been created with the same locale as this call. + * + * @param {String} text - the string to parse + * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser} + * @param {Object} opts - options taken by fromFormat() + * @returns {DateTime} + */ + static fromFormatParser(text, formatParser, opts = {}) { + if (isUndefined(text) || isUndefined(formatParser)) { + throw new InvalidArgumentError( + "fromFormatParser requires an input string and a format parser" + ); + } + const { locale = null, numberingSystem = null } = opts, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true, + }); + + if (!localeToUse.equals(formatParser.locale)) { + throw new InvalidArgumentError( + `fromFormatParser called with a locale of ${localeToUse}, ` + + `but the format parser was created for ${formatParser.locale}` + ); + } + + const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text); + + if (invalidReason) { + return DateTime.invalid(invalidReason); + } else { + return parseDataToDateTime( + result, + zone, + opts, + `format ${formatParser.format}`, + text, + specificOffset + ); + } + } + + // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */ + static get DATE_SHORT() { + return DATE_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + static get DATE_MED() { + return DATE_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + static get DATE_MED_WITH_WEEKDAY() { + return DATE_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + static get DATE_FULL() { + return DATE_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + static get DATE_HUGE() { + return DATE_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_SIMPLE() { + return TIME_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_SECONDS() { + return TIME_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_SHORT_OFFSET() { + return TIME_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_LONG_OFFSET() { + return TIME_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + static get TIME_24_SIMPLE() { + return TIME_24_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_SECONDS() { + return TIME_24_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_SHORT_OFFSET() { + return TIME_24_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_LONG_OFFSET() { + return TIME_24_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_SHORT() { + return DATETIME_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_SHORT_WITH_SECONDS() { + return DATETIME_SHORT_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED() { + return DATETIME_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED_WITH_SECONDS() { + return DATETIME_MED_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED_WITH_WEEKDAY() { + return DATETIME_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_FULL() { + return DATETIME_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_FULL_WITH_SECONDS() { + return DATETIME_FULL_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_HUGE() { + return DATETIME_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_HUGE_WITH_SECONDS() { + return DATETIME_HUGE_WITH_SECONDS; + } +} + +/** + * @private + */ +function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError( + `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}` + ); + } +} + +const VERSION = "3.7.2"; + +export { DateTime, Duration, FixedOffsetZone, IANAZone, Info, Interval, InvalidZone, Settings, SystemZone, VERSION, Zone }; +//# sourceMappingURL=luxon.mjs.map diff --git a/node_modules/luxon/build/es6/luxon.mjs.map b/node_modules/luxon/build/es6/luxon.mjs.map new file mode 100644 index 00000000..68f1cf70 --- /dev/null +++ b/node_modules/luxon/build/es6/luxon.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.mjs","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/zone.js","../../src/zones/systemZone.js","../../src/zones/IANAZone.js","../../src/impl/locale.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/impl/digits.js","../../src/settings.js","../../src/impl/invalid.js","../../src/impl/conversions.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/tokenParser.js","../../src/datetime.js","../../src/luxon.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n let dtf = dtfCache.get(zoneName);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zoneName,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n dtfCache.set(zoneName, dtf);\n }\n return dtf;\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n let zone = ianaZoneCache.get(name);\n if (zone === undefined) {\n ianaZoneCache.set(name, (zone = new IANAZone(name)));\n }\n return zone;\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache.clear();\n dtfCache.clear();\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n if (!this.valid) return NaN;\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache.get(key);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache.set(key, dtf);\n }\n return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache.get(key);\n if (inf === undefined) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache.set(key, inf);\n }\n return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache.get(key);\n if (inf === undefined) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache.set(key, inf);\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n let opts = intlResolvedOptionsCache.get(locString);\n if (opts === undefined) {\n opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n intlResolvedOptionsCache.set(locString, opts);\n }\n return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache.get(locString);\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n if (!(\"minimalDays\" in data)) {\n data = { ...fallbackWeekSettings, ...data };\n }\n weekInfoCache.set(locString, data);\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache.clear();\n intlNumCache.clear();\n intlRelCache.clear();\n intlResolvedOptionsCache.clear();\n weekInfoCache.clear();\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n // As such, just use format() instead of formatToParts() and take the whole string\n const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n format &= !monthSpecialCase;\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n const mapper = !monthSpecialCase\n ? (dt) => this.extract(dt, intl, \"month\")\n : (dt) => this.dtFormatter(dt, intl).format();\n this.monthsCache[formatStr][length] = mapMonths(mapper);\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n let appendCache = digitRegexCache.get(ns);\n if (appendCache === undefined) {\n appendCache = new Map();\n digitRegexCache.set(ns, appendCache);\n }\n let regex = appendCache.get(append);\n if (regex === undefined) {\n regex = new RegExp(`${numberingSystems[ns]}${append}`);\n appendCache.set(append, regex);\n }\n\n return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n const factor = 10 ** digits;\n switch (rounding) {\n case \"expand\":\n return number > 0\n ? Math.ceil(number * factor) / factor\n : Math.floor(number * factor) / factor;\n case \"trunc\":\n return Math.trunc(number * factor) / factor;\n case \"round\":\n return Math.round(number * factor) / factor;\n case \"floor\":\n return Math.floor(number * factor) / factor;\n case \"ceil\":\n return Math.ceil(number * factor) / factor;\n default:\n throw new RangeError(`Value rounding ${rounding} is out of range`);\n }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n // turn '' into a literal signal quote instead of just skipping the empty literal\n if (currentFull.length > 0 || bracketed) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull === \"\" ? \"'\" : currentFull,\n });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0, signDisplay = undefined) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n if (signDisplay) {\n opts.signDisplay = signDisplay;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"milliseconds\";\n case \"s\":\n return \"seconds\";\n case \"m\":\n return \"minutes\";\n case \"h\":\n return \"hours\";\n case \"d\":\n return \"days\";\n case \"w\":\n return \"weeks\";\n case \"M\":\n return \"months\";\n case \"y\":\n return \"years\";\n default:\n return null;\n }\n },\n tokenToString = (lildur, info) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n const inversionFactor =\n info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n let signDisplay;\n if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n signDisplay = \"never\";\n } else if (this.opts.signMode === \"all\") {\n signDisplay = \"always\";\n } else {\n // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n signDisplay = \"auto\";\n }\n return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n durationInfo = {\n isNegativeDuration: collapsed < 0,\n // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n // in order\n largestUnit: Object.keys(collapsed.values)[0],\n };\n return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n * @example\n * ```js\n * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const showZeros = opts.showZeros !== false;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val) || (val === 0 && !showZeros)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Removes all units with values equal to 0 from this Duration.\n * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n * @return {Duration}\n */\n removeZeros() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.values);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval. This is the first instant which is not part of the interval\n * (Interval is half-open).\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns the last DateTime included in the interval (since end is not part of the interval)\n * @type {DateTime}\n */\n get lastDateTime() {\n return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into an equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n * and ending with the latest.\n *\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended, precision) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (precision === \"year\") return c;\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n c += \"-\";\n } else {\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n }\n c += padStart(o.c.day);\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n) {\n let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n c = \"\";\n switch (precision) {\n case \"day\":\n case \"month\":\n case \"year\":\n break;\n default:\n c += padStart(o.c.hour);\n if (precision === \"hour\") break;\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += \":\";\n c += padStart(o.c.second);\n }\n } else {\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += padStart(o.c.second);\n }\n }\n if (precision === \"second\") break;\n if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n // Do not cache anything but IANA zones, because it is not safe to do so.\n // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n if (zone.type !== \"iana\") {\n return zone.offset(zoneOffsetTs);\n }\n const zoneName = zone.name;\n let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n if (offsetGuess === undefined) {\n offsetGuess = zone.offset(zoneOffsetTs);\n zoneOffsetGuessCache.set(zoneName, offsetGuess);\n }\n return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache.clear();\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n * @return {string|null}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext, precision);\n if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n c += toISOTime(\n this,\n ext,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n );\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n * @return {string|null}\n */\n toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\", normalizeUnit(precision));\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string|null}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval|DateTime}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n"],"names":["singleton","English.formatRelativeTime","English.months","English.weekdays","English.meridiems","English.eras","Formats.DATE_SHORT","Formats.DATE_MED","Formats.DATE_FULL","Formats.DATE_HUGE","Formats.TIME_SIMPLE","Formats.TIME_WITH_SECONDS","Formats.TIME_WITH_SHORT_OFFSET","Formats.TIME_WITH_LONG_OFFSET","Formats.TIME_24_SIMPLE","Formats.TIME_24_WITH_SECONDS","Formats.TIME_24_WITH_SHORT_OFFSET","Formats.TIME_24_WITH_LONG_OFFSET","Formats.DATETIME_SHORT","Formats.DATETIME_MED","Formats.DATETIME_FULL","Formats.DATETIME_HUGE","Formats.DATETIME_SHORT_WITH_SECONDS","Formats.DATETIME_MED_WITH_SECONDS","Formats.DATETIME_FULL_WITH_SECONDS","Formats.DATETIME_HUGE_WITH_SECONDS","English.meridiemForDateTime","English.monthForDateTime","English.weekdayForDateTime","English.eraForDateTime","English.monthsShort","English.weekdaysLong","English.weekdaysShort","INVALID","orderedUnits","clone","Formats.DATE_MED_WITH_WEEKDAY","Formats.DATETIME_MED_WITH_WEEKDAY"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/luxon/build/global/luxon.js b/node_modules/luxon/build/global/luxon.js new file mode 100644 index 00000000..7d059e1b --- /dev/null +++ b/node_modules/luxon/build/global/luxon.js @@ -0,0 +1,8744 @@ +var luxon = (function (exports) { + 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _extends() { + _extends = Object.assign ? Object.assign.bind() : function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; + return _extends.apply(this, arguments); + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } + } + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct.bind(); + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + return _construct.apply(null, arguments); + } + function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; + } + function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + _cache.set(Class, Wrapper); + } + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + return _wrapNativeSuper(Class); + } + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); + } + + // these aren't really private, but nor are they really useful to document + /** + * @private + */ + var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + return LuxonError; + }( /*#__PURE__*/_wrapNativeSuper(Error)); + /** + * @private + */ + var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + return InvalidDateTimeError; + }(LuxonError); + + /** + * @private + */ + var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + return InvalidIntervalError; + }(LuxonError); + + /** + * @private + */ + var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + return InvalidDurationError; + }(LuxonError); + + /** + * @private + */ + var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + return ConflictingSpecificationError; + }(LuxonError); + + /** + * @private + */ + var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + return InvalidUnitError; + }(LuxonError); + + /** + * @private + */ + var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + return InvalidArgumentError; + }(LuxonError); + + /** + * @private + */ + var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + return ZoneIsAbstractError; + }(LuxonError); + + /** + * @private + */ + + var n = "numeric", + s = "short", + l = "long"; + var DATE_SHORT = { + year: n, + month: n, + day: n + }; + var DATE_MED = { + year: n, + month: s, + day: n + }; + var DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s + }; + var DATE_FULL = { + year: n, + month: l, + day: n + }; + var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l + }; + var TIME_SIMPLE = { + hour: n, + minute: n + }; + var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n + }; + var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + var TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23" + }; + var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23" + }; + var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s + }; + var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l + }; + var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n + }; + var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n + }; + var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n + }; + var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s + }; + var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l + }; + var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + + /** + * @interface + */ + var Zone = /*#__PURE__*/function () { + function Zone() {} + var _proto = Zone.prototype; + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */; + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */; + _createClass(Zone, [{ + key: "type", + get: + /** + * The type of zone + * @abstract + * @type {string} + */ + function get() { + throw new ZoneIsAbstractError(); + } + + /** + * The name of this zone. + * @abstract + * @type {string} + */ + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + + /** + * The IANA name of this zone. + * Defaults to `name` if not overwritten by a subclass. + * @abstract + * @type {string} + */ + }, { + key: "ianaName", + get: function get() { + return this.name; + } + + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + }, { + key: "isUniversal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + return Zone; + }(); + + var singleton$1 = null; + + /** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ + var SystemZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(SystemZone, _Zone); + function SystemZone() { + return _Zone.apply(this, arguments) || this; + } + var _proto = SystemZone.prototype; + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + + /** @override **/; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/; + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + + /** @override **/; + _proto.equals = function equals(otherZone) { + return otherZone.type === "system"; + } + + /** @override **/; + _createClass(SystemZone, [{ + key: "type", + get: /** @override **/ + function get() { + return "system"; + } + + /** @override **/ + }, { + key: "name", + get: function get() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + /** @override **/ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + get: + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + function get() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + }]); + return SystemZone; + }(Zone); + + var dtfCache = new Map(); + function makeDTF(zoneName) { + var dtf = dtfCache.get(zoneName); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zoneName, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short" + }); + dtfCache.set(zoneName, dtf); + } + return dtf; + } + var typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6 + }; + function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fadOrBc = parsed[4], + fHour = parsed[5], + fMinute = parsed[6], + fSecond = parsed[7]; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; + } + function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date); + var filled = []; + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value; + var pos = typeToPos[type]; + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; + } + var ianaZoneCache = new Map(); + /** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ + var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + var zone = ianaZoneCache.get(name); + if (zone === undefined) { + ianaZoneCache.set(name, zone = new IANAZone(name)); + } + return zone; + } + + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */; + IANAZone.resetCache = function resetCache() { + ianaZoneCache.clear(); + dtfCache.clear(); + } + + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead. + * @return {boolean} + */; + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return this.isValidZone(s); + } + + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */; + IANAZone.isValidZone = function isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + }; + function IANAZone(name) { + var _this; + _this = _Zone.call(this) || this; + /** @private **/ + _this.zoneName = name; + /** @private **/ + _this.valid = IANAZone.isValidZone(name); + return _this; + } + + /** + * The type of zone. `iana` for all instances of `IANAZone`. + * @override + * @type {string} + */ + var _proto = IANAZone.prototype; + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @override + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @override + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */; + _proto.offset = function offset(ts) { + if (!this.valid) return NaN; + var date = new Date(ts); + if (isNaN(date)) return NaN; + var dtf = makeDTF(this.name); + var _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + adOrBc = _ref2[3], + hour = _ref2[4], + minute = _ref2[5], + second = _ref2[6]; + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + + // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + var adjustedHour = hour === 24 ? 0 : hour; + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: adjustedHour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + + /** + * Return whether this Zone is equal to another zone + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + + /** + * Return whether this Zone is valid. + * @override + * @type {boolean} + */; + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + + /** + * The name of this zone (i.e. the IANA zone name). + * @override + * @type {string} + */ + }, { + key: "name", + get: function get() { + return this.zoneName; + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns false for all IANA zones. + * @override + * @type {boolean} + */ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + return IANAZone; + }(Zone); + + var _excluded = ["base"], + _excluded2 = ["padTo", "floor"]; + + // todo - remap caching + + var intlLFCache = {}; + function getCachedLF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; + } + var intlDTCache = new Map(); + function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache.get(key); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache.set(key, dtf); + } + return dtf; + } + var intlNumCache = new Map(); + function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache.get(key); + if (inf === undefined) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache.set(key, inf); + } + return inf; + } + var intlRelCache = new Map(); + function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + var _opts = opts; + _opts.base; + var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, _excluded); // exclude `base` from the options + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache.get(key); + if (inf === undefined) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache.set(key, inf); + } + return inf; + } + var sysLocaleCache = null; + function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } + } + var intlResolvedOptionsCache = new Map(); + function getCachedIntResolvedOptions(locString) { + var opts = intlResolvedOptionsCache.get(locString); + if (opts === undefined) { + opts = new Intl.DateTimeFormat(locString).resolvedOptions(); + intlResolvedOptionsCache.set(locString, opts); + } + return opts; + } + var weekInfoCache = new Map(); + function getCachedWeekInfo(locString) { + var data = weekInfoCache.get(locString); + if (!data) { + var locale = new Intl.Locale(locString); + // browsers currently implement this as a property, but spec says it should be a getter function + data = "getWeekInfo" in locale ? locale.getWeekInfo() : locale.weekInfo; + // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86 + if (!("minimalDays" in data)) { + data = _extends({}, fallbackWeekSettings, data); + } + weekInfoCache.set(locString, data); + } + return data; + } + function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + + // private subtags and unicode subtags have ordering requirements, + // and we're not properly parsing this, so just strip out the + // private ones if they exist. + var xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + var uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + var smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; + return [selectedStr, numberingSystem, calendar]; + } + } + function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + return localeStr; + } else { + return localeStr; + } + } + function mapMonths(f) { + var ms = []; + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; + } + function mapWeekdays(f) { + var ms = []; + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; + } + function listStuff(loc, length, englishFn, intlFn) { + var mode = loc.listingMode(); + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } + } + function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || getCachedIntResolvedOptions(loc.locale).numberingSystem === "latn"; + } + } + + /** + * @private + */ + var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + opts.padTo; + opts.floor; + var otherOpts = _objectWithoutPropertiesLoose(opts, _excluded2); + if (!forceSimple || Object.keys(otherOpts).length > 0) { + var intlOpts = _extends({ + useGrouping: false + }, opts); + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + var _proto = PolyNumberFormatter.prototype; + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(_fixed, this.padTo); + } + }; + return PolyNumberFormatter; + }(); + /** + * @private + */ + var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + this.originalZone = undefined; + var z = undefined; + if (this.opts.timeZone) { + // Don't apply any workarounds if a timeZone is explicitly provided in opts + this.dt = dt; + } else if (dt.zone.type === "fixed") { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + var gmtOffset = -1 * (dt.offset / 60); + var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so + // we manually apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + // Custom zones can have any offset / offsetName so we just manually + // apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + var intlOpts = _extends({}, this.opts); + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + var _proto2 = PolyDateFormatter.prototype; + _proto2.format = function format() { + if (this.originalZone) { + // If we have to substitute in the actual zone name, we have to use + // formatToParts so that the timezone can be replaced. + return this.formatToParts().map(function (_ref) { + var value = _ref.value; + return value; + }).join(""); + } + return this.dtf.format(this.dt.toJSDate()); + }; + _proto2.formatToParts = function formatToParts() { + var _this = this; + var parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map(function (part) { + if (part.type === "timeZoneName") { + var offsetName = _this.originalZone.offsetName(_this.dt.ts, { + locale: _this.dt.locale, + format: _this.opts.timeZoneName + }); + return _extends({}, part, { + value: offsetName + }); + } else { + return part; + } + }); + } + return parts; + }; + _proto2.resolvedOptions = function resolvedOptions() { + return this.dtf.resolvedOptions(); + }; + return PolyDateFormatter; + }(); + /** + * @private + */ + var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = _extends({ + style: "long" + }, opts); + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + var _proto3 = PolyRelFormatter.prototype; + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + return PolyRelFormatter; + }(); + var fallbackWeekSettings = { + firstDay: 1, + minimalDays: 4, + weekend: [6, 7] + }; + + /** + * @private + */ + var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.weekSettings, opts.defaultToEN); + }; + Locale.create = function create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + var specifiedLocale = locale || Settings.defaultLocale; + // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats + var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + var weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings; + return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale); + }; + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache.clear(); + intlNumCache.clear(); + intlRelCache.clear(); + intlResolvedOptionsCache.clear(); + weekInfoCache.clear(); + }; + Locale.fromObject = function fromObject(_temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + locale = _ref2.locale, + numberingSystem = _ref2.numberingSystem, + outputCalendar = _ref2.outputCalendar, + weekSettings = _ref2.weekSettings; + return Locale.create(locale, numberingSystem, outputCalendar, weekSettings); + }; + function Locale(locale, numbering, outputCalendar, weekSettings, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.weekSettings = weekSettings; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + var _proto4 = Locale.prototype; + _proto4.listingMode = function listingMode() { + var isActuallyEn = this.isEnglish(); + var hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + }; + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, validateWeekSettings(alts.weekSettings) || this.weekSettings, alts.defaultToEN || false); + } + }; + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + return this.clone(_extends({}, alts, { + defaultToEN: true + })); + }; + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + return this.clone(_extends({}, alts, { + defaultToEN: false + })); + }; + _proto4.months = function months$1(length, format) { + var _this2 = this; + if (format === void 0) { + format = false; + } + return listStuff(this, length, months, function () { + // Workaround for "ja" locale: formatToParts does not label all parts of the month + // as "month" and for this locale there is no difference between "format" and "non-format". + // As such, just use format() instead of formatToParts() and take the whole string + var monthSpecialCase = _this2.intl === "ja" || _this2.intl.startsWith("ja-"); + format &= !monthSpecialCase; + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + if (!_this2.monthsCache[formatStr][length]) { + var mapper = !monthSpecialCase ? function (dt) { + return _this2.extract(dt, intl, "month"); + } : function (dt) { + return _this2.dtFormatter(dt, intl).format(); + }; + _this2.monthsCache[formatStr][length] = mapMonths(mapper); + } + return _this2.monthsCache[formatStr][length]; + }); + }; + _proto4.weekdays = function weekdays$1(length, format) { + var _this3 = this; + if (format === void 0) { + format = false; + } + return listStuff(this, length, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + if (!_this3.weekdaysCache[formatStr][length]) { + _this3.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this3.extract(dt, intl, "weekday"); + }); + } + return _this3.weekdaysCache[formatStr][length]; + }); + }; + _proto4.meridiems = function meridiems$1() { + var _this4 = this; + return listStuff(this, undefined, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this4.meridiemCache) { + var intl = { + hour: "numeric", + hourCycle: "h12" + }; + _this4.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this4.extract(dt, intl, "dayperiod"); + }); + } + return _this4.meridiemCache; + }); + }; + _proto4.eras = function eras$1(length) { + var _this5 = this; + return listStuff(this, length, eras, function () { + var intl = { + era: length + }; + + // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + if (!_this5.eraCache[length]) { + _this5.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this5.extract(dt, intl, "era"); + }); + } + return _this5.eraCache[length]; + }); + }; + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + _proto4.listFormatter = function listFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + return getCachedLF(this.intl, opts); + }; + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || getCachedIntResolvedOptions(this.intl).locale.startsWith("en-us"); + }; + _proto4.getWeekSettings = function getWeekSettings() { + if (this.weekSettings) { + return this.weekSettings; + } else if (!hasLocaleWeekInfo()) { + return fallbackWeekSettings; + } else { + return getCachedWeekInfo(this.locale); + } + }; + _proto4.getStartOfWeek = function getStartOfWeek() { + return this.getWeekSettings().firstDay; + }; + _proto4.getMinDaysInFirstWeek = function getMinDaysInFirstWeek() { + return this.getWeekSettings().minimalDays; + }; + _proto4.getWeekendDays = function getWeekendDays() { + return this.getWeekSettings().weekend; + }; + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + _proto4.toString = function toString() { + return "Locale(" + this.locale + ", " + this.numberingSystem + ", " + this.outputCalendar + ")"; + }; + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + return this.fastNumbersCached; + } + }]); + return Locale; + }(); + + var singleton = null; + + /** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ + var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */; + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + }; + function FixedOffsetZone(offset) { + var _this; + _this = _Zone.call(this) || this; + /** @private **/ + _this.fixed = offset; + return _this; + } + + /** + * The type of zone. `fixed` for all instances of `FixedOffsetZone`. + * @override + * @type {string} + */ + var _proto = FixedOffsetZone.prototype; + /** + * Returns the offset's common name at the specified timestamp. + * + * For fixed offset zones this equals to the zone name. + * @override + */ + _proto.offsetName = function offsetName() { + return this.name; + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */; + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns true for all fixed offset zones. + * @override + * @type {boolean} + */; + /** + * Return the offset in minutes for this zone at the specified timestamp. + * + * For fixed offset zones, this is constant and does not depend on a timestamp. + * @override + * @return {number} + */ + _proto.offset = function offset() { + return this.fixed; + } + + /** + * Return whether this Zone is equal to another zone (i.e. also fixed and same offset) + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */; + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + + /** + * Return whether this Zone is valid: + * All fixed offset zones are valid. + * @override + * @type {boolean} + */; + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + + /** + * The name of this zone. + * All fixed zones' names always start with "UTC" (plus optional offset) + * @override + * @type {string} + */ + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + + /** + * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn` + * + * @override + * @type {string} + */ + }, { + key: "ianaName", + get: function get() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return "Etc/GMT" + formatOffset(-this.fixed, "narrow"); + } + } + }, { + key: "isUniversal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "utcInstance", + get: + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + function get() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + }]); + return FixedOffsetZone; + }(Zone); + + /** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ + var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + function InvalidZone(zoneName) { + var _this; + _this = _Zone.call(this) || this; + /** @private */ + _this.zoneName = zoneName; + return _this; + } + + /** @override **/ + var _proto = InvalidZone.prototype; + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + + /** @override **/; + _proto.formatOffset = function formatOffset() { + return ""; + } + + /** @override **/; + _proto.offset = function offset() { + return NaN; + } + + /** @override **/; + _proto.equals = function equals() { + return false; + } + + /** @override **/; + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + + /** @override **/ + }, { + key: "name", + get: function get() { + return this.zoneName; + } + + /** @override **/ + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + return InvalidZone; + }(Zone); + + /** + * @private + */ + function normalizeZone(input, defaultZone) { + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "default") return defaultZone;else if (lowered === "local" || lowered === "system") return SystemZone.instance;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } + } + + var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" + }; + var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] + }; + var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + function parseDigits(str) { + var value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } + } + + // cache of {numberingSystem: {append: regex}} + var digitRegexCache = new Map(); + function resetDigitRegexCache() { + digitRegexCache.clear(); + } + function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + if (append === void 0) { + append = ""; + } + var ns = numberingSystem || "latn"; + var appendCache = digitRegexCache.get(ns); + if (appendCache === undefined) { + appendCache = new Map(); + digitRegexCache.set(ns, appendCache); + } + var regex = appendCache.get(append); + if (regex === undefined) { + regex = new RegExp("" + numberingSystems[ns] + append); + appendCache.set(append, regex); + } + return regex; + } + + var now = function now() { + return Date.now(); + }, + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + twoDigitCutoffYear = 60, + throwOnInvalid, + defaultWeekSettings = null; + + /** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ + var Settings = /*#__PURE__*/function () { + function Settings() {} + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + DateTime.resetCache(); + resetDigitRegexCache(); + }; + _createClass(Settings, null, [{ + key: "now", + get: + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + function get() { + return now; + } + + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */, + set: function set(n) { + now = n; + } + + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + }, { + key: "defaultZone", + get: + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + function get() { + return normalizeZone(defaultZone, SystemZone.instance); + } + + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(zone) { + defaultZone = zone; + } + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(locale) { + defaultLocale = locale; + } + + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */, + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + + /** + * @typedef {Object} WeekSettings + * @property {number} firstDay + * @property {number} minimalDays + * @property {number[]} weekend + */ + + /** + * @return {WeekSettings|null} + */ + }, { + key: "defaultWeekSettings", + get: function get() { + return defaultWeekSettings; + } + + /** + * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and + * how many days are required in the first week of a year. + * Does not affect existing instances. + * + * @param {WeekSettings|null} weekSettings + */, + set: function set(weekSettings) { + defaultWeekSettings = validateWeekSettings(weekSettings); + } + + /** + * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + */ + }, { + key: "twoDigitCutoffYear", + get: function get() { + return twoDigitCutoffYear; + } + + /** + * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century + * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century + * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950 + * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50 + * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50 + */, + set: function set(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */, + set: function set(t) { + throwOnInvalid = t; + } + }]); + return Settings; + }(); + + var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + var _proto = Invalid.prototype; + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + return Invalid; + }(); + + var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); + } + function dayOfWeek(year, month, day) { + var d = new Date(Date.UTC(year, month - 1, day)); + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + var js = d.getUTCDay(); + return js === 0 ? 7 : js; + } + function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; + } + function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; + } + function isoWeekdayToLocal(isoWeekday, startOfWeek) { + return (isoWeekday - startOfWeek + 7) % 7 + 1; + } + + /** + * @private + */ + + function gregorianToWeek(gregObj, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek); + var weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7), + weekYear; + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek); + } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + return _extends({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); + } + function weekToGregorian(weekData, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek, + year; + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + return _extends({ + year: year, + month: month, + day: day + }, timeObject(weekData)); + } + function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day; + var ordinal = computeOrdinal(year, month, day); + return _extends({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); + } + function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal; + var _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + return _extends({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); + } + + /** + * Check if local week units like localWeekday are used in obj. + * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties. + * Modifies obj in-place! + * @param obj the object values + */ + function usesLocalWeekValues(obj, loc) { + var hasLocaleWeekData = !isUndefined(obj.localWeekday) || !isUndefined(obj.localWeekNumber) || !isUndefined(obj.localWeekYear); + if (hasLocaleWeekData) { + var hasIsoWeekData = !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear); + if (hasIsoWeekData) { + throw new ConflictingSpecificationError("Cannot mix locale-based week fields with ISO-based week fields"); + } + if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday; + if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber; + if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear; + delete obj.localWeekday; + delete obj.localWeekNumber; + delete obj.localWeekYear; + return { + minDaysInFirstWeek: loc.getMinDaysInFirstWeek(), + startOfWeek: loc.getStartOfWeek() + }; + } else { + return { + minDaysInFirstWeek: 4, + startOfWeek: 1 + }; + } + } + function hasInvalidWeekData(obj, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)), + validWeekday = integerBetween(obj.weekday, 1, 7); + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.weekNumber); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; + } + function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; + } + function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; + } + function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; + } + + /** + * @private + */ + + // TYPES + + function isUndefined(o) { + return typeof o === "undefined"; + } + function isNumber(o) { + return typeof o === "number"; + } + function isInteger(o) { + return typeof o === "number" && o % 1 === 0; + } + function isString(o) { + return typeof o === "string"; + } + function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; + } + + // CAPABILITIES + + function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } + } + function hasLocaleWeekInfo() { + try { + return typeof Intl !== "undefined" && !!Intl.Locale && ("weekInfo" in Intl.Locale.prototype || "getWeekInfo" in Intl.Locale.prototype); + } catch (e) { + return false; + } + } + + // OBJECTS AND ARRAYS + + function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; + } + function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; + } + function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); + } + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + function validateWeekSettings(settings) { + if (settings == null) { + return null; + } else if (typeof settings !== "object") { + throw new InvalidArgumentError("Week settings must be an object"); + } else { + if (!integerBetween(settings.firstDay, 1, 7) || !integerBetween(settings.minimalDays, 1, 7) || !Array.isArray(settings.weekend) || settings.weekend.some(function (v) { + return !integerBetween(v, 1, 7); + })) { + throw new InvalidArgumentError("Invalid week settings"); + } + return { + firstDay: settings.firstDay, + minimalDays: settings.minimalDays, + weekend: Array.from(settings.weekend) + }; + } + } + + // NUMBERS AND STRINGS + + function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; + } + + // x % n but takes the sign of n instead of x + function floorMod(x, n) { + return x - n * Math.floor(x / n); + } + function padStart(input, n) { + if (n === void 0) { + n = 2; + } + var isNeg = input < 0; + var padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + return padded; + } + function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } + } + function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } + } + function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } + } + function roundTo(number, digits, rounding) { + if (rounding === void 0) { + rounding = "round"; + } + var factor = Math.pow(10, digits); + switch (rounding) { + case "expand": + return number > 0 ? Math.ceil(number * factor) / factor : Math.floor(number * factor) / factor; + case "trunc": + return Math.trunc(number * factor) / factor; + case "round": + return Math.round(number * factor) / factor; + case "floor": + return Math.floor(number * factor) / factor; + case "ceil": + return Math.ceil(number * factor) / factor; + default: + throw new RangeError("Value rounding " + rounding + " is out of range"); + } + } + + // DATE BASICS + + function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } + } + + // convert a calendar object to a local timestamp (epoch, but with the offset baked in) + function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); + + // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not + // so if obj.year is in 99, but obj.day makes it roll over into year 100, + // the calculations done by Date.UTC are using year 2000 - which is incorrect + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; + } + + // adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js + function firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) { + var fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek); + return -fwdlw + minDaysInFirstWeek - 1; + } + function weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek) { + if (minDaysInFirstWeek === void 0) { + minDaysInFirstWeek = 4; + } + if (startOfWeek === void 0) { + startOfWeek = 1; + } + var weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek); + var weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek); + return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7; + } + function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year; + } + + // PARSING + + function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + var date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + if (timeZone) { + intlOpts.timeZone = timeZone; + } + var modified = _extends({ + timeZoneName: offsetFormat + }, intlOpts); + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; + } + + // signedOffset('-5', '30') -> -330 + function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); + + // don't || this because we want to preserve -0 + if (Number.isNaN(offHour)) { + offHour = 0; + } + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; + } + + // COERCION + + function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || !Number.isFinite(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; + } + function normalizeObject(obj, normalizer) { + var normalized = {}; + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; + } + + /** + * Returns the offset's value as a string + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + function formatOffset(offset, format) { + var hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + switch (format) { + case "short": + return "" + sign + padStart(hours, 2) + ":" + padStart(minutes, 2); + case "narrow": + return "" + sign + hours + (minutes > 0 ? ":" + minutes : ""); + case "techie": + return "" + sign + padStart(hours, 2) + padStart(minutes, 2); + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } + } + function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); + } + + /** + * @private + */ + + var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + function months(length) { + switch (length) { + case "narrow": + return [].concat(monthsNarrow); + case "short": + return [].concat(monthsShort); + case "long": + return [].concat(monthsLong); + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } + } + var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; + var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + function weekdays(length) { + switch (length) { + case "narrow": + return [].concat(weekdaysNarrow); + case "short": + return [].concat(weekdaysShort); + case "long": + return [].concat(weekdaysLong); + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } + } + var meridiems = ["AM", "PM"]; + var erasLong = ["Before Christ", "Anno Domini"]; + var erasShort = ["BC", "AD"]; + var erasNarrow = ["B", "A"]; + function eras(length) { + switch (length) { + case "narrow": + return [].concat(erasNarrow); + case "short": + return [].concat(erasShort); + case "long": + return [].concat(erasLong); + default: + return null; + } + } + function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; + } + function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; + } + function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; + } + function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; + } + function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + if (narrow === void 0) { + narrow = false; + } + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + case 0: + return isDay ? "today" : "this " + units[unit][0]; + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; + } + + function stringifyTokens(splits, tokenToString) { + var s = ""; + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + return s; + } + var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS + }; + + /** + * @private + */ + var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + return new Formatter(locale, opts); + }; + Formatter.parseFormat = function parseFormat(fmt) { + // white-space is always considered a literal in user-provided formats + // the " " token has a special meaning (see unitForToken) + + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + if (c === "'") { + // turn '' into a literal signal quote instead of just skipping the empty literal + if (currentFull.length > 0 || bracketed) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull === "" ? "'" : currentFull + }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: /^\s+$/.test(currentFull), + val: currentFull + }); + } + currentFull = c; + current = c; + } + } + if (currentFull.length > 0) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull + }); + } + return splits; + }; + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + var _proto = Formatter.prototype; + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + var df = this.systemLoc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + _proto.dtFormatter = function dtFormatter(dt, opts) { + if (opts === void 0) { + opts = {}; + } + return this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + }; + _proto.formatDateTime = function formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + }; + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + }; + _proto.formatInterval = function formatInterval(interval, opts) { + var df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + }; + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + }; + _proto.num = function num(n, p, signDisplay) { + if (p === void 0) { + p = 0; + } + if (signDisplay === void 0) { + signDisplay = undefined; + } + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + var opts = _extends({}, this.opts); + if (p > 0) { + opts.padTo = p; + } + if (signDisplay) { + opts.signDisplay = signDisplay; + } + return this.loc.numberFormatter(opts).format(n); + }; + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hourCycle: "h12" + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + case "u": + // falls through + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + case "s": + return _this.num(dt.second); + case "ss": + return _this.num(dt.second, 2); + // fractional seconds + case "uu": + return _this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return _this.num(Math.floor(dt.millisecond / 100)); + // minutes + case "m": + return _this.num(dt.minute); + case "mm": + return _this.num(dt.minute, 2); + // hours + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return _this.num(dt.hour); + case "HH": + return _this.num(dt.hour, 2); + // offset + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + case "a": + return meridiem(); + // dates + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + case "c": + // like 1 + return _this.num(dt.weekday); + case "ccc": + // like 'Tues' + return weekday("short", true); + case "cccc": + // like 'Tuesday' + return weekday("long", true); + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + case "E": + // like 1 + return _this.num(dt.weekday); + case "EEE": + // like 'Tues' + return weekday("short", false); + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + case "LLL": + // like Jan + return month("short", true); + case "LLLL": + // like January + return month("long", true); + case "LLLLL": + // like J + return month("narrow", true); + // months - format + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + case "MMM": + // like Jan + return month("short", false); + case "MMMM": + // like January + return month("long", false); + case "MMMMM": + // like J + return month("narrow", false); + // years + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + case "G": + // like AD + return era("short"); + case "GG": + // like Anno Domini + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return _this.num(dt.weekYear, 4); + case "W": + return _this.num(dt.weekNumber); + case "WW": + return _this.num(dt.weekNumber, 2); + case "n": + return _this.num(dt.localWeekNumber); + case "nn": + return _this.num(dt.localWeekNumber, 2); + case "ii": + return _this.num(dt.localWeekYear.toString().slice(-2), 2); + case "iiii": + return _this.num(dt.localWeekYear, 4); + case "o": + return _this.num(dt.ordinal); + case "ooo": + return _this.num(dt.ordinal, 3); + case "q": + // like 1 + return _this.num(dt.quarter); + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + case "x": + return _this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + var invertLargest = this.opts.signMode === "negativeLargestOnly" ? -1 : 1; + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "milliseconds"; + case "s": + return "seconds"; + case "m": + return "minutes"; + case "h": + return "hours"; + case "d": + return "days"; + case "w": + return "weeks"; + case "M": + return "months"; + case "y": + return "years"; + default: + return null; + } + }, + tokenToString = function tokenToString(lildur, info) { + return function (token) { + var mapped = tokenToField(token); + if (mapped) { + var inversionFactor = info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1; + var signDisplay; + if (_this2.opts.signMode === "negativeLargestOnly" && mapped !== info.largestUnit) { + signDisplay = "never"; + } else if (_this2.opts.signMode === "all") { + signDisplay = "always"; + } else { + // "auto" and "negative" are the same, but "auto" has better support + signDisplay = "auto"; + } + return _this2.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })), + durationInfo = { + isNegativeDuration: collapsed < 0, + // this relies on "collapsed" being based on "shiftTo", which builds up the object + // in order + largestUnit: Object.keys(collapsed.values)[0] + }; + return stringifyTokens(tokens, tokenToString(collapsed, durationInfo)); + }; + return Formatter; + }(); + + /* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + + var ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; + function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); + } + function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + return [_extends({}, mergedVals, val), zone || mergedZone, next]; + }, [{}, null, 1]).slice(0, 2); + }; + } + function parse(s) { + if (s == null) { + return [null, null]; + } + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + if (m) { + return extractor(m); + } + } + return [null, null]; + } + function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + return function (match, cursor) { + var ret = {}; + var i; + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + return [ret, null, cursor + i]; + }; + } + + // ISO and SQL parsing + var offsetRegex = /(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/; + var isoExtendedZone = "(?:" + offsetRegex.source + "?(?:\\[(" + ianaRegex.source + ")\\])?)?"; + var isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; + var isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + isoExtendedZone); + var isoTimeExtensionRegex = RegExp("(?:[Tt]" + isoTimeRegex.source + ")?"); + var isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; + var isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; + var isoOrdinalRegex = /(\d{4})-?(\d{3})/; + var extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); + var extractISOOrdinalData = simpleParse("year", "ordinal"); + var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one + var sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"); + var sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); + function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); + } + function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; + } + function extractISOTime(match, cursor) { + var item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; + } + function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; + } + function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; + } + + // ISO time parsing + + var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); + + // ISO duration parsing + + var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; + function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + var negativeSeconds = secondStr && secondStr[0] === "-"; + var maybeNegate = function maybeNegate(num, force) { + if (force === void 0) { + force = false; + } + return num !== undefined && (force || num && hasNegativePrefix) ? -num : num; + }; + return [{ + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + }]; + } + + // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York + // and not just that we're in -240 *right now*. But since I don't think these are used that often + // I'm just going to ignore that + var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 + }; + function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + return result; + } + + // RFC 2822/5322 + var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + return [result, new FixedOffsetZone(offset)]; + } + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); + } + + // http date + + var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); + var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); + var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); + var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + + /* + * @private + */ + + function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); + } + function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); + } + function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); + } + function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); + } + var extractISOTimeOnly = combineExtractors(extractISOTime); + function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); + } + var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); + var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); + } + + var INVALID$2 = "Invalid Duration"; + + // unit conversion constants + var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } + }, + casualMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix); + + // units ordered by size + var orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; + var reverseUnits = orderedUnits$1.slice(0).reverse(); + + // clone really means "create another instance just like this one, but with these changes" + function clone$1(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + // deep merge for vals + var conf = { + values: clear ? alts.values : _extends({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix + }; + return new Duration(conf); + } + function durationToMillis(matrix, vals) { + var _vals$milliseconds; + var sum = (_vals$milliseconds = vals.milliseconds) != null ? _vals$milliseconds : 0; + for (var _iterator = _createForOfIteratorHelperLoose(reverseUnits.slice(1)), _step; !(_step = _iterator()).done;) { + var unit = _step.value; + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; + } + + // NB: mutates parameters + function normalizeValues(matrix, vals) { + // the logic below assumes the overall value of the duration is positive + // if this is not the case, factor is used to make it so + var factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + orderedUnits$1.reduceRight(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + var previousVal = vals[previous] * factor; + var conv = matrix[current][previous]; + + // if (previousVal < 0): + // lower order unit is negative (e.g. { years: 2, days: -2 }) + // normalize this by reducing the higher order unit by the appropriate amount + // and increasing the lower order unit + // this can never make the higher order unit negative, because this function only operates + // on positive durations, so the amount of time represented by the lower order unit cannot + // be larger than the higher order unit + // else: + // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 }) + // in this case we attempt to convert as much as possible from the lower order unit into + // the higher order one + // + // Math.floor takes care of both of these cases, rounding away from 0 + // if previousVal < 0 it makes the absolute value larger + // if previousVal >= it makes the absolute value smaller + var rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + + // try to convert any decimals into smaller units if possible + // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 } + orderedUnits$1.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + var fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); + } + + // Remove all properties with a value of 0 from an object + function removeZeroes(vals) { + var newVals = {}; + for (var _i = 0, _Object$entries = Object.entries(vals); _i < _Object$entries.length; _i++) { + var _Object$entries$_i = _Object$entries[_i], + key = _Object$entries$_i[0], + value = _Object$entries$_i[1]; + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; + } + + /** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ + var Duration = /*#__PURE__*/function (_Symbol$for) { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + var matrix = accurate ? accurateMatrix : casualMatrix; + if (config.matrix) { + matrix = config.matrix; + } + + /** + * @access private + */ + this.values = config.values; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.matrix = matrix; + /** + * @access private + */ + this.isLuxonDuration = true; + } + + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject({ + milliseconds: count + }, opts); + } + + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the custom conversion system to use + * @return {Duration} + */; + Duration.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix + }); + } + + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */; + Duration.fromDurationLike = function fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationLike + " of type " + typeof durationLike); + } + } + + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the preset conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */; + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */; + Duration.fromISOTime = function fromISOTime(text, opts) { + var _parseISOTimeOnly = parseISOTimeOnly(text), + parsed = _parseISOTimeOnly[0]; + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */; + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + + /** + * @private + */; + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */; + var _proto = Duration.prototype; + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * Tokens can be escaped by wrapping with single quotes. + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat("d s", { signMode: "all" }) //=> "+6 +2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "all" }) //=> "-6 -2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "negativeLargestOnly" }) //=> "-6 2" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = _extends({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options + * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`. + * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor. + * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero + * @example + * ```js + * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 mth, 0 wks, 5 hr, 6 min' + * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes' + * ``` + */; + _proto.toHuman = function toHuman(opts) { + var _this = this; + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return INVALID$2; + var showZeros = opts.showZeros !== false; + var l = orderedUnits$1.map(function (unit) { + var val = _this.values[unit]; + if (isUndefined(val) || val === 0 && !showZeros) { + return null; + } + return _this.loc.numberFormatter(_extends({ + style: "unit", + unitDisplay: "long" + }, opts, { + unit: unit.slice(0, -1) + })).format(val); + }).filter(function (n) { + return n; + }); + return this.loc.listFormatter(_extends({ + type: "conjunction", + style: opts.listStyle || "narrow" + }, opts)).format(l); + } + + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */; + _proto.toObject = function toObject() { + if (!this.isValid) return {}; + return _extends({}, this.values); + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */; + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */; + _proto.toISOTime = function toISOTime(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return null; + var millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + opts = _extends({ + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended" + }, opts, { + includeOffset: false + }); + var dateTime = DateTime.fromMillis(millis, { + zone: "UTC" + }); + return dateTime.toISOTime(opts); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */; + _proto.toJSON = function toJSON() { + return this.toISO(); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */; + _proto.toString = function toString() { + return this.toISO(); + } + + /** + * Returns a string representation of this Duration appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "Duration { values: " + JSON.stringify(this.values) + " }"; + } else { + return "Duration { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */; + _proto.toMillis = function toMillis() { + if (!this.isValid) return NaN; + return durationToMillis(this.matrix, this.values); + } + + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */; + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */; + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration), + result = {}; + for (var _i2 = 0, _orderedUnits = orderedUnits$1; _i2 < _orderedUnits.length; _i2++) { + var k = _orderedUnits[_i2]; + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */; + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */; + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + for (var _i3 = 0, _Object$keys = Object.keys(this.values); _i3 < _Object$keys.length; _i3++) { + var k = _Object$keys[_i3]; + result[k] = asNumber(fn(this.values[k], k)); + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */; + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */; + _proto.set = function set(values) { + if (!this.isValid) return this; + var mixed = _extends({}, this.values, normalizeObject(values, Duration.normalizeUnit)); + return clone$1(this, { + values: mixed + }); + } + + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */; + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy, + matrix = _ref.matrix; + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }); + var opts = { + loc: loc, + matrix: matrix, + conversionAccuracy: conversionAccuracy + }; + return clone$1(this, opts); + } + + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */; + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + + /** + * Reduce this Duration to its canonical representation in its current units. + * Assuming the overall value of the Duration is positive, this means: + * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example) + * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise + * the overall value would be negative, see third example) + * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example) + * + * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 } + * @return {Duration} + */; + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Rescale units to its largest representation + * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 } + * @return {Duration} + */; + _proto.rescale = function rescale() { + if (!this.isValid) return this; + var vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */; + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + if (!this.isValid) return this; + if (units.length === 0) { + return this; + } + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + for (var _i4 = 0, _orderedUnits2 = orderedUnits$1; _i4 < _orderedUnits2.length; _i4++) { + var k = _orderedUnits2[_i4]; + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; + + // anything we haven't boiled down yet should get boiled to this unit + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + + // plus anything that's already in this unit + if (isNumber(vals[k])) { + own += vals[k]; + } + + // only keep the integer part for now in the hopes of putting any decimal part + // into a smaller unit later + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; + + // otherwise, keep it in the wings to boil it later + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + + // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + normalizeValues(this.matrix, built); + return clone$1(this, { + values: built + }, true); + } + + /** + * Shift this Duration to all available units. + * Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds") + * @return {Duration} + */; + _proto.shiftToAll = function shiftToAll() { + if (!this.isValid) return this; + return this.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"); + } + + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */; + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + for (var _i5 = 0, _Object$keys2 = Object.keys(this.values); _i5 < _Object$keys2.length; _i5++) { + var k = _Object$keys2[_i5]; + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { + values: negated + }, true); + } + + /** + * Removes all units with values equal to 0 from this Duration. + * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 } + * @return {Duration} + */; + _proto.removeZeros = function removeZeros() { + if (!this.isValid) return this; + var vals = removeZeroes(this.values); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Get the years. + * @type {number} + */; + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + if (!this.loc.equals(other.loc)) { + return false; + } + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + for (var _i6 = 0, _orderedUnits3 = orderedUnits$1; _i6 < _orderedUnits3.length; _i6++) { + var u = _orderedUnits3[_i6]; + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + }; + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + + /** + * Get the quarters. + * @type {number} + */ + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + + /** + * Get the months. + * @type {number} + */ + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + + /** + * Get the weeks + * @type {number} + */ + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + + /** + * Get the days. + * @type {number} + */ + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + + /** + * Get the hours. + * @type {number} + */ + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + + /** + * Get the minutes. + * @type {number} + */ + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + + /** + * Get the seconds. + * @return {number} + */ + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + + /** + * Get the milliseconds. + * @return {number} + */ + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + return Duration; + }(Symbol.for("nodejs.util.inspect.custom")); + + var INVALID$1 = "Invalid Interval"; + + // checks if the start is equal to or before the end + function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } + } + + /** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ + var Interval = /*#__PURE__*/function (_Symbol$for) { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + this.e = config.end; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.isLuxonInterval = true; + } + + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */; + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */; + Interval.after = function after(start, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */; + Interval.before = function before(end, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */; + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + if (s && e) { + var start, startIsValid; + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + var end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + if (startIsValid) { + var dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + var _dur = Duration.fromISO(s, opts); + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + + /** + * Returns the start of the Interval + * @type {DateTime} + */; + var _proto = Interval.prototype; + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime + * @return {number} + */; + _proto.count = function count(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (!this.isValid) return NaN; + var start = this.start.startOf(unit, opts); + var end; + if (opts != null && opts.useLocaleWeeks) { + end = this.end.reconfigure({ + locale: start.locale + }); + } else { + end = this.end; + } + end = end.startOf(unit, opts); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */; + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */; + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */; + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */; + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */; + _proto.splitAt = function splitAt() { + var _this = this; + if (!this.isValid) return []; + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(function (a, b) { + return a.toMillis() - b.toMillis(); + }), + results = []; + var s = this.s, + i = 0; + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + return results; + } + + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */; + _proto.splitBy = function splitBy(duration) { + var dur = Duration.fromDurationLike(duration); + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + var s = this.s, + idx = 1, + next; + var results = []; + while (s < this.e) { + var added = this.start.plus(dur.mapUnits(function (x) { + return x * idx; + })); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + return results; + } + + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */; + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */; + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */; + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */; + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + + /** + * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise. + * @param {Interval} other + * @return {boolean} + */; + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */; + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + return this.s.equals(other.s) && this.e.equals(other.e); + } + + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */; + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */; + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + + /** + * Merge an array of Intervals into an equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval + * and ending with the latest. + * + * @param {Array} intervals + * @return {Array} + */; + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + if (final) { + found.push(final); + } + return found; + } + + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */; + Interval.xor = function xor(intervals) { + var _Array$prototype; + var start = null, + currentCount = 0; + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + start = null; + } + } + return Interval.merge(results); + } + + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */; + _proto.difference = function difference() { + var _this2 = this; + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */; + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + + /** + * Returns a string representation of this Interval appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "Interval { start: " + this.s.toISO() + ", end: " + this.e.toISO() + " }"; + } else { + return "Interval { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns a localized string representing this Interval. Accepts the same options as the + * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as + * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method + * is browser-specific, but in general it will return an appropriate representation of the + * Interval in the assigned locale. Defaults to the system's locale if no locale has been + * specified. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or + * Intl.DateTimeFormat constructor options. + * @param {Object} opts - Options to override the configuration of the start DateTime. + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022 + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p + * @return {string} + */; + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1; + } + + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */; + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */; + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */; + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + + /** + * Returns a string representation of this Interval formatted according to the specified format + * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible + * formatting tool. + * @param {string} dateFormat - The format string. This string formats the start and end time. + * See {@link DateTime#toFormat} for details. + * @param {Object} opts - Options. + * @param {string} [opts.separator = ' – '] - A separator to place between the start and end + * representations. + * @return {string} + */; + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */; + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */; + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + + /** + * Returns the end of the Interval. This is the first instant which is not part of the interval + * (Interval is half-open). + * @type {DateTime} + */ + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + + /** + * Returns the last DateTime included in the interval (since end is not part of the interval) + * @type {DateTime} + */ + }, { + key: "lastDateTime", + get: function get() { + return this.isValid ? this.e ? this.e.minus(1) : null : null; + } + + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + return Interval; + }(Symbol.for("nodejs.util.inspect.custom")); + + /** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ + var Info = /*#__PURE__*/function () { + function Info() {} + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + var proto = DateTime.now().setZone(zone).set({ + month: 12 + }); + return !zone.isUniversal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */; + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */; + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + + /** + * Get the weekday on which the week starts according to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} the start of the week, 1 for Monday through 7 for Sunday + */; + Info.getStartOfWeek = function getStartOfWeek(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$locObj = _ref.locObj, + locObj = _ref$locObj === void 0 ? null : _ref$locObj; + return (locObj || Locale.create(locale)).getStartOfWeek(); + } + + /** + * Get the minimum number of days necessary in a week before it is considered part of the next year according + * to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} + */; + Info.getMinimumDaysInFirstWeek = function getMinimumDaysInFirstWeek(_temp2) { + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$locObj = _ref2.locObj, + locObj = _ref2$locObj === void 0 ? null : _ref2$locObj; + return (locObj || Locale.create(locale)).getMinDaysInFirstWeek(); + } + + /** + * Get the weekdays, which are considered the weekend according to the given locale + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday + */; + Info.getWeekendWeekdays = function getWeekendWeekdays(_temp3) { + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$locObj = _ref3.locObj, + locObj = _ref3$locObj === void 0 ? null : _ref3$locObj; + // copy the array, because we cache it internally + return (locObj || Locale.create(locale)).getWeekendDays().slice(); + } + + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */; + Info.months = function months(length, _temp4) { + if (length === void 0) { + length = "long"; + } + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem, + _ref4$locObj = _ref4.locObj, + locObj = _ref4$locObj === void 0 ? null : _ref4$locObj, + _ref4$outputCalendar = _ref4.outputCalendar, + outputCalendar = _ref4$outputCalendar === void 0 ? "gregory" : _ref4$outputCalendar; + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */; + Info.monthsFormat = function monthsFormat(length, _temp5) { + if (length === void 0) { + length = "long"; + } + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale, + _ref5$numberingSystem = _ref5.numberingSystem, + numberingSystem = _ref5$numberingSystem === void 0 ? null : _ref5$numberingSystem, + _ref5$locObj = _ref5.locObj, + locObj = _ref5$locObj === void 0 ? null : _ref5$locObj, + _ref5$outputCalendar = _ref5.outputCalendar, + outputCalendar = _ref5$outputCalendar === void 0 ? "gregory" : _ref5$outputCalendar; + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */; + Info.weekdays = function weekdays(length, _temp6) { + if (length === void 0) { + length = "long"; + } + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale, + _ref6$numberingSystem = _ref6.numberingSystem, + numberingSystem = _ref6$numberingSystem === void 0 ? null : _ref6$numberingSystem, + _ref6$locObj = _ref6.locObj, + locObj = _ref6$locObj === void 0 ? null : _ref6$locObj; + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */; + Info.weekdaysFormat = function weekdaysFormat(length, _temp7) { + if (length === void 0) { + length = "long"; + } + var _ref7 = _temp7 === void 0 ? {} : _temp7, + _ref7$locale = _ref7.locale, + locale = _ref7$locale === void 0 ? null : _ref7$locale, + _ref7$numberingSystem = _ref7.numberingSystem, + numberingSystem = _ref7$numberingSystem === void 0 ? null : _ref7$numberingSystem, + _ref7$locObj = _ref7.locObj, + locObj = _ref7$locObj === void 0 ? null : _ref7$locObj; + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */; + Info.meridiems = function meridiems(_temp8) { + var _ref8 = _temp8 === void 0 ? {} : _temp8, + _ref8$locale = _ref8.locale, + locale = _ref8$locale === void 0 ? null : _ref8$locale; + return Locale.create(locale).meridiems(); + } + + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */; + Info.eras = function eras(length, _temp9) { + if (length === void 0) { + length = "short"; + } + var _ref9 = _temp9 === void 0 ? {} : _temp9, + _ref9$locale = _ref9.locale, + locale = _ref9$locale === void 0 ? null : _ref9$locale; + return Locale.create(locale, null, "gregory").eras(length); + } + + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale + * @example Info.features() //=> { relative: false, localeWeek: true } + * @return {Object} + */; + Info.features = function features() { + return { + relative: hasRelative(), + localeWeek: hasLocaleWeekInfo() + }; + }; + return Info; + }(); + + function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); + } + function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["quarters", function (a, b) { + return b.quarter - a.quarter + (b.year - a.year) * 4; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var earlier = cursor; + var lowestOrder, highWater; + + /* This loop tries to diff using larger units first. + If we overshoot, we backtrack and try the next smaller unit. + "cursor" starts out at the earlier timestamp and moves closer and closer to "later" + as we use smaller and smaller units. + highWater keeps track of where we would be if we added one more of the smallest unit, + this is used later to potentially convert any difference smaller than the smallest higher order unit + into a fraction of that smallest higher order unit + */ + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + if (highWater > later) { + // we overshot the end point, backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + + // if we are still overshooting now, we need to backtrack again + // this happens in certain situations when diffing times in different zones, + // because this calculation ignores time zones + if (cursor > later) { + // keep the "overshot by 1" around as highWater + highWater = cursor; + // backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + return [cursor, results, highWater, lowestOrder]; + } + function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus; + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[lowestOrder] = 1, _cursor$plus)); + } + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + var duration = Duration.fromObject(results, opts); + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } + } + + var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; + } + var NBSP = String.fromCharCode(160); + var spaceOrNBSP = "[ " + NBSP + "]"; + var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); + } + function stripInsensitivities(s) { + return s.replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); + } + function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } + } + function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; + } + function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; + } + function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + } + + /** + * @param token + * @param {Locale} loc + */ + function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + // years + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + // months + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + // dates + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + // ordinals + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + // time + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + // meridiem + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + // weekdays + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + // offset/zone + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + // this special-case "token" represents a place where a macro-token expanded into a white-space literal + // in this case we accept any non-newline white-space + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; + } + var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh" + }, + hour24: { + numeric: "H", + "2-digit": "HH" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ" + } + }; + function tokenForPart(part, formatOpts, resolvedOpts) { + var type = part.type, + value = part.value; + if (type === "literal") { + var isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value + }; + } + var style = formatOpts[type]; + + // The user might have explicitly specified hour12 or hourCycle + // if so, respect their decision + // if not, refer back to the resolvedOpts, which are based on the locale + var actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + // tokens only differentiate between 24 hours or not, + // so we do not need to check hourCycle here, which is less supported anyways + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + var val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + if (val) { + return { + literal: false, + val: val + }; + } + return undefined; + } + function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; + } + function match(input, regex, handlers) { + var matches = input.match(regex); + if (matches) { + var all = {}; + var matchIndex = 1; + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } + } + function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + var zone = null; + var specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + if (f) { + r[f] = matches[k]; + } + return r; + }, {}); + return [vals, zone, specificOffset]; + } + var dummyDateTimeCache = null; + function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + return dummyDateTimeCache; + } + function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + var tokens = formatOptsToTokens(formatOpts, locale); + if (tokens == null || tokens.includes(undefined)) { + return token; + } + return tokens; + } + function expandMacroTokens(tokens, locale) { + var _Array$prototype; + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); + } + + /** + * @private + */ + + var TokenParser = /*#__PURE__*/function () { + function TokenParser(locale, format) { + this.locale = locale; + this.format = format; + this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale); + this.units = this.tokens.map(function (t) { + return unitForToken(t, locale); + }); + this.disqualifyingUnit = this.units.find(function (t) { + return t.invalidReason; + }); + if (!this.disqualifyingUnit) { + var _buildRegex = buildRegex(this.units), + regexString = _buildRegex[0], + handlers = _buildRegex[1]; + this.regex = RegExp(regexString, "i"); + this.handlers = handlers; + } + } + var _proto = TokenParser.prototype; + _proto.explainFromTokens = function explainFromTokens(input) { + if (!this.isValid) { + return { + input: input, + tokens: this.tokens, + invalidReason: this.invalidReason + }; + } else { + var _match = match(input, this.regex, this.handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null, undefined], + result = _ref6[0], + zone = _ref6[1], + specificOffset = _ref6[2]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + return { + input: input, + tokens: this.tokens, + regex: this.regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone, + specificOffset: specificOffset + }; + } + }; + _createClass(TokenParser, [{ + key: "isValid", + get: function get() { + return !this.disqualifyingUnit; + } + }, { + key: "invalidReason", + get: function get() { + return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null; + } + }]); + return TokenParser; + }(); + function explainFromTokens(locale, input, format) { + var parser = new TokenParser(locale, format); + return parser.explainFromTokens(input); + } + function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + specificOffset = _explainFromTokens.specificOffset, + invalidReason = _explainFromTokens.invalidReason; + return [result, zone, specificOffset, invalidReason]; + } + function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + var formatter = Formatter.create(locale, formatOpts); + var df = formatter.dtFormatter(getDummyDateTime()); + var parts = df.formatToParts(); + var resolvedOpts = df.resolvedOptions(); + return parts.map(function (p) { + return tokenForPart(p, formatOpts, resolvedOpts); + }); + } + + var INVALID = "Invalid DateTime"; + var MAX_DATE = 8.64e15; + function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); + } + + // we cache week data on the DT object and this intermediates the cache + /** + * @param {DateTime} dt + */ + function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; + } + + /** + * @param {DateTime} dt + */ + function possiblyCachedLocalWeekData(dt) { + if (dt.localWeekData === null) { + dt.localWeekData = gregorianToWeek(dt.c, dt.loc.getMinDaysInFirstWeek(), dt.loc.getStartOfWeek()); + } + return dt.localWeekData; + } + + // clone really means, "make a new object with these modifications". all "setters" really use this + // to create a new object while only changing some of the properties + function clone(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(_extends({}, current, alts, { + old: current + })); + } + + // find the right offset a given local time. The o input is our guess, which determines which + // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; + + // Test whether the zone matches the offset for this ts + var o2 = tz.offset(utcGuess); + + // If so, offset didn't change and we're done + if (o === o2) { + return [utcGuess, o]; + } + + // If not, change the ts by the difference in the offset + utcGuess -= (o2 - o) * 60 * 1000; + + // If that gives us the local time we want, we're done + var o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + + // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; + } + + // convert an epoch timestamp into a calendar object with the given offset + function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; + } + + // convert a calendar object to a epoch timestamp + function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); + } + + // create a new DT instance by adding a duration, adjusting for DSTs + function adjustTime(inst, dur) { + var oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = _extends({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }), + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + if (millisToAdd !== 0) { + ts += millisToAdd; + // that could have changed the offset by going over a DST, but we want to keep the ts the same + o = inst.zone.offset(ts); + } + return { + ts: ts, + o: o + }; + } + + // helper useful in turning the results of parsing into real dates + // by handling the zone options + function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + var setZone = opts.setZone, + zone = opts.zone; + if (parsed && Object.keys(parsed).length !== 0 || parsedZone) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, _extends({}, opts, { + zone: interpretationZone, + specificOffset: specificOffset + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } + } + + // if you want to output a technical format (e.g. RFC 2822), this helper + // helps handle the details + function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; + } + function _toISODate(o, extended, precision) { + var longFormat = o.c.year > 9999 || o.c.year < 0; + var c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + if (precision === "year") return c; + if (extended) { + c += "-"; + c += padStart(o.c.month); + if (precision === "month") return c; + c += "-"; + } else { + c += padStart(o.c.month); + if (precision === "month") return c; + } + c += padStart(o.c.day); + return c; + } + function _toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision) { + var showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0, + c = ""; + switch (precision) { + case "day": + case "month": + case "year": + break; + default: + c += padStart(o.c.hour); + if (precision === "hour") break; + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += ":"; + c += padStart(o.c.second); + } + } else { + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += padStart(o.c.second); + } + } + if (precision === "second") break; + if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; + } + + // defaults for unspecified units in the supported calendars + var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + + // Units in the supported calendars, sorted by bigness + var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + + // standardize case and plurality in units + function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + function normalizeUnitWithLocalWeeks(unit) { + switch (unit.toLowerCase()) { + case "localweekday": + case "localweekdays": + return "localWeekday"; + case "localweeknumber": + case "localweeknumbers": + return "localWeekNumber"; + case "localweekyear": + case "localweekyears": + return "localWeekYear"; + default: + return normalizeUnit(unit); + } + } + + // cache offsets for zones based on the current timestamp when this function is + // first called. When we are handling a datetime from components like (year, + // month, day, hour) in a time zone, we need a guess about what the timezone + // offset is so that we can convert into a UTC timestamp. One way is to find the + // offset of now in the zone. The actual date may have a different offset (for + // example, if we handle a date in June while we're in December in a zone that + // observes DST), but we can check and adjust that. + // + // When handling many dates, calculating the offset for now every time is + // expensive. It's just a guess, so we can cache the offset to use even if we + // are right on a time change boundary (we'll just correct in the other + // direction). Using a timestamp from first read is a slight optimization for + // handling dates close to the current date, since those dates will usually be + // in the same offset (we could set the timestamp statically, instead). We use a + // single timestamp for all zones to make things a bit more predictable. + // + // This is safe for quickDT (used by local() and utc()) because we don't fill in + // higher-order units from tsNow (as we do in fromObject, this requires that + // offset is calculated from tsNow). + /** + * @param {Zone} zone + * @return {number} + */ + function guessOffsetForZone(zone) { + if (zoneOffsetTs === undefined) { + zoneOffsetTs = Settings.now(); + } + + // Do not cache anything but IANA zones, because it is not safe to do so. + // Guessing an offset which is not present in the zone can cause wrong results from fixOffset + if (zone.type !== "iana") { + return zone.offset(zoneOffsetTs); + } + var zoneName = zone.name; + var offsetGuess = zoneOffsetGuessCache.get(zoneName); + if (offsetGuess === undefined) { + offsetGuess = zone.offset(zoneOffsetTs); + zoneOffsetGuessCache.set(zoneName, offsetGuess); + } + return offsetGuess; + } + + // this is a dumbed down version of fromObject() that runs about 60% faster + // but doesn't do any validation, makes a bunch of assumptions about what units + // are present, and so on. + function quickDT(obj, opts) { + var zone = normalizeZone(opts.zone, Settings.defaultZone); + if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } + var loc = Locale.fromObject(opts); + var ts, o; + + // assume we have the higher-order units + if (!isUndefined(obj.year)) { + for (var _i = 0, _orderedUnits = orderedUnits; _i < _orderedUnits.length; _i++) { + var u = _orderedUnits[_i]; + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + var offsetProvis = guessOffsetForZone(zone); + var _objToTS = objToTS(obj, offsetProvis, zone); + ts = _objToTS[0]; + o = _objToTS[1]; + } else { + ts = Settings.now(); + } + return new DateTime({ + ts: ts, + zone: zone, + loc: loc, + o: o + }); + } + function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + rounding = isUndefined(opts.rounding) ? "trunc" : opts.rounding, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? "round" : rounding); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + for (var _iterator = _createForOfIteratorHelperLoose(opts.units), _step; !(_step = _iterator()).done;) { + var unit = _step.value; + var count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); + } + function lastOpts(argList) { + var opts = {}, + args; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + return [opts, args]; + } + + /** + * Timestamp to use for cached zone offset guesses (exposed for test) + */ + var zoneOffsetTs; + /** + * Cache for zone offset guesses (exposed for test). + * + * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of + * zone.offset(). + */ + var zoneOffsetGuessCache = new Map(); + + /** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ + var DateTime = /*#__PURE__*/function (_Symbol$for) { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + if (unchanged) { + var _ref = [config.old.c, config.old.o]; + c = _ref[0]; + o = _ref[1]; + } else { + // If an offset has been passed and we have not been called from + // clone(), we can trust it and avoid the offset calculation. + var ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + + /** + * @access private + */ + this._zone = zone; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.invalid = invalid; + /** + * @access private + */ + this.weekData = null; + /** + * @access private + */ + this.localWeekData = null; + /** + * @access private + */ + this.c = c; + /** + * @access private + */ + this.o = o; + /** + * @access private + */ + this.isLuxonDateTime = true; + } + + // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + DateTime.now = function now() { + return new DateTime({}); + } + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */; + DateTime.local = function local() { + var _lastOpts = lastOpts(arguments), + opts = _lastOpts[0], + args = _lastOpts[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */; + DateTime.utc = function utc() { + var _lastOpts2 = lastOpts(arguments), + opts = _lastOpts2[0], + args = _lastOpts2[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */; + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + var ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.localWeekYear - a week year, according to the locale + * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale + * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system\'s locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: "en-US" }).toISODate() //=> '2021-12-26' + * @return {DateTime} + */; + DateTime.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + obj = obj || {}; + var zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + var loc = Locale.fromObject(opts); + var normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks); + var _usesLocalWeekValues = usesLocalWeekValues(normalized, loc), + minDaysInFirstWeek = _usesLocalWeekValues.minDaysInFirstWeek, + startOfWeek = _usesLocalWeekValues.startOfWeek; + var tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; + + // configure ourselves to deal with gregorian dates or week stuff + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + + // set default values for missing stuff + var foundFirst = false; + for (var _iterator2 = _createForOfIteratorHelperLoose(units), _step2; !(_step2 = _iterator2()).done;) { + var u = _step2.value; + var v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + + // make sure the values we have are in range + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + if (invalid) { + return DateTime.invalid(invalid); + } + + // compute the actual time + var gregorian = useWeekData ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); + + // gregorian data + weekday serves only to validate + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + if (!inst.isValid) { + return DateTime.invalid(inst.invalid); + } + return inst; + } + + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */; + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */; + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */; + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */; + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + specificOffset = _parseFromTokens[2], + invalid = _parseFromTokens[3]; + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text, specificOffset); + } + } + + /** + * @deprecated use fromFormat instead + */; + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + return DateTime.fromFormat(text, fmt, opts); + } + + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */; + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent. + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */; + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */; + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } + + /** + * Produce the format string for a set of options + * @param formatOpts + * @param localeOpts + * @returns {string} + */; + DateTime.parseFormatForOpts = function parseFormatForOpts(formatOpts, localeOpts) { + if (localeOpts === void 0) { + localeOpts = {}; + } + var tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map(function (t) { + return t ? t.val : null; + }).join(""); + } + + /** + * Produce the the fully expanded format token for the locale + * Does NOT quote characters, so quoted tokens will not round trip correctly + * @param fmt + * @param localeOpts + * @returns {string} + */; + DateTime.expandFormat = function expandFormat(fmt, localeOpts) { + if (localeOpts === void 0) { + localeOpts = {}; + } + var expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map(function (t) { + return t.val; + }).join(""); + }; + DateTime.resetCache = function resetCache() { + zoneOffsetTs = undefined; + zoneOffsetGuessCache.clear(); + } + + // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */; + var _proto = DateTime.prototype; + _proto.get = function get(unit) { + return this[unit]; + } + + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */; + /** + * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC + * in this DateTime's zone. During DST changes local time can be ambiguous, for example + * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`. + * This method will return both possible DateTimes if this DateTime's local time is ambiguous. + * @returns {DateTime[]} + */ + _proto.getPossibleOffsets = function getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + var dayMs = 86400000; + var minuteMs = 60000; + var localTS = objToLocalTS(this.c); + var oEarlier = this.zone.offset(localTS - dayMs); + var oLater = this.zone.offset(localTS + dayMs); + var o1 = this.zone.offset(localTS - oEarlier * minuteMs); + var o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + var ts1 = localTS - o1 * minuteMs; + var ts2 = localTS - o2 * minuteMs; + var c1 = tsToObj(ts1, o1); + var c2 = tsToObj(ts2, o2); + if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) { + return [clone(this, { + ts: ts1 + }), clone(this, { + ts: ts2 + })]; + } + return [this]; + } + + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */; + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOptions = function resolvedLocaleOptions(opts) { + if (opts === void 0) { + opts = {}; + } + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } + + // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */; + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + if (opts === void 0) { + opts = {}; + } + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */; + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */; + _proto.setZone = function setZone(zone, _temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + _ref2$keepLocalTime = _ref2.keepLocalTime, + keepLocalTime = _ref2$keepLocalTime === void 0 ? false : _ref2$keepLocalTime, + _ref2$keepCalendarTim = _ref2.keepCalendarTime, + keepCalendarTime = _ref2$keepCalendarTim === void 0 ? false : _ref2$keepCalendarTim; + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + newTS = _objToTS3[0]; + } + return clone(this, { + ts: newTS, + zone: zone + }); + } + } + + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */; + _proto.reconfigure = function reconfigure(_temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + locale = _ref3.locale, + numberingSystem = _ref3.numberingSystem, + outputCalendar = _ref3.outputCalendar; + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone(this, { + loc: loc + }); + } + + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */; + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * + * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`. + * They cannot be mixed with ISO-week units like `weekday`. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */; + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnitWithLocalWeeks); + var _usesLocalWeekValues2 = usesLocalWeekValues(normalized, this.loc), + minDaysInFirstWeek = _usesLocalWeekValues2.minDaysInFirstWeek, + startOfWeek = _usesLocalWeekValues2.startOfWeek; + var settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + var mixed; + if (settingWeekStuff) { + mixed = weekToGregorian(_extends({}, gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), normalized), minDaysInFirstWeek, startOfWeek); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(_extends({}, gregorianToOrdinal(this.c), normalized)); + } else { + mixed = _extends({}, this.toObject(), normalized); + + // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + return clone(this, { + ts: ts, + o: o + }); + } + + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */; + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */; + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */; + _proto.startOf = function startOf(unit, _temp3) { + var _ref4 = _temp3 === void 0 ? {} : _temp3, + _ref4$useLocaleWeeks = _ref4.useLocaleWeeks, + useLocaleWeeks = _ref4$useLocaleWeeks === void 0 ? false : _ref4$useLocaleWeeks; + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + case "quarters": + case "months": + o.day = 1; + // falls through + case "weeks": + case "days": + o.hour = 0; + // falls through + case "hours": + o.minute = 0; + // falls through + case "minutes": + o.second = 0; + // falls through + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + if (useLocaleWeeks) { + var startOfWeek = this.loc.getStartOfWeek(); + var weekday = this.weekday; + if (weekday < startOfWeek) { + o.weekNumber = this.weekNumber - 1; + } + o.weekday = startOfWeek; + } else { + o.weekday = 1; + } + } + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + return this.set(o); + } + + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */; + _proto.endOf = function endOf(unit, opts) { + var _this$plus; + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit, opts).minus(1) : this; + } + + // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */; + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */; + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */; + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=false] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z' + * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z' + * @return {string|null} + */; + _proto.toISO = function toISO(_temp4) { + var _ref5 = _temp4 === void 0 ? {} : _temp4, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format, + _ref5$suppressSeconds = _ref5.suppressSeconds, + suppressSeconds = _ref5$suppressSeconds === void 0 ? false : _ref5$suppressSeconds, + _ref5$suppressMillise = _ref5.suppressMilliseconds, + suppressMilliseconds = _ref5$suppressMillise === void 0 ? false : _ref5$suppressMillise, + _ref5$includeOffset = _ref5.includeOffset, + includeOffset = _ref5$includeOffset === void 0 ? true : _ref5$includeOffset, + _ref5$extendedZone = _ref5.extendedZone, + extendedZone = _ref5$extendedZone === void 0 ? false : _ref5$extendedZone, + _ref5$precision = _ref5.precision, + precision = _ref5$precision === void 0 ? "milliseconds" : _ref5$precision; + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + var ext = format === "extended"; + var c = _toISODate(this, ext, precision); + if (orderedUnits.indexOf(precision) >= 3) c += "T"; + c += _toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + return c; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'. + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05' + * @return {string|null} + */; + _proto.toISODate = function toISODate(_temp5) { + var _ref6 = _temp5 === void 0 ? {} : _temp5, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format, + _ref6$precision = _ref6.precision, + precision = _ref6$precision === void 0 ? "day" : _ref6$precision; + if (!this.isValid) { + return null; + } + return _toISODate(this, format === "extended", normalizeUnit(precision)); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */; + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z' + * @return {string} + */; + _proto.toISOTime = function toISOTime(_temp6) { + var _ref7 = _temp6 === void 0 ? {} : _temp6, + _ref7$suppressMillise = _ref7.suppressMilliseconds, + suppressMilliseconds = _ref7$suppressMillise === void 0 ? false : _ref7$suppressMillise, + _ref7$suppressSeconds = _ref7.suppressSeconds, + suppressSeconds = _ref7$suppressSeconds === void 0 ? false : _ref7$suppressSeconds, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includePrefix = _ref7.includePrefix, + includePrefix = _ref7$includePrefix === void 0 ? false : _ref7$includePrefix, + _ref7$extendedZone = _ref7.extendedZone, + extendedZone = _ref7$extendedZone === void 0 ? false : _ref7$extendedZone, + _ref7$format = _ref7.format, + format = _ref7$format === void 0 ? "extended" : _ref7$format, + _ref7$precision = _ref7.precision, + precision = _ref7$precision === void 0 ? "milliseconds" : _ref7$precision; + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + var c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? "T" : ""; + return c + _toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + } + + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */; + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */; + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string|null} + */; + _proto.toSQLDate = function toSQLDate() { + if (!this.isValid) { + return null; + } + return _toISODate(this, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */; + _proto.toSQLTime = function toSQLTime(_temp7) { + var _ref8 = _temp7 === void 0 ? {} : _temp7, + _ref8$includeOffset = _ref8.includeOffset, + includeOffset = _ref8$includeOffset === void 0 ? true : _ref8$includeOffset, + _ref8$includeZone = _ref8.includeZone, + includeZone = _ref8$includeZone === void 0 ? false : _ref8$includeZone, + _ref8$includeOffsetSp = _ref8.includeOffsetSpace, + includeOffsetSpace = _ref8$includeOffsetSp === void 0 ? true : _ref8$includeOffsetSp; + var fmt = "HH:mm:ss.SSS"; + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + return toTechFormat(this, fmt, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */; + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) { + return null; + } + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */; + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID; + } + + /** + * Returns a string representation of this DateTime appropriate for the REPL. + * @return {string} + */; + _proto[_Symbol$for] = function () { + if (this.isValid) { + return "DateTime { ts: " + this.toISO() + ", zone: " + this.zone.name + ", locale: " + this.locale + " }"; + } else { + return "DateTime { Invalid, reason: " + this.invalidReason + " }"; + } + } + + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */; + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */; + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + + /** + * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime. + * @return {number} + */; + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */; + _proto.toUnixInteger = function toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */; + _proto.toJSON = function toJSON() { + return this.toISO(); + } + + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */; + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */; + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + if (!this.isValid) return {}; + var base = _extends({}, this.c); + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */; + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + + // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */; + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (opts === void 0) { + opts = {}; + } + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + var durOpts = _extends({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + return otherIsLater ? diffed.negate() : diffed; + } + + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */; + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + if (opts === void 0) { + opts = {}; + } + return this.diff(DateTime.now(), unit, opts); + } + + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval|DateTime} + */; + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */; + _proto.hasSame = function hasSame(otherDateTime, unit, opts) { + if (!this.isValid) return false; + var inputMs = otherDateTime.valueOf(); + var adjustedToZone = this.setZone(otherDateTime.zone, { + keepLocalTime: true + }); + return adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts); + } + + /** + * Equality check + * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */; + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {string} [options.rounding="trunc"] - rounding method to use when rounding the numbers in the output. Can be "trunc" (toward zero), "expand" (away from zero), "round", "floor", or "ceil". + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */; + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({}, { + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + var units = ["years", "months", "days", "hours", "minutes", "seconds"]; + var unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + return diffRelative(base, this.plus(padding), _extends({}, options, { + numeric: "always", + units: units, + unit: unit + })); + } + + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */; + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({}, { + zone: this.zone + }), this, _extends({}, options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */; + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */; + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } + + // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */; + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + + /** + * @deprecated use fromFormatExplain instead + */; + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + return DateTime.fromFormatExplain(text, fmt, options); + } + + /** + * Build a parser for `fmt` using the given locale. This parser can be passed + * to {@link DateTime.fromFormatParser} to a parse a date in this format. This + * can be used to optimize cases where many dates need to be parsed in a + * specific format. + * + * @param {String} fmt - the format the string is expected to be in (see + * description) + * @param {Object} options - options used to set locale and numberingSystem + * for parser + * @returns {TokenParser} - opaque object to be used + */; + DateTime.buildFormatParser = function buildFormatParser(fmt, options) { + if (options === void 0) { + options = {}; + } + var _options2 = options, + _options2$locale = _options2.locale, + locale = _options2$locale === void 0 ? null : _options2$locale, + _options2$numberingSy = _options2.numberingSystem, + numberingSystem = _options2$numberingSy === void 0 ? null : _options2$numberingSy, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return new TokenParser(localeToUse, fmt); + } + + /** + * Create a DateTime from an input string and format parser. + * + * The format parser must have been created with the same locale as this call. + * + * @param {String} text - the string to parse + * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser} + * @param {Object} opts - options taken by fromFormat() + * @returns {DateTime} + */; + DateTime.fromFormatParser = function fromFormatParser(text, formatParser, opts) { + if (opts === void 0) { + opts = {}; + } + if (isUndefined(text) || isUndefined(formatParser)) { + throw new InvalidArgumentError("fromFormatParser requires an input string and a format parser"); + } + var _opts2 = opts, + _opts2$locale = _opts2.locale, + locale = _opts2$locale === void 0 ? null : _opts2$locale, + _opts2$numberingSyste = _opts2.numberingSystem, + numberingSystem = _opts2$numberingSyste === void 0 ? null : _opts2$numberingSyste, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + if (!localeToUse.equals(formatParser.locale)) { + throw new InvalidArgumentError("fromFormatParser called with a locale of " + localeToUse + ", " + ("but the format parser was created for " + formatParser.locale)); + } + var _formatParser$explain = formatParser.explainFromTokens(text), + result = _formatParser$explain.result, + zone = _formatParser$explain.zone, + specificOffset = _formatParser$explain.specificOffset, + invalidReason = _formatParser$explain.invalidReason; + if (invalidReason) { + return DateTime.invalid(invalidReason); + } else { + return parseDataToDateTime(result, zone, opts, "format " + formatParser.format, text, specificOffset); + } + } + + // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */; + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + }, { + key: "zone", + get: function get() { + return this._zone; + } + + /** + * Get the name of the time zone. + * @type {string} + */ + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + + /** + * Returns true if this date is on a weekend according to the locale, false otherwise + * @returns {boolean} + */ + }, { + key: "isWeekend", + get: function get() { + return this.isValid && this.loc.getWeekendDays().includes(this.weekday); + } + + /** + * Get the day of the week according to the locale. + * 1 is the first day of the week and 7 is the last day of the week. + * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1, + * @returns {number} + */ + }, { + key: "localWeekday", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN; + } + + /** + * Get the week number of the week year according to the locale. Different locales assign week numbers differently, + * because the week can start on different days of the week (see localWeekday) and because a different number of days + * is required for a week to count as the first week of a year. + * @returns {number} + */ + }, { + key: "localWeekNumber", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN; + } + + /** + * Get the week year according to the locale. Different locales assign week numbers (and therefor week years) + * differently, see localWeekNumber. + * @returns {number} + */ + }, { + key: "localWeekYear", + get: function get() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN; + } + + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.isUniversal : null; + } + + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1, + day: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's local week year + * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52 + * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53 + * @type {number} + */ + }, { + key: "weeksInLocalWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.localWeekYear, this.loc.getMinDaysInFirstWeek(), this.loc.getStartOfWeek()) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_MED_WITH_WEEKDAY", + get: function get() { + return DATE_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + return DateTime; + }(Symbol.for("nodejs.util.inspect.custom")); + function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } + } + + var VERSION = "3.7.2"; + + exports.DateTime = DateTime; + exports.Duration = Duration; + exports.FixedOffsetZone = FixedOffsetZone; + exports.IANAZone = IANAZone; + exports.Info = Info; + exports.Interval = Interval; + exports.InvalidZone = InvalidZone; + exports.Settings = Settings; + exports.SystemZone = SystemZone; + exports.VERSION = VERSION; + exports.Zone = Zone; + + Object.defineProperty(exports, '__esModule', { value: true }); + + return exports; + +})({}); +//# sourceMappingURL=luxon.js.map diff --git a/node_modules/luxon/build/global/luxon.js.map b/node_modules/luxon/build/global/luxon.js.map new file mode 100644 index 00000000..a7bbf8d6 --- /dev/null +++ b/node_modules/luxon/build/global/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/zone.js","../../src/zones/systemZone.js","../../src/zones/IANAZone.js","../../src/impl/locale.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/impl/digits.js","../../src/settings.js","../../src/impl/invalid.js","../../src/impl/conversions.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/tokenParser.js","../../src/datetime.js","../../src/luxon.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n let dtf = dtfCache.get(zoneName);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zoneName,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n dtfCache.set(zoneName, dtf);\n }\n return dtf;\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n let zone = ianaZoneCache.get(name);\n if (zone === undefined) {\n ianaZoneCache.set(name, (zone = new IANAZone(name)));\n }\n return zone;\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache.clear();\n dtfCache.clear();\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n if (!this.valid) return NaN;\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache.get(key);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache.set(key, dtf);\n }\n return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache.get(key);\n if (inf === undefined) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache.set(key, inf);\n }\n return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache.get(key);\n if (inf === undefined) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache.set(key, inf);\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n let opts = intlResolvedOptionsCache.get(locString);\n if (opts === undefined) {\n opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n intlResolvedOptionsCache.set(locString, opts);\n }\n return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache.get(locString);\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n if (!(\"minimalDays\" in data)) {\n data = { ...fallbackWeekSettings, ...data };\n }\n weekInfoCache.set(locString, data);\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache.clear();\n intlNumCache.clear();\n intlRelCache.clear();\n intlResolvedOptionsCache.clear();\n weekInfoCache.clear();\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n // As such, just use format() instead of formatToParts() and take the whole string\n const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n format &= !monthSpecialCase;\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n const mapper = !monthSpecialCase\n ? (dt) => this.extract(dt, intl, \"month\")\n : (dt) => this.dtFormatter(dt, intl).format();\n this.monthsCache[formatStr][length] = mapMonths(mapper);\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n let appendCache = digitRegexCache.get(ns);\n if (appendCache === undefined) {\n appendCache = new Map();\n digitRegexCache.set(ns, appendCache);\n }\n let regex = appendCache.get(append);\n if (regex === undefined) {\n regex = new RegExp(`${numberingSystems[ns]}${append}`);\n appendCache.set(append, regex);\n }\n\n return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n const factor = 10 ** digits;\n switch (rounding) {\n case \"expand\":\n return number > 0\n ? Math.ceil(number * factor) / factor\n : Math.floor(number * factor) / factor;\n case \"trunc\":\n return Math.trunc(number * factor) / factor;\n case \"round\":\n return Math.round(number * factor) / factor;\n case \"floor\":\n return Math.floor(number * factor) / factor;\n case \"ceil\":\n return Math.ceil(number * factor) / factor;\n default:\n throw new RangeError(`Value rounding ${rounding} is out of range`);\n }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n // turn '' into a literal signal quote instead of just skipping the empty literal\n if (currentFull.length > 0 || bracketed) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull === \"\" ? \"'\" : currentFull,\n });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0, signDisplay = undefined) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n if (signDisplay) {\n opts.signDisplay = signDisplay;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"milliseconds\";\n case \"s\":\n return \"seconds\";\n case \"m\":\n return \"minutes\";\n case \"h\":\n return \"hours\";\n case \"d\":\n return \"days\";\n case \"w\":\n return \"weeks\";\n case \"M\":\n return \"months\";\n case \"y\":\n return \"years\";\n default:\n return null;\n }\n },\n tokenToString = (lildur, info) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n const inversionFactor =\n info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n let signDisplay;\n if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n signDisplay = \"never\";\n } else if (this.opts.signMode === \"all\") {\n signDisplay = \"always\";\n } else {\n // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n signDisplay = \"auto\";\n }\n return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n durationInfo = {\n isNegativeDuration: collapsed < 0,\n // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n // in order\n largestUnit: Object.keys(collapsed.values)[0],\n };\n return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n * @example\n * ```js\n * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const showZeros = opts.showZeros !== false;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val) || (val === 0 && !showZeros)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Removes all units with values equal to 0 from this Duration.\n * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n * @return {Duration}\n */\n removeZeros() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.values);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval. This is the first instant which is not part of the interval\n * (Interval is half-open).\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns the last DateTime included in the interval (since end is not part of the interval)\n * @type {DateTime}\n */\n get lastDateTime() {\n return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into an equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n * and ending with the latest.\n *\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended, precision) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (precision === \"year\") return c;\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n c += \"-\";\n } else {\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n }\n c += padStart(o.c.day);\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n) {\n let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n c = \"\";\n switch (precision) {\n case \"day\":\n case \"month\":\n case \"year\":\n break;\n default:\n c += padStart(o.c.hour);\n if (precision === \"hour\") break;\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += \":\";\n c += padStart(o.c.second);\n }\n } else {\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += padStart(o.c.second);\n }\n }\n if (precision === \"second\") break;\n if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n // Do not cache anything but IANA zones, because it is not safe to do so.\n // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n if (zone.type !== \"iana\") {\n return zone.offset(zoneOffsetTs);\n }\n const zoneName = zone.name;\n let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n if (offsetGuess === undefined) {\n offsetGuess = zone.offset(zoneOffsetTs);\n zoneOffsetGuessCache.set(zoneName, offsetGuess);\n }\n return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache.clear();\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n * @return {string|null}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext, precision);\n if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n c += toISOTime(\n this,\n ext,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n );\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n * @return {string|null}\n */\n toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\", normalizeUnit(precision));\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string|null}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval|DateTime}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n"],"names":["LuxonError","_Error","_inheritsLoose","apply","arguments","_wrapNativeSuper","Error","InvalidDateTimeError","_LuxonError","reason","call","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","unit","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","_proto","prototype","offsetName","ts","opts","formatOffset","format","offset","equals","otherZone","_createClass","key","get","name","singleton","SystemZone","_Zone","_ref","locale","parseZoneInfo","Date","getTimezoneOffset","type","Intl","DateTimeFormat","resolvedOptions","timeZone","dtfCache","Map","makeDTF","zoneName","dtf","undefined","hour12","era","set","typeToPos","hackyOffset","date","formatted","replace","parsed","exec","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","formatToParts","filled","i","length","_formatted$i","value","pos","isUndefined","parseInt","ianaZoneCache","IANAZone","create","zone","resetCache","clear","isValidSpecifier","isValidZone","e","_this","valid","NaN","isNaN","_ref2","adOrBc","Math","abs","adjustedHour","asUTC","objToLocalTS","millisecond","asTS","over","intlLFCache","getCachedLF","locString","JSON","stringify","ListFormat","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","NumberFormat","intlRelCache","getCachedRTF","_opts","base","cacheKeyOpts","_objectWithoutPropertiesLoose","_excluded","RelativeTimeFormat","sysLocaleCache","systemLocale","intlResolvedOptionsCache","getCachedIntResolvedOptions","weekInfoCache","getCachedWeekInfo","data","Locale","getWeekInfo","weekInfo","_extends","fallbackWeekSettings","parseLocaleString","localeStr","xIndex","indexOf","substring","uIndex","options","selectedStr","smaller","_options","numberingSystem","calendar","intlConfigString","outputCalendar","includes","mapMonths","f","ms","dt","DateTime","utc","push","mapWeekdays","listStuff","loc","englishFn","intlFn","mode","listingMode","supportsFastNumbers","startsWith","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","_excluded2","Object","keys","intlOpts","useGrouping","minimumIntegerDigits","fixed","roundTo","padStart","PolyDateFormatter","originalZone","z","gmtOffset","offsetZ","setZone","plus","minutes","_proto2","map","join","toJSDate","parts","part","PolyRelFormatter","isEnglish","style","hasRelative","rtf","_proto3","count","English","numeric","firstDay","minimalDays","weekend","fromOpts","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","_temp","numbering","_parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","_proto4","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","months","_this2","monthSpecialCase","formatStr","mapper","extract","dtFormatter","weekdays","_this3","meridiems","_this4","eras","_this5","field","df","results","matching","find","m","toLowerCase","numberFormatter","fastNumbers","relFormatter","listFormatter","getWeekSettings","hasLocaleWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","toString","FixedOffsetZone","instance","utcInstance","parseSpecifier","r","match","signedOffset","InvalidZone","normalizeZone","input","defaultZone","isString","lowered","isNumber","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","split","parseDigits","str","code","charCodeAt","search","_numberingSystemsUTF","min","max","digitRegexCache","resetDigitRegexCache","digitRegex","append","ns","appendCache","regex","RegExp","now","twoDigitCutoffYear","throwOnInvalid","resetCaches","cutoffYear","t","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","d","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","findIndex","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekNumber","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","usesLocalWeekValues","obj","hasLocaleWeekData","localWeekday","localWeekNumber","localWeekYear","hasIsoWeekData","hasInvalidWeekData","validYear","isInteger","validWeek","integerBetween","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","o","isDate","maybeArray","thing","Array","isArray","bestBy","arr","by","compare","reduce","best","next","pair","pick","a","k","hasOwnProperty","prop","settings","some","v","from","bottom","top","floorMod","x","isNeg","padded","parseInteger","string","parseFloating","parseFloat","parseMillis","fraction","number","digits","rounding","factor","pow","ceil","trunc","round","RangeError","modMonth","modYear","firstWeekOffset","fwdlw","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","Number","offMin","offMinSigned","is","asNumber","numericValue","isFinite","normalizeObject","normalizer","normalized","u","hours","sign","monthsLong","monthsShort","monthsNarrow","concat","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","meridiemForDateTime","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","_iterator","_createForOfIteratorHelperLoose","_step","done","token","literal","val","macroTokenToFormatOpts","D","Formats","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","parseFormat","fmt","current","currentFull","bracketed","c","charAt","test","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","start","formatRange","end","num","p","signDisplay","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","isValid","meridiem","maybeMacro","slice","quarter","formatDurationFromString","dur","invertLargest","signMode","tokenToField","lildur","info","mapped","inversionFactor","isNegativeDuration","largestUnit","tokens","realTokens","found","collapsed","shiftTo","filter","durationInfo","values","ianaRegex","combineRegexes","_len","regexes","_key","full","source","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","_ex","parse","_len3","patterns","_key3","_i","_patterns","_patterns$_i","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","item","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","trim","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","conf","conversionAccuracy","matrix","Duration","durationToMillis","vals","_vals$milliseconds","sum","normalizeValues","reduceRight","previous","previousVal","conv","rollUp","removeZeroes","newVals","_Object$entries","entries","_Object$entries$_i","_Symbol$for","config","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","text","_parseISODuration","fromISOTime","_parseISOTimeOnly","week","toFormat","fmtOpts","toHuman","showZeros","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","dateTime","toJSON","invalidReason","valueOf","duration","_i2","_orderedUnits","minus","negate","mapUnits","fn","_i3","_Object$keys","mixed","reconfigure","as","normalize","rescale","shiftToAll","built","accumulated","lastUnit","_i4","_orderedUnits2","own","ak","negated","_i5","_Object$keys2","removeZeros","eq","v1","v2","_i6","_orderedUnits3","Symbol","for","validateStartEnd","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","_split","startIsValid","endIsValid","isInterval","toDuration","startOf","useLocaleWeeks","diff","hasSame","isEmpty","isAfter","isBefore","contains","splitAt","dateTimes","sorted","sort","b","added","splitBy","idx","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","_intervals$sort$reduc","sofar","final","xor","_Array$prototype","currentCount","ends","time","flattened","difference","toLocaleString","toISODate","dateFormat","_temp2","_ref3","_ref3$separator","separator","mapEndpoints","mapFn","Info","hasDST","proto","isUniversal","isValidIANAZone","_ref$locale","_ref$locObj","locObj","getMinimumDaysInFirstWeek","_ref2$locale","_ref2$locObj","getWeekendWeekdays","_temp3","_ref3$locale","_ref3$locObj","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_ref4$locObj","_ref4$outputCalendar","monthsFormat","_temp5","_ref5","_ref5$locale","_ref5$numberingSystem","_ref5$locObj","_ref5$outputCalendar","_temp6","_ref6","_ref6$locale","_ref6$numberingSystem","_ref6$locObj","weekdaysFormat","_temp7","_ref7","_ref7$locale","_ref7$numberingSystem","_ref7$locObj","_temp8","_ref8","_ref8$locale","_temp9","_ref9","_ref9$locale","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highOrderDiffs","differs","lowestOrder","highWater","_differs","_differs$_i","differ","_highOrderDiffs","remainingMillis","lowerOrderUnits","_cursor$plus","_Duration$fromMillis","MISSING_FTP","intUnit","post","deser","NBSP","String","fromCharCode","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","groups","h","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","tokenForPart","resolvedOpts","isSpace","actualType","buildRegex","re","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","specificOffset","Z","q","M","G","y","S","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatOptsToTokens","expandMacroTokens","TokenParser","disqualifyingUnit","_buildRegex","regexString","explainFromTokens","_match","rawMatches","parser","parseFromTokens","_explainFromTokens","formatter","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","precision","longFormat","extendedZone","showSeconds","ianaName","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","normalizeUnitWithLocalWeeks","guessOffsetForZone","zoneOffsetTs","offsetGuess","zoneOffsetGuessCache","quickDT","offsetProvis","_objToTS","diffRelative","calendary","lastOpts","argList","args","unchanged","ot","_zone","isLuxonDateTime","_lastOpts","_lastOpts2","fromJSDate","zoneToUse","fromSeconds","_usesLocalWeekValues","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","_iterator2","_step2","higherOrderInvalid","gregorian","_objToTS2","tsFinal","offsetFinal","_parseISODate","fromRFC2822","_parseRFC2822Date","fromHTTP","_parseHTTPDate","fromFormat","_opts$locale","_opts$numberingSystem","localeToUse","_parseFromTokens","fromString","fromSQL","_parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","expanded","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","resolvedLocaleOptions","_Formatter$create$res","toLocal","_ref2$keepLocalTime","_ref2$keepCalendarTim","keepCalendarTime","newTS","asObj","_objToTS3","setLocale","_usesLocalWeekValues2","settingWeekStuff","_objToTS4","_ref4$useLocaleWeeks","normalizedUnit","endOf","_this$plus","toLocaleParts","_ref5$format","_ref5$suppressSeconds","_ref5$suppressMillise","_ref5$includeOffset","_ref5$extendedZone","_ref5$precision","ext","_ref6$format","_ref6$precision","toISOWeekDate","_ref7$suppressMillise","_ref7$suppressSeconds","_ref7$includeOffset","_ref7$includePrefix","_ref7$extendedZone","_ref7$format","_ref7$precision","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref8$includeOffset","_ref8$includeZone","includeZone","_ref8$includeOffsetSp","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","buildFormatParser","_options2","_options2$locale","_options2$numberingSy","fromFormatParser","formatParser","_opts2","_opts2$locale","_opts2$numberingSyste","_formatParser$explain","dateTimeish","VERSION"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/luxon/build/global/luxon.min.js b/node_modules/luxon/build/global/luxon.min.js new file mode 100644 index 00000000..9b013034 --- /dev/null +++ b/node_modules/luxon/build/global/luxon.min.js @@ -0,0 +1 @@ +var luxon=function(e){"use strict";function L(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[n++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var t=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(q(Error)),P=function(t){function e(e){return t.call(this,"Invalid DateTime: "+e.toMessage())||this}return o(e,t),e}(t),Y=function(t){function e(e){return t.call(this,"Invalid Interval: "+e.toMessage())||this}return o(e,t),e}(t),H=function(t){function e(e){return t.call(this,"Invalid Duration: "+e.toMessage())||this}return o(e,t),e}(t),w=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(t),J=function(t){function e(e){return t.call(this,"Invalid unit "+e)||this}return o(e,t),e}(t),u=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(t),n=function(e){function t(){return e.call(this,"Zone is an abstract class")||this}return o(t,e),t}(t),t="numeric",r="short",a="long",G={year:t,month:t,day:t},$={year:t,month:r,day:t},B={year:t,month:r,day:t,weekday:r},Q={year:t,month:a,day:t},K={year:t,month:a,day:t,weekday:a},X={hour:t,minute:t},ee={hour:t,minute:t,second:t},te={hour:t,minute:t,second:t,timeZoneName:r},ne={hour:t,minute:t,second:t,timeZoneName:a},re={hour:t,minute:t,hourCycle:"h23"},ie={hour:t,minute:t,second:t,hourCycle:"h23"},oe={hour:t,minute:t,second:t,hourCycle:"h23",timeZoneName:r},ae={hour:t,minute:t,second:t,hourCycle:"h23",timeZoneName:a},se={year:t,month:t,day:t,hour:t,minute:t},ue={year:t,month:t,day:t,hour:t,minute:t,second:t},le={year:t,month:r,day:t,hour:t,minute:t},ce={year:t,month:r,day:t,hour:t,minute:t,second:t},fe={year:t,month:r,day:t,weekday:r,hour:t,minute:t},de={year:t,month:a,day:t,hour:t,minute:t,timeZoneName:r},he={year:t,month:a,day:t,hour:t,minute:t,second:t,timeZoneName:r},me={year:t,month:a,day:t,weekday:a,hour:t,minute:t,timeZoneName:a},ye={year:t,month:a,day:t,weekday:a,hour:t,minute:t,second:t,timeZoneName:a},s=function(){function e(){}var t=e.prototype;return t.offsetName=function(e,t){throw new n},t.formatOffset=function(e,t){throw new n},t.offset=function(e){throw new n},t.equals=function(e){throw new n},i(e,[{key:"type",get:function(){throw new n}},{key:"name",get:function(){throw new n}},{key:"ianaName",get:function(){return this.name}},{key:"isUniversal",get:function(){throw new n}},{key:"isValid",get:function(){throw new n}}]),e}(),ve=null,ge=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.offsetName=function(e,t){return Ot(e,t.format,t.locale)},n.formatOffset=function(e,t){return Dt(this.offset(e),t)},n.offset=function(e){return-new Date(e).getTimezoneOffset()},n.equals=function(e){return"system"===e.type},i(t,[{key:"type",get:function(){return"system"}},{key:"name",get:function(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return!0}}],[{key:"instance",get:function(){return ve=null===ve?new t:ve}}]),t}(s),pe=new Map;var ke={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};var we=new Map,c=function(n){function r(e){var t=n.call(this)||this;return t.zoneName=e,t.valid=r.isValidZone(e),t}o(r,n),r.create=function(e){var t=we.get(e);return void 0===t&&we.set(e,t=new r(e)),t},r.resetCache=function(){we.clear(),pe.clear()},r.isValidSpecifier=function(e){return this.isValidZone(e)},r.isValidZone=function(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}};var e=r.prototype;return e.offsetName=function(e,t){return Ot(e,t.format,t.locale,this.name)},e.formatOffset=function(e,t){return Dt(this.offset(e),t)},e.offset=function(e){var t,n,r,i,o,a,s,u;return!this.valid||(e=new Date(e),isNaN(e))?NaN:(i=this.name,void 0===(o=pe.get(i))&&(o=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:i,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"}),pe.set(i,o)),a=(i=(i=o).formatToParts?function(e,t){for(var n=e.formatToParts(t),r=[],i=0;ibt(i,t,n)?(r=i+1,a=1):r=i,l({weekYear:r,weekNumber:a,weekday:o},It(e))}function it(e,t,n){void 0===n&&(n=1);var r,i=e.weekYear,o=e.weekNumber,a=e.weekday,n=nt(Xe(i,1,t=void 0===t?4:t),n),s=D(i),o=7*o+a-n-7+t,a=(o<1?o+=D(r=i-1):sO.twoDigitCutoffYear?1900+e:2e3+e}function Ot(e,t,n,r){void 0===r&&(r=null);var e=new Date(e),i={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"},r=(r&&(i.timeZone=r),l({timeZoneName:t},i)),t=new Intl.DateTimeFormat(n,r).formatToParts(e).find(function(e){return"timezonename"===e.type.toLowerCase()});return t?t.value:null}function Tt(e,t){e=parseInt(e,10),Number.isNaN(e)&&(e=0),t=parseInt(t,10)||0;return 60*e+(e<0||Object.is(e,-0)?-t:t)}function Nt(e){var t=Number(e);if("boolean"!=typeof e&&""!==e&&Number.isFinite(t))return t;throw new u("Invalid unit value "+e)}function Mt(e,t){var n,r,i={};for(n in e)h(e,n)&&null!=(r=e[n])&&(i[t(n)]=Nt(r));return i}function Dt(e,t){var n=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),i=0<=e?"+":"-";switch(t){case"short":return i+m(n,2)+":"+m(r,2);case"narrow":return i+n+(0e},t.isBefore=function(e){return!!this.isValid&&this.e<=e},t.contains=function(e){return!!this.isValid&&this.s<=e&&this.e>e},t.set=function(e){var e=void 0===e?{}:e,t=e.start,e=e.end;return this.isValid?l.fromDateTimes(t||this.s,e||this.e):this},t.splitAt=function(){var t=this;if(!this.isValid)return[];for(var e=arguments.length,n=new Array(e),r=0;r+this.e?this.e:u;o.push(l.fromDateTimes(a,u)),a=u,s+=1}return o},t.splitBy=function(e){var t=x.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];for(var n=this.s,r=1,i=[];n+this.e?this.e:o;i.push(l.fromDateTimes(n,o)),n=o,r+=1}return i},t.divideEqually=function(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]},t.overlaps=function(e){return this.e>e.s&&this.s=e.e},t.equals=function(e){return!(!this.isValid||!e.isValid)&&this.s.equals(e.s)&&this.e.equals(e.e)},t.intersection=function(e){var t;return this.isValid?(t=(this.s>e.s?this:e).s,(e=(this.ee.e?this:e).e,l.fromDateTimes(t,e)):this},l.merge=function(e){var e=e.sort(function(e,t){return e.s-t.s}).reduce(function(e,t){var n=e[0],e=e[1];return e?e.overlaps(t)||e.abutsStart(t)?[n,e.union(t)]:[n.concat([e]),t]:[n,t]},[[],null]),t=e[0],e=e[1];return e&&t.push(e),t},l.xor=function(e){for(var t,n=null,r=0,i=[],e=e.map(function(e){return[{time:e.s,type:"s"},{time:e.e,type:"e"}]}),o=R((t=Array.prototype).concat.apply(t,e).sort(function(e,t){return e.time-t.time}));!(a=o()).done;)var a=a.value,n=1===(r+="s"===a.type?1:-1)?a.time:(n&&+n!=+a.time&&i.push(l.fromDateTimes(n,a.time)),null);return l.merge(i)},t.difference=function(){for(var t=this,e=arguments.length,n=new Array(e),r=0;rthis.valueOf())?this:e,r?e:this,t,n),r?e.negate():e):x.invalid("created by diffing an invalid DateTime")},t.diffNow=function(e,t){return void 0===e&&(e="milliseconds"),void 0===t&&(t={}),this.diff(k.now(),e,t)},t.until=function(e){return this.isValid?Zn.fromDateTimes(this,e):this},t.hasSame=function(e,t,n){var r;return!!this.isValid&&(r=e.valueOf(),(e=this.setZone(e.zone,{keepLocalTime:!0})).startOf(t,n)<=r)&&r<=e.endOf(t,n)},t.equals=function(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)},t.toRelative=function(e){var t,n,r,i;return this.isValid?(t=(e=void 0===e?{}:e).base||k.fromObject({},{zone:this.zone}),n=e.padding?thisthis.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}},{key:"isInLeapYear",get:function(){return gt(this.year)}},{key:"daysInMonth",get:function(){return pt(this.year,this.month)}},{key:"daysInYear",get:function(){return this.isValid?D(this.year):NaN}},{key:"weeksInWeekYear",get:function(){return this.isValid?bt(this.weekYear):NaN}},{key:"weeksInLocalWeekYear",get:function(){return this.isValid?bt(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}}],[{key:"DATE_SHORT",get:function(){return G}},{key:"DATE_MED",get:function(){return $}},{key:"DATE_MED_WITH_WEEKDAY",get:function(){return B}},{key:"DATE_FULL",get:function(){return Q}},{key:"DATE_HUGE",get:function(){return K}},{key:"TIME_SIMPLE",get:function(){return X}},{key:"TIME_WITH_SECONDS",get:function(){return ee}},{key:"TIME_WITH_SHORT_OFFSET",get:function(){return te}},{key:"TIME_WITH_LONG_OFFSET",get:function(){return ne}},{key:"TIME_24_SIMPLE",get:function(){return re}},{key:"TIME_24_WITH_SECONDS",get:function(){return ie}},{key:"TIME_24_WITH_SHORT_OFFSET",get:function(){return oe}},{key:"TIME_24_WITH_LONG_OFFSET",get:function(){return ae}},{key:"DATETIME_SHORT",get:function(){return se}},{key:"DATETIME_SHORT_WITH_SECONDS",get:function(){return ue}},{key:"DATETIME_MED",get:function(){return le}},{key:"DATETIME_MED_WITH_SECONDS",get:function(){return ce}},{key:"DATETIME_MED_WITH_WEEKDAY",get:function(){return fe}},{key:"DATETIME_FULL",get:function(){return de}},{key:"DATETIME_FULL_WITH_SECONDS",get:function(){return he}},{key:"DATETIME_HUGE",get:function(){return me}},{key:"DATETIME_HUGE_WITH_SECONDS",get:function(){return ye}}]),k}(Symbol.for("nodejs.util.inspect.custom"));function Or(e){if(W.isDateTime(e))return e;if(e&&e.valueOf&&v(e.valueOf()))return W.fromJSDate(e);if(e&&"object"==typeof e)return W.fromObject(e);throw new u("Unknown datetime argument: "+e+", of type "+typeof e)}return e.DateTime=W,e.Duration=x,e.FixedOffsetZone=f,e.IANAZone=c,e.Info=Wn,e.Interval=Zn,e.InvalidZone=ze,e.Settings=O,e.SystemZone=ge,e.VERSION="3.7.2",e.Zone=s,Object.defineProperty(e,"__esModule",{value:!0}),e}({}); \ No newline at end of file diff --git a/node_modules/luxon/build/global/luxon.min.js.map b/node_modules/luxon/build/global/luxon.min.js.map new file mode 100644 index 00000000..64d99aa3 --- /dev/null +++ b/node_modules/luxon/build/global/luxon.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"build/global/luxon.js","sources":["0"],"names":["luxon","exports","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","arg","key","input","hint","prim","Symbol","toPrimitive","undefined","String","Number","res","call","TypeError","_createClass","Constructor","protoProps","staticProps","prototype","_extends","assign","bind","arguments","source","hasOwnProperty","apply","this","_inheritsLoose","subClass","superClass","create","_setPrototypeOf","constructor","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","p","_construct","Parent","args","Class","Reflect","construct","sham","Proxy","Boolean","valueOf","e","a","push","instance","Function","_wrapNativeSuper","_cache","Map","toString","indexOf","has","get","set","Wrapper","value","_objectWithoutPropertiesLoose","excluded","sourceKeys","keys","_arrayLikeToArray","arr","len","arr2","Array","_createForOfIteratorHelperLoose","allowArrayLike","it","iterator","next","isArray","minLen","n","slice","name","from","test","done","LuxonError","_Error","Error","InvalidDateTimeError","_LuxonError","reason","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","unit","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","_proto","offsetName","ts","opts","formatOffset","format","offset","equals","otherZone","singleton$1","SystemZone","_Zone","_ref","parseZoneInfo","locale","Date","getTimezoneOffset","type","Intl","DateTimeFormat","resolvedOptions","timeZone","dtfCache","typeToPos","era","ianaZoneCache","IANAZone","_this","zoneName","valid","isValidZone","zone","resetCache","clear","isValidSpecifier","adOrBc","dtf","date","fDay","adjustedHour","over","isNaN","NaN","hour12","_ref2","formatToParts","formatted","filled","_formatted$i","pos","isUndefined","parseInt","replace","fMonth","parsed","exec","asTS","objToLocalTS","Math","abs","millisecond","_excluded","_excluded2","intlLFCache","intlDTCache","getCachedDTF","locString","JSON","stringify","intlNumCache","intlRelCache","sysLocaleCache","intlResolvedOptionsCache","getCachedIntResolvedOptions","weekInfoCache","listStuff","loc","englishFn","intlFn","mode","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","intlOpts","useGrouping","minimumIntegerDigits","inf","NumberFormat","fixed","padStart","roundTo","PolyDateFormatter","dt","z","originalZone","offsetZ","gmtOffset","setZone","plus","minutes","_proto2","map","join","toJSDate","parts","part","PolyRelFormatter","isEnglish","style","hasRelative","rtf","_opts","base","cacheKeyOpts","RelativeTimeFormat","_proto3","count","formatRelativeTime","numeric","narrow","units","years","quarters","months","weeks","days","hours","seconds","lastable","isDay","isInPast","is","singular","fmtValue","lilUnits","fmtUnit","fallbackWeekSettings","firstDay","minimalDays","weekend","Locale","numbering","outputCalendar","weekSettings","specifiedLocale","_parseLocaleString","localeStr","xIndex","uIndex","substring","options","selectedStr","smaller","_options","numberingSystem","calendar","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","includes","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","fromOpts","defaultToEN","Settings","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","validateWeekSettings","defaultWeekSettings","fromObject","_temp","_proto4","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","_this2","monthSpecialCase","startsWith","formatStr","f","ms","DateTime","utc","dtFormatter","extract","weekdays","_this3","meridiems","_this4","eras","_this5","field","matching","find","m","toLowerCase","numberFormatter","fastNumbers","relFormatter","listFormatter","ListFormat","getWeekSettings","hasLocaleWeekInfo","data","getWeekInfo","weekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","singleton","FixedOffsetZone","utcInstance","parseSpecifier","r","match","signedOffset","InvalidZone","normalizeZone","defaultZone","lowered","isNumber","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","split","digitRegexCache","digitRegex","append","ns","appendCache","regex","RegExp","throwOnInvalid","now","twoDigitCutoffYear","resetCaches","cutoffYear","t","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","d","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","findIndex","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekYear","weekNumber","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","usesLocalWeekValues","obj","localWeekday","localWeekNumber","localWeekYear","hasInvalidGregorianData","validYear","isInteger","validMonth","integerBetween","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","bestBy","by","compare","reduce","best","pair","prop","settings","some","v","thing","bottom","top","padded","parseInteger","string","parseFloating","parseFloat","parseMillis","fraction","number","digits","rounding","factor","pow","ceil","trunc","round","RangeError","modMonth","x","firstWeekOffset","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","isFinite","normalizeObject","normalizer","u","normalized","sign","k","monthsLong","monthsShort","monthsNarrow","concat","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","_iterator","_step","token","literal","val","_macroTokenToFormatOpts","D","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","formatOpts","systemLoc","parseFormat","fmt","current","currentFull","bracketed","c","charAt","macroTokenToFormatOpts","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","start","formatRange","end","num","signDisplay","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","isValid","meridiem","maybeMacro","quarter","formatDurationFromString","dur","lildur","info","invertLargest","signMode","tokenToField","tokens","realTokens","found","collapsed","shiftTo","filter","durationInfo","isNegativeDuration","largestUnit","values","inversionFactor","mapped","ianaRegex","combineRegexes","_len","regexes","_key","full","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","_ex","parse","_len3","patterns","_key3","_i","_patterns","_patterns$_i","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","maybeNegate","force","hasNegativePrefix","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","negativeSeconds","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","INVALID$2","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits$1","reverseUnits","reverse","clone$1","conf","conversionAccuracy","matrix","Duration","durationToMillis","vals","_vals$milliseconds","sum","normalizeValues","reduceRight","previous","conv","rollUp","previousVal","removeZeroes","newVals","_Object$entries","entries","_Object$entries$_i","_Symbol$for","config","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","text","fromISOTime","week","toFormat","fmtOpts","toHuman","showZeros","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","toJSON","invalidReason","duration","_i2","_orderedUnits","minus","negate","mapUnits","fn","_i3","_Object$keys","reconfigure","as","normalize","rescale","shiftToAll","built","accumulated","_i4","_orderedUnits2","ak","lastUnit","own","negated","_i5","_Object$keys2","removeZeros","v1","_i6","_orderedUnits3","v2","for","INVALID$1","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","endIsValid","_split","startIsValid","_dur","isInterval","toDuration","startOf","useLocaleWeeks","diff","hasSame","isEmpty","isAfter","dateTime","isBefore","contains","splitAt","dateTimes","sorted","sort","b","results","added","splitBy","idx","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","_intervals$sort$reduc","item","sofar","final","xor","_Array$prototype","currentCount","ends","time","difference","toLocaleString","toISODate","dateFormat","_temp2","_ref3$separator","separator","mapEndpoints","mapFn","Info","hasDST","proto","isUniversal","isValidIANAZone","_ref$locale","_ref$locObj","locObj","getMinimumDaysInFirstWeek","_ref2$locale","_ref2$locObj","getWeekendWeekdays","_temp3","_ref3","_ref3$locale","_ref3$locObj","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_ref4$locObj","_ref4$outputCalendar","monthsFormat","_temp5","_ref5","_ref5$locale","_ref5$numberingSystem","_ref5$locObj","_ref5$outputCalendar","_temp6","_ref6","_ref6$locale","_ref6$numberingSystem","_ref6$locObj","weekdaysFormat","_temp7","_ref7","_ref7$locale","_ref7$numberingSystem","_ref7$locObj","_temp8","_ref8$locale","_temp9","_ref9$locale","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","_diff","_highOrderDiffs","lowestOrder","highWater","_differs","_differs$_i","differ","remainingMillis","lowerOrderUnits","_cursor$plus","_Duration$fromMillis","MISSING_FTP","intUnit","post","deser","str","code","charCodeAt","search","_numberingSystemsUTF","min","max","spaceOrNBSP","fromCharCode","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","groups","simple","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","partTypeStyleToTokenVal","2-digit","short","long","dayperiod","dayPeriod","hour24","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","TokenParser","handlers","disqualifyingUnit","_buildRegex","explainFromTokens","_match","matches","h","all","matchIndex","rawMatches","Z","specificOffset","q","M","G","y","S","resolvedOpts","df","isSpace","actualType","INVALID","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","toTechFormat","_toISODate","extended","precision","longFormat","_toISOTime","extendedZone","showSeconds","ianaName","zoneOffsetTs","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedUnits","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","normalizeUnitWithLocalWeeks","quickDT","offsetGuess","_objToTS","zoneOffsetGuessCache","diffRelative","calendary","lastOpts","argList","ot","_zone","isLuxonDateTime","_lastOpts","_lastOpts2","fromJSDate","zoneToUse","fromSeconds","_usesLocalWeekValues","tsNow","offsetProvis","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","defaultValues","useWeekData","objNow","foundFirst","_iterator2","_step2","validWeek","validWeekday","validOrdinal","_objToTS2","_parseISODate","fromRFC2822","_parseRFC2822Date","trim","fromHTTP","_parseHTTPDate","fromFormat","_opts$locale","_opts$numberingSystem","localeToUse","_parseFromTokens","_explainFromTokens","fromString","fromSQL","_parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","getPossibleOffsets","ts1","ts2","c1","c2","oEarlier","oLater","o1","resolvedLocaleOptions","_Formatter$create$res","toLocal","newTS","_ref2$keepLocalTime","_ref2$keepCalendarTim","keepCalendarTime","setLocale","mixed","_usesLocalWeekValues2","settingWeekStuff","_objToTS4","_ref4$useLocaleWeeks","normalizedUnit","endOf","_this$plus","toLocaleParts","_ref5$format","_ref5$suppressSeconds","_ref5$suppressMillise","_ref5$includeOffset","_ref5$extendedZone","_ref5$precision","ext","_ref6$format","_ref6$precision","toISOWeekDate","_ref7$suppressMillise","_ref7$suppressSeconds","_ref7$includeOffset","_ref7$includePrefix","_ref7$extendedZone","_ref7$format","_ref7$precision","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref8","_ref8$includeOffset","_ref8$includeZone","includeZone","_ref8$includeOffsetSp","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","otherIsLater","durOpts","diffed","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","buildFormatParser","_options2","_options2$locale","_options2$numberingSy","fromFormatParser","formatParser","_opts2","_opts2$locale","_opts2$numberingSyste","_formatParser$explain","dateTimeish","VERSION"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/luxon/build/node/luxon.js b/node_modules/luxon/build/node/luxon.js new file mode 100644 index 00000000..a8ee891f --- /dev/null +++ b/node_modules/luxon/build/node/luxon.js @@ -0,0 +1,7792 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +// these aren't really private, but nor are they really useful to document + +/** + * @private + */ +class LuxonError extends Error {} + +/** + * @private + */ +class InvalidDateTimeError extends LuxonError { + constructor(reason) { + super(`Invalid DateTime: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class InvalidIntervalError extends LuxonError { + constructor(reason) { + super(`Invalid Interval: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class InvalidDurationError extends LuxonError { + constructor(reason) { + super(`Invalid Duration: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class ConflictingSpecificationError extends LuxonError {} + +/** + * @private + */ +class InvalidUnitError extends LuxonError { + constructor(unit) { + super(`Invalid unit ${unit}`); + } +} + +/** + * @private + */ +class InvalidArgumentError extends LuxonError {} + +/** + * @private + */ +class ZoneIsAbstractError extends LuxonError { + constructor() { + super("Zone is an abstract class"); + } +} + +/** + * @private + */ + +const n = "numeric", + s = "short", + l = "long"; +const DATE_SHORT = { + year: n, + month: n, + day: n +}; +const DATE_MED = { + year: n, + month: s, + day: n +}; +const DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s +}; +const DATE_FULL = { + year: n, + month: l, + day: n +}; +const DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l +}; +const TIME_SIMPLE = { + hour: n, + minute: n +}; +const TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n +}; +const TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s +}; +const TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l +}; +const TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23" +}; +const TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23" +}; +const TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s +}; +const TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l +}; +const DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n +}; +const DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n +}; +const DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n +}; +const DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n +}; +const DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n +}; +const DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s +}; +const DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s +}; +const DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l +}; +const DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l +}; + +/** + * @interface + */ +class Zone { + /** + * The type of zone + * @abstract + * @type {string} + */ + get type() { + throw new ZoneIsAbstractError(); + } + + /** + * The name of this zone. + * @abstract + * @type {string} + */ + get name() { + throw new ZoneIsAbstractError(); + } + + /** + * The IANA name of this zone. + * Defaults to `name` if not overwritten by a subclass. + * @abstract + * @type {string} + */ + get ianaName() { + return this.name; + } + + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + get isUniversal() { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + offset(ts) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + get isValid() { + throw new ZoneIsAbstractError(); + } +} + +let singleton$1 = null; + +/** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ +class SystemZone extends Zone { + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + static get instance() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + + /** @override **/ + get type() { + return "system"; + } + + /** @override **/ + get name() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName(ts, { + format, + locale + }) { + return parseZoneInfo(ts, format, locale); + } + + /** @override **/ + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/ + offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + + /** @override **/ + equals(otherZone) { + return otherZone.type === "system"; + } + + /** @override **/ + get isValid() { + return true; + } +} + +const dtfCache = new Map(); +function makeDTF(zoneName) { + let dtf = dtfCache.get(zoneName); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zoneName, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short" + }); + dtfCache.set(zoneName, dtf); + } + return dtf; +} +const typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6 +}; +function hackyOffset(dtf, date) { + const formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; +} +function partsOffset(dtf, date) { + const formatted = dtf.formatToParts(date); + const filled = []; + for (let i = 0; i < formatted.length; i++) { + const { + type, + value + } = formatted[i]; + const pos = typeToPos[type]; + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; +} +const ianaZoneCache = new Map(); +/** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ +class IANAZone extends Zone { + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + static create(name) { + let zone = ianaZoneCache.get(name); + if (zone === undefined) { + ianaZoneCache.set(name, zone = new IANAZone(name)); + } + return zone; + } + + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + static resetCache() { + ianaZoneCache.clear(); + dtfCache.clear(); + } + + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead. + * @return {boolean} + */ + static isValidSpecifier(s) { + return this.isValidZone(s); + } + + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + static isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + } + constructor(name) { + super(); + /** @private **/ + this.zoneName = name; + /** @private **/ + this.valid = IANAZone.isValidZone(name); + } + + /** + * The type of zone. `iana` for all instances of `IANAZone`. + * @override + * @type {string} + */ + get type() { + return "iana"; + } + + /** + * The name of this zone (i.e. the IANA zone name). + * @override + * @type {string} + */ + get name() { + return this.zoneName; + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns false for all IANA zones. + * @override + * @type {boolean} + */ + get isUniversal() { + return false; + } + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @override + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + offsetName(ts, { + format, + locale + }) { + return parseZoneInfo(ts, format, locale, this.name); + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @override + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + offset(ts) { + if (!this.valid) return NaN; + const date = new Date(ts); + if (isNaN(date)) return NaN; + const dtf = makeDTF(this.name); + let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date); + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + + // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + const adjustedHour = hour === 24 ? 0 : hour; + const asUTC = objToLocalTS({ + year, + month, + day, + hour: adjustedHour, + minute, + second, + millisecond: 0 + }); + let asTS = +date; + const over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + + /** + * Return whether this Zone is equal to another zone + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + + /** + * Return whether this Zone is valid. + * @override + * @type {boolean} + */ + get isValid() { + return this.valid; + } +} + +// todo - remap caching + +let intlLFCache = {}; +function getCachedLF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; +} +const intlDTCache = new Map(); +function getCachedDTF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlDTCache.get(key); + if (dtf === undefined) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache.set(key, dtf); + } + return dtf; +} +const intlNumCache = new Map(); +function getCachedINF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let inf = intlNumCache.get(key); + if (inf === undefined) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache.set(key, inf); + } + return inf; +} +const intlRelCache = new Map(); +function getCachedRTF(locString, opts = {}) { + const { + base, + ...cacheKeyOpts + } = opts; // exclude `base` from the options + const key = JSON.stringify([locString, cacheKeyOpts]); + let inf = intlRelCache.get(key); + if (inf === undefined) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache.set(key, inf); + } + return inf; +} +let sysLocaleCache = null; +function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } +} +const intlResolvedOptionsCache = new Map(); +function getCachedIntResolvedOptions(locString) { + let opts = intlResolvedOptionsCache.get(locString); + if (opts === undefined) { + opts = new Intl.DateTimeFormat(locString).resolvedOptions(); + intlResolvedOptionsCache.set(locString, opts); + } + return opts; +} +const weekInfoCache = new Map(); +function getCachedWeekInfo(locString) { + let data = weekInfoCache.get(locString); + if (!data) { + const locale = new Intl.Locale(locString); + // browsers currently implement this as a property, but spec says it should be a getter function + data = "getWeekInfo" in locale ? locale.getWeekInfo() : locale.weekInfo; + // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86 + if (!("minimalDays" in data)) { + data = { + ...fallbackWeekSettings, + ...data + }; + } + weekInfoCache.set(locString, data); + } + return data; +} +function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + + // private subtags and unicode subtags have ordering requirements, + // and we're not properly parsing this, so just strip out the + // private ones if they exist. + const xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + const uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + let options; + let selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + const smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + const { + numberingSystem, + calendar + } = options; + return [selectedStr, numberingSystem, calendar]; + } +} +function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + if (outputCalendar) { + localeStr += `-ca-${outputCalendar}`; + } + if (numberingSystem) { + localeStr += `-nu-${numberingSystem}`; + } + return localeStr; + } else { + return localeStr; + } +} +function mapMonths(f) { + const ms = []; + for (let i = 1; i <= 12; i++) { + const dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; +} +function mapWeekdays(f) { + const ms = []; + for (let i = 1; i <= 7; i++) { + const dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; +} +function listStuff(loc, length, englishFn, intlFn) { + const mode = loc.listingMode(); + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } +} +function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || getCachedIntResolvedOptions(loc.locale).numberingSystem === "latn"; + } +} + +/** + * @private + */ + +class PolyNumberFormatter { + constructor(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + const { + padTo, + floor, + ...otherOpts + } = opts; + if (!forceSimple || Object.keys(otherOpts).length > 0) { + const intlOpts = { + useGrouping: false, + ...opts + }; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + format(i) { + if (this.inf) { + const fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + const fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(fixed, this.padTo); + } + } +} + +/** + * @private + */ + +class PolyDateFormatter { + constructor(dt, intl, opts) { + this.opts = opts; + this.originalZone = undefined; + let z = undefined; + if (this.opts.timeZone) { + // Don't apply any workarounds if a timeZone is explicitly provided in opts + this.dt = dt; + } else if (dt.zone.type === "fixed") { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + const gmtOffset = -1 * (dt.offset / 60); + const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so + // we manually apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + // Custom zones can have any offset / offsetName so we just manually + // apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ + minutes: dt.offset + }); + this.originalZone = dt.zone; + } + const intlOpts = { + ...this.opts + }; + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + format() { + if (this.originalZone) { + // If we have to substitute in the actual zone name, we have to use + // formatToParts so that the timezone can be replaced. + return this.formatToParts().map(({ + value + }) => value).join(""); + } + return this.dtf.format(this.dt.toJSDate()); + } + formatToParts() { + const parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map(part => { + if (part.type === "timeZoneName") { + const offsetName = this.originalZone.offsetName(this.dt.ts, { + locale: this.dt.locale, + format: this.opts.timeZoneName + }); + return { + ...part, + value: offsetName + }; + } else { + return part; + } + }); + } + return parts; + } + resolvedOptions() { + return this.dtf.resolvedOptions(); + } +} + +/** + * @private + */ +class PolyRelFormatter { + constructor(intl, isEnglish, opts) { + this.opts = { + style: "long", + ...opts + }; + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + } + formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + } +} +const fallbackWeekSettings = { + firstDay: 1, + minimalDays: 4, + weekend: [6, 7] +}; + +/** + * @private + */ +class Locale { + static fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.weekSettings, opts.defaultToEN); + } + static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) { + const specifiedLocale = locale || Settings.defaultLocale; + // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats + const localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings; + return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale); + } + static resetCache() { + sysLocaleCache = null; + intlDTCache.clear(); + intlNumCache.clear(); + intlRelCache.clear(); + intlResolvedOptionsCache.clear(); + weekInfoCache.clear(); + } + static fromObject({ + locale, + numberingSystem, + outputCalendar, + weekSettings + } = {}) { + return Locale.create(locale, numberingSystem, outputCalendar, weekSettings); + } + constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) { + const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale); + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.weekSettings = weekSettings; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + get fastNumbers() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + return this.fastNumbersCached; + } + listingMode() { + const isActuallyEn = this.isEnglish(); + const hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + } + clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, validateWeekSettings(alts.weekSettings) || this.weekSettings, alts.defaultToEN || false); + } + } + redefaultToEN(alts = {}) { + return this.clone({ + ...alts, + defaultToEN: true + }); + } + redefaultToSystem(alts = {}) { + return this.clone({ + ...alts, + defaultToEN: false + }); + } + months(length, format = false) { + return listStuff(this, length, months, () => { + // Workaround for "ja" locale: formatToParts does not label all parts of the month + // as "month" and for this locale there is no difference between "format" and "non-format". + // As such, just use format() instead of formatToParts() and take the whole string + const monthSpecialCase = this.intl === "ja" || this.intl.startsWith("ja-"); + format &= !monthSpecialCase; + const intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + if (!this.monthsCache[formatStr][length]) { + const mapper = !monthSpecialCase ? dt => this.extract(dt, intl, "month") : dt => this.dtFormatter(dt, intl).format(); + this.monthsCache[formatStr][length] = mapMonths(mapper); + } + return this.monthsCache[formatStr][length]; + }); + } + weekdays(length, format = false) { + return listStuff(this, length, weekdays, () => { + const intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + if (!this.weekdaysCache[formatStr][length]) { + this.weekdaysCache[formatStr][length] = mapWeekdays(dt => this.extract(dt, intl, "weekday")); + } + return this.weekdaysCache[formatStr][length]; + }); + } + meridiems() { + return listStuff(this, undefined, () => meridiems, () => { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!this.meridiemCache) { + const intl = { + hour: "numeric", + hourCycle: "h12" + }; + this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(dt => this.extract(dt, intl, "dayperiod")); + } + return this.meridiemCache; + }); + } + eras(length) { + return listStuff(this, length, eras, () => { + const intl = { + era: length + }; + + // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + if (!this.eraCache[length]) { + this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(dt => this.extract(dt, intl, "era")); + } + return this.eraCache[length]; + }); + } + extract(dt, intlOpts, field) { + const df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(m => m.type.toLowerCase() === field); + return matching ? matching.value : null; + } + numberFormatter(opts = {}) { + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + } + dtFormatter(dt, intlOpts = {}) { + return new PolyDateFormatter(dt, this.intl, intlOpts); + } + relFormatter(opts = {}) { + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + } + listFormatter(opts = {}) { + return getCachedLF(this.intl, opts); + } + isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || getCachedIntResolvedOptions(this.intl).locale.startsWith("en-us"); + } + getWeekSettings() { + if (this.weekSettings) { + return this.weekSettings; + } else if (!hasLocaleWeekInfo()) { + return fallbackWeekSettings; + } else { + return getCachedWeekInfo(this.locale); + } + } + getStartOfWeek() { + return this.getWeekSettings().firstDay; + } + getMinDaysInFirstWeek() { + return this.getWeekSettings().minimalDays; + } + getWeekendDays() { + return this.getWeekSettings().weekend; + } + equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + } + toString() { + return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`; + } +} + +let singleton = null; + +/** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ +class FixedOffsetZone extends Zone { + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + static get utcInstance() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + static instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + static parseSpecifier(s) { + if (s) { + const r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + } + constructor(offset) { + super(); + /** @private **/ + this.fixed = offset; + } + + /** + * The type of zone. `fixed` for all instances of `FixedOffsetZone`. + * @override + * @type {string} + */ + get type() { + return "fixed"; + } + + /** + * The name of this zone. + * All fixed zones' names always start with "UTC" (plus optional offset) + * @override + * @type {string} + */ + get name() { + return this.fixed === 0 ? "UTC" : `UTC${formatOffset(this.fixed, "narrow")}`; + } + + /** + * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn` + * + * @override + * @type {string} + */ + get ianaName() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return `Etc/GMT${formatOffset(-this.fixed, "narrow")}`; + } + } + + /** + * Returns the offset's common name at the specified timestamp. + * + * For fixed offset zones this equals to the zone name. + * @override + */ + offsetName() { + return this.name; + } + + /** + * Returns the offset's value as a string + * @override + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + return formatOffset(this.fixed, format); + } + + /** + * Returns whether the offset is known to be fixed for the whole year: + * Always returns true for all fixed offset zones. + * @override + * @type {boolean} + */ + get isUniversal() { + return true; + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * + * For fixed offset zones, this is constant and does not depend on a timestamp. + * @override + * @return {number} + */ + offset() { + return this.fixed; + } + + /** + * Return whether this Zone is equal to another zone (i.e. also fixed and same offset) + * @override + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + + /** + * Return whether this Zone is valid: + * All fixed offset zones are valid. + * @override + * @type {boolean} + */ + get isValid() { + return true; + } +} + +/** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ +class InvalidZone extends Zone { + constructor(zoneName) { + super(); + /** @private */ + this.zoneName = zoneName; + } + + /** @override **/ + get type() { + return "invalid"; + } + + /** @override **/ + get name() { + return this.zoneName; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName() { + return null; + } + + /** @override **/ + formatOffset() { + return ""; + } + + /** @override **/ + offset() { + return NaN; + } + + /** @override **/ + equals() { + return false; + } + + /** @override **/ + get isValid() { + return false; + } +} + +/** + * @private + */ +function normalizeZone(input, defaultZone) { + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + const lowered = input.toLowerCase(); + if (lowered === "default") return defaultZone;else if (lowered === "local" || lowered === "system") return SystemZone.instance;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } +} + +const numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" +}; +const numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] +}; +const hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); +function parseDigits(str) { + let value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (let i = 0; i < str.length; i++) { + const code = str.charCodeAt(i); + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (const key in numberingSystemsUTF16) { + const [min, max] = numberingSystemsUTF16[key]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } +} + +// cache of {numberingSystem: {append: regex}} +const digitRegexCache = new Map(); +function resetDigitRegexCache() { + digitRegexCache.clear(); +} +function digitRegex({ + numberingSystem +}, append = "") { + const ns = numberingSystem || "latn"; + let appendCache = digitRegexCache.get(ns); + if (appendCache === undefined) { + appendCache = new Map(); + digitRegexCache.set(ns, appendCache); + } + let regex = appendCache.get(append); + if (regex === undefined) { + regex = new RegExp(`${numberingSystems[ns]}${append}`); + appendCache.set(append, regex); + } + return regex; +} + +let now = () => Date.now(), + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + twoDigitCutoffYear = 60, + throwOnInvalid, + defaultWeekSettings = null; + +/** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ +class Settings { + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + static get now() { + return now; + } + + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + static set now(n) { + now = n; + } + + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + static set defaultZone(zone) { + defaultZone = zone; + } + + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + static get defaultZone() { + return normalizeZone(defaultZone, SystemZone.instance); + } + + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultLocale() { + return defaultLocale; + } + + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultLocale(locale) { + defaultLocale = locale; + } + + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultNumberingSystem() { + return defaultNumberingSystem; + } + + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultNumberingSystem(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultOutputCalendar() { + return defaultOutputCalendar; + } + + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultOutputCalendar(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + + /** + * @typedef {Object} WeekSettings + * @property {number} firstDay + * @property {number} minimalDays + * @property {number[]} weekend + */ + + /** + * @return {WeekSettings|null} + */ + static get defaultWeekSettings() { + return defaultWeekSettings; + } + + /** + * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and + * how many days are required in the first week of a year. + * Does not affect existing instances. + * + * @param {WeekSettings|null} weekSettings + */ + static set defaultWeekSettings(weekSettings) { + defaultWeekSettings = validateWeekSettings(weekSettings); + } + + /** + * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + */ + static get twoDigitCutoffYear() { + return twoDigitCutoffYear; + } + + /** + * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx. + * @type {number} + * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century + * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century + * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950 + * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50 + * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50 + */ + static set twoDigitCutoffYear(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + static get throwOnInvalid() { + return throwOnInvalid; + } + + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + static set throwOnInvalid(t) { + throwOnInvalid = t; + } + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + static resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + DateTime.resetCache(); + resetDigitRegexCache(); + } +} + +class Invalid { + constructor(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + toMessage() { + if (this.explanation) { + return `${this.reason}: ${this.explanation}`; + } else { + return this.reason; + } + } +} + +const nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; +function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`); +} +function dayOfWeek(year, month, day) { + const d = new Date(Date.UTC(year, month - 1, day)); + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + const js = d.getUTCDay(); + return js === 0 ? 7 : js; +} +function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; +} +function uncomputeOrdinal(year, ordinal) { + const table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(i => i < ordinal), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day + }; +} +function isoWeekdayToLocal(isoWeekday, startOfWeek) { + return (isoWeekday - startOfWeek + 7) % 7 + 1; +} + +/** + * @private + */ + +function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) { + const { + year, + month, + day + } = gregObj, + ordinal = computeOrdinal(year, month, day), + weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek); + let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7), + weekYear; + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek); + } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + return { + weekYear, + weekNumber, + weekday, + ...timeObject(gregObj) + }; +} +function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) { + const { + weekYear, + weekNumber, + weekday + } = weekData, + weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek), + yearInDays = daysInYear(weekYear); + let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek, + year; + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + const { + month, + day + } = uncomputeOrdinal(year, ordinal); + return { + year, + month, + day, + ...timeObject(weekData) + }; +} +function gregorianToOrdinal(gregData) { + const { + year, + month, + day + } = gregData; + const ordinal = computeOrdinal(year, month, day); + return { + year, + ordinal, + ...timeObject(gregData) + }; +} +function ordinalToGregorian(ordinalData) { + const { + year, + ordinal + } = ordinalData; + const { + month, + day + } = uncomputeOrdinal(year, ordinal); + return { + year, + month, + day, + ...timeObject(ordinalData) + }; +} + +/** + * Check if local week units like localWeekday are used in obj. + * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties. + * Modifies obj in-place! + * @param obj the object values + */ +function usesLocalWeekValues(obj, loc) { + const hasLocaleWeekData = !isUndefined(obj.localWeekday) || !isUndefined(obj.localWeekNumber) || !isUndefined(obj.localWeekYear); + if (hasLocaleWeekData) { + const hasIsoWeekData = !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear); + if (hasIsoWeekData) { + throw new ConflictingSpecificationError("Cannot mix locale-based week fields with ISO-based week fields"); + } + if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday; + if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber; + if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear; + delete obj.localWeekday; + delete obj.localWeekNumber; + delete obj.localWeekYear; + return { + minDaysInFirstWeek: loc.getMinDaysInFirstWeek(), + startOfWeek: loc.getStartOfWeek() + }; + } else { + return { + minDaysInFirstWeek: 4, + startOfWeek: 1 + }; + } +} +function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) { + const validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)), + validWeekday = integerBetween(obj.weekday, 1, 7); + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.weekNumber); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; +} +function hasInvalidOrdinalData(obj) { + const validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; +} +function hasInvalidGregorianData(obj) { + const validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; +} +function hasInvalidTimeData(obj) { + const { + hour, + minute, + second, + millisecond + } = obj; + const validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; +} + +/* + This is just a junk drawer, containing anything used across multiple classes. + Because Luxon is small(ish), this should stay small and we won't worry about splitting + it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area. +*/ + +/** + * @private + */ + +// TYPES + +function isUndefined(o) { + return typeof o === "undefined"; +} +function isNumber(o) { + return typeof o === "number"; +} +function isInteger(o) { + return typeof o === "number" && o % 1 === 0; +} +function isString(o) { + return typeof o === "string"; +} +function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; +} + +// CAPABILITIES + +function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } +} +function hasLocaleWeekInfo() { + try { + return typeof Intl !== "undefined" && !!Intl.Locale && ("weekInfo" in Intl.Locale.prototype || "getWeekInfo" in Intl.Locale.prototype); + } catch (e) { + return false; + } +} + +// OBJECTS AND ARRAYS + +function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; +} +function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + return arr.reduce((best, next) => { + const pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; +} +function pick(obj, keys) { + return keys.reduce((a, k) => { + a[k] = obj[k]; + return a; + }, {}); +} +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} +function validateWeekSettings(settings) { + if (settings == null) { + return null; + } else if (typeof settings !== "object") { + throw new InvalidArgumentError("Week settings must be an object"); + } else { + if (!integerBetween(settings.firstDay, 1, 7) || !integerBetween(settings.minimalDays, 1, 7) || !Array.isArray(settings.weekend) || settings.weekend.some(v => !integerBetween(v, 1, 7))) { + throw new InvalidArgumentError("Invalid week settings"); + } + return { + firstDay: settings.firstDay, + minimalDays: settings.minimalDays, + weekend: Array.from(settings.weekend) + }; + } +} + +// NUMBERS AND STRINGS + +function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; +} + +// x % n but takes the sign of n instead of x +function floorMod(x, n) { + return x - n * Math.floor(x / n); +} +function padStart(input, n = 2) { + const isNeg = input < 0; + let padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + return padded; +} +function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } +} +function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } +} +function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + const f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } +} +function roundTo(number, digits, rounding = "round") { + const factor = 10 ** digits; + switch (rounding) { + case "expand": + return number > 0 ? Math.ceil(number * factor) / factor : Math.floor(number * factor) / factor; + case "trunc": + return Math.trunc(number * factor) / factor; + case "round": + return Math.round(number * factor) / factor; + case "floor": + return Math.floor(number * factor) / factor; + case "ceil": + return Math.ceil(number * factor) / factor; + default: + throw new RangeError(`Value rounding ${rounding} is out of range`); + } +} + +// DATE BASICS + +function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} +function daysInMonth(year, month) { + const modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } +} + +// convert a calendar object to a local timestamp (epoch, but with the offset baked in) +function objToLocalTS(obj) { + let d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); + + // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not + // so if obj.year is in 99, but obj.day makes it roll over into year 100, + // the calculations done by Date.UTC are using year 2000 - which is incorrect + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; +} + +// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js +function firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) { + const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek); + return -fwdlw + minDaysInFirstWeek - 1; +} +function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) { + const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek); + const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek); + return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7; +} +function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year; +} + +// PARSING + +function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) { + const date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + if (timeZone) { + intlOpts.timeZone = timeZone; + } + const modified = { + timeZoneName: offsetFormat, + ...intlOpts + }; + const parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(m => m.type.toLowerCase() === "timezonename"); + return parsed ? parsed.value : null; +} + +// signedOffset('-5', '30') -> -330 +function signedOffset(offHourStr, offMinuteStr) { + let offHour = parseInt(offHourStr, 10); + + // don't || this because we want to preserve -0 + if (Number.isNaN(offHour)) { + offHour = 0; + } + const offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; +} + +// COERCION + +function asNumber(value) { + const numericValue = Number(value); + if (typeof value === "boolean" || value === "" || !Number.isFinite(numericValue)) throw new InvalidArgumentError(`Invalid unit value ${value}`); + return numericValue; +} +function normalizeObject(obj, normalizer) { + const normalized = {}; + for (const u in obj) { + if (hasOwnProperty(obj, u)) { + const v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; +} + +/** + * Returns the offset's value as a string + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ +function formatOffset(offset, format) { + const hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + switch (format) { + case "short": + return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`; + case "narrow": + return `${sign}${hours}${minutes > 0 ? `:${minutes}` : ""}`; + case "techie": + return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`; + default: + throw new RangeError(`Value format ${format} is out of range for property format`); + } +} +function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); +} + +/** + * @private + */ + +const monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; +const monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; +const monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; +function months(length) { + switch (length) { + case "narrow": + return [...monthsNarrow]; + case "short": + return [...monthsShort]; + case "long": + return [...monthsLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } +} +const weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; +const weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; +const weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; +function weekdays(length) { + switch (length) { + case "narrow": + return [...weekdaysNarrow]; + case "short": + return [...weekdaysShort]; + case "long": + return [...weekdaysLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } +} +const meridiems = ["AM", "PM"]; +const erasLong = ["Before Christ", "Anno Domini"]; +const erasShort = ["BC", "AD"]; +const erasNarrow = ["B", "A"]; +function eras(length) { + switch (length) { + case "narrow": + return [...erasNarrow]; + case "short": + return [...erasShort]; + case "long": + return [...erasLong]; + default: + return null; + } +} +function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; +} +function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; +} +function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; +} +function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; +} +function formatRelativeTime(unit, count, numeric = "always", narrow = false) { + const units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + const lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + if (numeric === "auto" && lastable) { + const isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : `next ${units[unit][0]}`; + case -1: + return isDay ? "yesterday" : `last ${units[unit][0]}`; + case 0: + return isDay ? "today" : `this ${units[unit][0]}`; + } + } + + const isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`; +} + +function stringifyTokens(splits, tokenToString) { + let s = ""; + for (const token of splits) { + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + return s; +} +const macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS +}; + +/** + * @private + */ + +class Formatter { + static create(locale, opts = {}) { + return new Formatter(locale, opts); + } + static parseFormat(fmt) { + // white-space is always considered a literal in user-provided formats + // the " " token has a special meaning (see unitForToken) + + let current = null, + currentFull = "", + bracketed = false; + const splits = []; + for (let i = 0; i < fmt.length; i++) { + const c = fmt.charAt(i); + if (c === "'") { + // turn '' into a literal signal quote instead of just skipping the empty literal + if (currentFull.length > 0 || bracketed) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull === "" ? "'" : currentFull + }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: /^\s+$/.test(currentFull), + val: currentFull + }); + } + currentFull = c; + current = c; + } + } + if (currentFull.length > 0) { + splits.push({ + literal: bracketed || /^\s+$/.test(currentFull), + val: currentFull + }); + } + return splits; + } + static macroTokenToFormatOpts(token) { + return macroTokenToFormatOpts[token]; + } + constructor(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + const df = this.systemLoc.dtFormatter(dt, { + ...this.opts, + ...opts + }); + return df.format(); + } + dtFormatter(dt, opts = {}) { + return this.loc.dtFormatter(dt, { + ...this.opts, + ...opts + }); + } + formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + } + formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + } + formatInterval(interval, opts) { + const df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + } + resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + } + num(n, p = 0, signDisplay = undefined) { + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + const opts = { + ...this.opts + }; + if (p > 0) { + opts.padTo = p; + } + if (signDisplay) { + opts.signDisplay = signDisplay; + } + return this.loc.numberFormatter(opts).format(n); + } + formatDateTimeFromString(dt, fmt) { + const knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = (opts, extract) => this.loc.extract(dt, opts, extract), + formatOffset = opts => { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = () => knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hourCycle: "h12" + }, "dayperiod"), + month = (length, standalone) => knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"), + weekday = (length, standalone) => knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"), + maybeMacro = token => { + const formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = length => knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"), + tokenToString = token => { + // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols + switch (token) { + // ms + case "S": + return this.num(dt.millisecond); + case "u": + // falls through + case "SSS": + return this.num(dt.millisecond, 3); + // seconds + case "s": + return this.num(dt.second); + case "ss": + return this.num(dt.second, 2); + // fractional seconds + case "uu": + return this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return this.num(Math.floor(dt.millisecond / 100)); + // minutes + case "m": + return this.num(dt.minute); + case "mm": + return this.num(dt.minute, 2); + // hours + case "h": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return this.num(dt.hour); + case "HH": + return this.num(dt.hour, 2); + // offset + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: this.opts.allowZ + }); + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: this.opts.allowZ + }); + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: this.opts.allowZ + }); + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: this.loc.locale + }); + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: this.loc.locale + }); + // zone + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + case "a": + return meridiem(); + // dates + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : this.num(dt.day, 2); + // weekdays - standalone + case "c": + // like 1 + return this.num(dt.weekday); + case "ccc": + // like 'Tues' + return weekday("short", true); + case "cccc": + // like 'Tuesday' + return weekday("long", true); + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + case "E": + // like 1 + return this.num(dt.weekday); + case "EEE": + // like 'Tues' + return weekday("short", false); + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : this.num(dt.month); + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : this.num(dt.month, 2); + case "LLL": + // like Jan + return month("short", true); + case "LLLL": + // like January + return month("long", true); + case "LLLLL": + // like J + return month("narrow", true); + // months - format + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : this.num(dt.month); + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : this.num(dt.month, 2); + case "MMM": + // like Jan + return month("short", false); + case "MMMM": + // like January + return month("long", false); + case "MMMMM": + // like J + return month("narrow", false); + // years + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : this.num(dt.year); + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : this.num(dt.year, 4); + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : this.num(dt.year, 6); + // eras + case "G": + // like AD + return era("short"); + case "GG": + // like Anno Domini + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return this.num(dt.weekYear, 4); + case "W": + return this.num(dt.weekNumber); + case "WW": + return this.num(dt.weekNumber, 2); + case "n": + return this.num(dt.localWeekNumber); + case "nn": + return this.num(dt.localWeekNumber, 2); + case "ii": + return this.num(dt.localWeekYear.toString().slice(-2), 2); + case "iiii": + return this.num(dt.localWeekYear, 4); + case "o": + return this.num(dt.ordinal); + case "ooo": + return this.num(dt.ordinal, 3); + case "q": + // like 1 + return this.num(dt.quarter); + case "qq": + // like 01 + return this.num(dt.quarter, 2); + case "X": + return this.num(Math.floor(dt.ts / 1000)); + case "x": + return this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + } + formatDurationFromString(dur, fmt) { + const invertLargest = this.opts.signMode === "negativeLargestOnly" ? -1 : 1; + const tokenToField = token => { + switch (token[0]) { + case "S": + return "milliseconds"; + case "s": + return "seconds"; + case "m": + return "minutes"; + case "h": + return "hours"; + case "d": + return "days"; + case "w": + return "weeks"; + case "M": + return "months"; + case "y": + return "years"; + default: + return null; + } + }, + tokenToString = (lildur, info) => token => { + const mapped = tokenToField(token); + if (mapped) { + const inversionFactor = info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1; + let signDisplay; + if (this.opts.signMode === "negativeLargestOnly" && mapped !== info.largestUnit) { + signDisplay = "never"; + } else if (this.opts.signMode === "all") { + signDisplay = "always"; + } else { + // "auto" and "negative" are the same, but "auto" has better support + signDisplay = "auto"; + } + return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay); + } else { + return token; + } + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce((found, { + literal, + val + }) => literal ? found : found.concat(val), []), + collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t)), + durationInfo = { + isNegativeDuration: collapsed < 0, + // this relies on "collapsed" being based on "shiftTo", which builds up the object + // in order + largestUnit: Object.keys(collapsed.values)[0] + }; + return stringifyTokens(tokens, tokenToString(collapsed, durationInfo)); + } +} + +/* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + +const ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; +function combineRegexes(...regexes) { + const full = regexes.reduce((f, r) => f + r.source, ""); + return RegExp(`^${full}$`); +} +function combineExtractors(...extractors) { + return m => extractors.reduce(([mergedVals, mergedZone, cursor], ex) => { + const [val, zone, next] = ex(m, cursor); + return [{ + ...mergedVals, + ...val + }, zone || mergedZone, next]; + }, [{}, null, 1]).slice(0, 2); +} +function parse(s, ...patterns) { + if (s == null) { + return [null, null]; + } + for (const [regex, extractor] of patterns) { + const m = regex.exec(s); + if (m) { + return extractor(m); + } + } + return [null, null]; +} +function simpleParse(...keys) { + return (match, cursor) => { + const ret = {}; + let i; + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + return [ret, null, cursor + i]; + }; +} + +// ISO and SQL parsing +const offsetRegex = /(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/; +const isoExtendedZone = `(?:${offsetRegex.source}?(?:\\[(${ianaRegex.source})\\])?)?`; +const isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; +const isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`); +const isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`); +const isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; +const isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; +const isoOrdinalRegex = /(\d{4})-?(\d{3})/; +const extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); +const extractISOOrdinalData = simpleParse("year", "ordinal"); +const sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one +const sqlTimeRegex = RegExp(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`); +const sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`); +function int(match, pos, fallback) { + const m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); +} +function extractISOYmd(match, cursor) { + const item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; +} +function extractISOTime(match, cursor) { + const item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; +} +function extractISOOffset(match, cursor) { + const local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; +} +function extractIANAZone(match, cursor) { + const zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; +} + +// ISO time parsing + +const isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`); + +// ISO duration parsing + +const isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; +function extractISODuration(match) { + const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match; + const hasNegativePrefix = s[0] === "-"; + const negativeSeconds = secondStr && secondStr[0] === "-"; + const maybeNegate = (num, force = false) => num !== undefined && (force || num && hasNegativePrefix) ? -num : num; + return [{ + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + }]; +} + +// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York +// and not just that we're in -240 *right now*. But since I don't think these are used that often +// I'm just going to ignore that +const obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 +}; +function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + const result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + return result; +} + +// RFC 2822/5322 +const rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; +function extractRFC2822(match) { + const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr, obsOffset, milOffset, offHourStr, offMinuteStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + let offset; + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + return [result, new FixedOffsetZone(offset)]; +} +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); +} + +// http date + +const rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; +function extractRFC1123Or850(match) { + const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} +function extractASCII(match) { + const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} +const isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); +const isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); +const isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); +const isoTimeCombinedRegex = combineRegexes(isoTimeRegex); +const extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); +const extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone); +const extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone); +const extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + +/* + * @private + */ + +function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); +} +function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); +} +function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); +} +function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); +} +const extractISOTimeOnly = combineExtractors(extractISOTime); +function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); +} +const sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); +const sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); +const extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); +function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); +} + +const INVALID$2 = "Invalid Duration"; + +// unit conversion constants +const lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } + }, + casualMatrix = { + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + }, + ...lowOrderMatrix + }, + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = { + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + }, + ...lowOrderMatrix + }; + +// units ordered by size +const orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; +const reverseUnits = orderedUnits$1.slice(0).reverse(); + +// clone really means "create another instance just like this one, but with these changes" +function clone$1(dur, alts, clear = false) { + // deep merge for vals + const conf = { + values: clear ? alts.values : { + ...dur.values, + ...(alts.values || {}) + }, + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix + }; + return new Duration(conf); +} +function durationToMillis(matrix, vals) { + var _vals$milliseconds; + let sum = (_vals$milliseconds = vals.milliseconds) != null ? _vals$milliseconds : 0; + for (const unit of reverseUnits.slice(1)) { + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; +} + +// NB: mutates parameters +function normalizeValues(matrix, vals) { + // the logic below assumes the overall value of the duration is positive + // if this is not the case, factor is used to make it so + const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + orderedUnits$1.reduceRight((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const previousVal = vals[previous] * factor; + const conv = matrix[current][previous]; + + // if (previousVal < 0): + // lower order unit is negative (e.g. { years: 2, days: -2 }) + // normalize this by reducing the higher order unit by the appropriate amount + // and increasing the lower order unit + // this can never make the higher order unit negative, because this function only operates + // on positive durations, so the amount of time represented by the lower order unit cannot + // be larger than the higher order unit + // else: + // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 }) + // in this case we attempt to convert as much as possible from the lower order unit into + // the higher order one + // + // Math.floor takes care of both of these cases, rounding away from 0 + // if previousVal < 0 it makes the absolute value larger + // if previousVal >= it makes the absolute value smaller + const rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + + // try to convert any decimals into smaller units if possible + // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 } + orderedUnits$1.reduce((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); +} + +// Remove all properties with a value of 0 from an object +function removeZeroes(vals) { + const newVals = {}; + for (const [key, value] of Object.entries(vals)) { + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; +} + +/** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ +class Duration { + /** + * @private + */ + constructor(config) { + const accurate = config.conversionAccuracy === "longterm" || false; + let matrix = accurate ? accurateMatrix : casualMatrix; + if (config.matrix) { + matrix = config.matrix; + } + + /** + * @access private + */ + this.values = config.values; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.matrix = matrix; + /** + * @access private + */ + this.isLuxonDuration = true; + } + + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + static fromMillis(count, opts) { + return Duration.fromObject({ + milliseconds: count + }, opts); + } + + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the custom conversion system to use + * @return {Duration} + */ + static fromObject(obj, opts = {}) { + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError(`Duration.fromObject: argument expected to be an object, got ${obj === null ? "null" : typeof obj}`); + } + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix + }); + } + + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */ + static fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError(`Unknown duration argument ${durationLike} of type ${typeof durationLike}`); + } + } + + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the preset conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + static fromISO(text, opts) { + const [parsed] = parseISODuration(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */ + static fromISOTime(text, opts) { + const [parsed] = parseISOTimeOnly(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid + }); + } + } + + /** + * @private + */ + static normalizeUnit(unit) { + const normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isDuration(o) { + return o && o.isLuxonDuration || false; + } + + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + get locale() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * Tokens can be escaped by wrapping with single quotes. + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat("d s", { signMode: "all" }) //=> "+6 +2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "all" }) //=> "-6 -2" + * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat("d s", { signMode: "negativeLargestOnly" }) //=> "-6 2" + * @return {string} + */ + toFormat(fmt, opts = {}) { + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + const fmtOpts = { + ...opts, + floor: opts.round !== false && opts.floor !== false + }; + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options + * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`. + * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor. + * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero + * @example + * ```js + * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 mth, 0 wks, 5 hr, 6 min' + * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes' + * ``` + */ + toHuman(opts = {}) { + if (!this.isValid) return INVALID$2; + const showZeros = opts.showZeros !== false; + const l = orderedUnits$1.map(unit => { + const val = this.values[unit]; + if (isUndefined(val) || val === 0 && !showZeros) { + return null; + } + return this.loc.numberFormatter({ + style: "unit", + unitDisplay: "long", + ...opts, + unit: unit.slice(0, -1) + }).format(val); + }).filter(n => n); + return this.loc.listFormatter({ + type: "conjunction", + style: opts.listStyle || "narrow", + ...opts + }).format(l); + } + + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + toObject() { + if (!this.isValid) return {}; + return { + ...this.values + }; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + let s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */ + toISOTime(opts = {}) { + if (!this.isValid) return null; + const millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + opts = { + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended", + ...opts, + includeOffset: false + }; + const dateTime = DateTime.fromMillis(millis, { + zone: "UTC" + }); + return dateTime.toISOTime(opts); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + toJSON() { + return this.toISO(); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + toString() { + return this.toISO(); + } + + /** + * Returns a string representation of this Duration appropriate for the REPL. + * @return {string} + */ + [Symbol.for("nodejs.util.inspect.custom")]() { + if (this.isValid) { + return `Duration { values: ${JSON.stringify(this.values)} }`; + } else { + return `Duration { Invalid, reason: ${this.invalidReason} }`; + } + } + + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + toMillis() { + if (!this.isValid) return NaN; + return durationToMillis(this.matrix, this.values); + } + + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */ + valueOf() { + return this.toMillis(); + } + + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + plus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration), + result = {}; + for (const k of orderedUnits$1) { + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + minus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + mapUnits(fn) { + if (!this.isValid) return this; + const result = {}; + for (const k of Object.keys(this.values)) { + result[k] = asNumber(fn(this.values[k], k)); + } + return clone$1(this, { + values: result + }, true); + } + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */ + get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + set(values) { + if (!this.isValid) return this; + const mixed = { + ...this.values, + ...normalizeObject(values, Duration.normalizeUnit) + }; + return clone$1(this, { + values: mixed + }); + } + + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + reconfigure({ + locale, + numberingSystem, + conversionAccuracy, + matrix + } = {}) { + const loc = this.loc.clone({ + locale, + numberingSystem + }); + const opts = { + loc, + matrix, + conversionAccuracy + }; + return clone$1(this, opts); + } + + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + + /** + * Reduce this Duration to its canonical representation in its current units. + * Assuming the overall value of the Duration is positive, this means: + * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example) + * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise + * the overall value would be negative, see third example) + * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example) + * + * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 } + * @return {Duration} + */ + normalize() { + if (!this.isValid) return this; + const vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Rescale units to its largest representation + * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 } + * @return {Duration} + */ + rescale() { + if (!this.isValid) return this; + const vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + shiftTo(...units) { + if (!this.isValid) return this; + if (units.length === 0) { + return this; + } + units = units.map(u => Duration.normalizeUnit(u)); + const built = {}, + accumulated = {}, + vals = this.toObject(); + let lastUnit; + for (const k of orderedUnits$1) { + if (units.indexOf(k) >= 0) { + lastUnit = k; + let own = 0; + + // anything we haven't boiled down yet should get boiled to this unit + for (const ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + + // plus anything that's already in this unit + if (isNumber(vals[k])) { + own += vals[k]; + } + + // only keep the integer part for now in the hopes of putting any decimal part + // into a smaller unit later + const i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; + + // otherwise, keep it in the wings to boil it later + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + + // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + for (const key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + normalizeValues(this.matrix, built); + return clone$1(this, { + values: built + }, true); + } + + /** + * Shift this Duration to all available units. + * Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds") + * @return {Duration} + */ + shiftToAll() { + if (!this.isValid) return this; + return this.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"); + } + + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + negate() { + if (!this.isValid) return this; + const negated = {}; + for (const k of Object.keys(this.values)) { + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { + values: negated + }, true); + } + + /** + * Removes all units with values equal to 0 from this Duration. + * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 } + * @return {Duration} + */ + removeZeros() { + if (!this.isValid) return this; + const vals = removeZeroes(this.values); + return clone$1(this, { + values: vals + }, true); + } + + /** + * Get the years. + * @type {number} + */ + get years() { + return this.isValid ? this.values.years || 0 : NaN; + } + + /** + * Get the quarters. + * @type {number} + */ + get quarters() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + + /** + * Get the months. + * @type {number} + */ + get months() { + return this.isValid ? this.values.months || 0 : NaN; + } + + /** + * Get the weeks + * @type {number} + */ + get weeks() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + + /** + * Get the days. + * @type {number} + */ + get days() { + return this.isValid ? this.values.days || 0 : NaN; + } + + /** + * Get the hours. + * @type {number} + */ + get hours() { + return this.isValid ? this.values.hours || 0 : NaN; + } + + /** + * Get the minutes. + * @type {number} + */ + get minutes() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + + /** + * Get the seconds. + * @return {number} + */ + get seconds() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + + /** + * Get the milliseconds. + * @return {number} + */ + get milliseconds() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + get isValid() { + return this.invalid === null; + } + + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + if (!this.loc.equals(other.loc)) { + return false; + } + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + for (const u of orderedUnits$1) { + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + } +} + +const INVALID$1 = "Invalid Interval"; + +// checks if the start is equal to or before the end +function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`); + } else { + return null; + } +} + +/** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ +class Interval { + /** + * @private + */ + constructor(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + this.e = config.end; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.isLuxonInterval = true; + } + + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid + }); + } + } + + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + static fromDateTimes(start, end) { + const builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + const validateError = validateStartEnd(builtStart, builtEnd); + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + static after(start, duration) { + const dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + static before(end, duration) { + const dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + static fromISO(text, opts) { + const [s, e] = (text || "").split("/", 2); + if (s && e) { + let start, startIsValid; + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + let end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + if (startIsValid) { + const dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + const dur = Duration.fromISO(s, opts); + if (dur.isValid) { + return Interval.before(end, dur); + } + } + } + return Interval.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isInterval(o) { + return o && o.isLuxonInterval || false; + } + + /** + * Returns the start of the Interval + * @type {DateTime} + */ + get start() { + return this.isValid ? this.s : null; + } + + /** + * Returns the end of the Interval. This is the first instant which is not part of the interval + * (Interval is half-open). + * @type {DateTime} + */ + get end() { + return this.isValid ? this.e : null; + } + + /** + * Returns the last DateTime included in the interval (since end is not part of the interval) + * @type {DateTime} + */ + get lastDateTime() { + return this.isValid ? this.e ? this.e.minus(1) : null : null; + } + + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + get isValid() { + return this.invalidReason === null; + } + + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + length(unit = "milliseconds") { + return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN; + } + + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime + * @return {number} + */ + count(unit = "milliseconds", opts) { + if (!this.isValid) return NaN; + const start = this.start.startOf(unit, opts); + let end; + if (opts != null && opts.useLocaleWeeks) { + end = this.end.reconfigure({ + locale: start.locale + }); + } else { + end = this.end; + } + end = end.startOf(unit, opts); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + set({ + start, + end + } = {}) { + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */ + splitAt(...dateTimes) { + if (!this.isValid) return []; + const sorted = dateTimes.map(friendlyDateTime).filter(d => this.contains(d)).sort((a, b) => a.toMillis() - b.toMillis()), + results = []; + let { + s + } = this, + i = 0; + while (s < this.e) { + const added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + return results; + } + + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */ + splitBy(duration) { + const dur = Duration.fromDurationLike(duration); + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + let { + s + } = this, + idx = 1, + next; + const results = []; + while (s < this.e) { + const added = this.start.plus(dur.mapUnits(x => x * idx)); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + return results; + } + + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */ + divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + overlaps(other) { + return this.e > other.s && this.s < other.e; + } + + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + + /** + * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise. + * @param {Interval} other + * @return {boolean} + */ + engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + return this.s.equals(other.s) && this.e.equals(other.e); + } + + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + intersection(other) { + if (!this.isValid) return this; + const s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + union(other) { + if (!this.isValid) return this; + const s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + + /** + * Merge an array of Intervals into an equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval + * and ending with the latest. + * + * @param {Array} intervals + * @return {Array} + */ + static merge(intervals) { + const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(([sofar, current], item) => { + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]); + if (final) { + found.push(final); + } + return found; + } + + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */ + static xor(intervals) { + let start = null, + currentCount = 0; + const results = [], + ends = intervals.map(i => [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]), + flattened = Array.prototype.concat(...ends), + arr = flattened.sort((a, b) => a.time - b.time); + for (const i of arr) { + currentCount += i.type === "s" ? 1 : -1; + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + start = null; + } + } + return Interval.merge(results); + } + + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */ + difference(...intervals) { + return Interval.xor([this].concat(intervals)).map(i => this.intersection(i)).filter(i => i && !i.isEmpty()); + } + + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + toString() { + if (!this.isValid) return INVALID$1; + return `[${this.s.toISO()} – ${this.e.toISO()})`; + } + + /** + * Returns a string representation of this Interval appropriate for the REPL. + * @return {string} + */ + [Symbol.for("nodejs.util.inspect.custom")]() { + if (this.isValid) { + return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`; + } else { + return `Interval { Invalid, reason: ${this.invalidReason} }`; + } + } + + /** + * Returns a localized string representing this Interval. Accepts the same options as the + * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as + * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method + * is browser-specific, but in general it will return an appropriate representation of the + * Interval in the assigned locale. Defaults to the system's locale if no locale has been + * specified. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or + * Intl.DateTimeFormat constructor options. + * @param {Object} opts - Options to override the configuration of the start DateTime. + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022 + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p + * @return {string} + */ + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1; + } + + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + toISO(opts) { + if (!this.isValid) return INVALID$1; + return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`; + } + + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + toISODate() { + if (!this.isValid) return INVALID$1; + return `${this.s.toISODate()}/${this.e.toISODate()}`; + } + + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`; + } + + /** + * Returns a string representation of this Interval formatted according to the specified format + * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible + * formatting tool. + * @param {string} dateFormat - The format string. This string formats the start and end time. + * See {@link DateTime#toFormat} for details. + * @param {Object} opts - Options. + * @param {string} [opts.separator = ' – '] - A separator to place between the start and end + * representations. + * @return {string} + */ + toFormat(dateFormat, { + separator = " – " + } = {}) { + if (!this.isValid) return INVALID$1; + return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`; + } + + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + } +} + +/** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ +class Info { + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + static hasDST(zone = Settings.defaultZone) { + const proto = DateTime.now().setZone(zone).set({ + month: 12 + }); + return !zone.isUniversal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + static isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + static normalizeZone(input) { + return normalizeZone(input, Settings.defaultZone); + } + + /** + * Get the weekday on which the week starts according to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} the start of the week, 1 for Monday through 7 for Sunday + */ + static getStartOfWeek({ + locale = null, + locObj = null + } = {}) { + return (locObj || Locale.create(locale)).getStartOfWeek(); + } + + /** + * Get the minimum number of days necessary in a week before it is considered part of the next year according + * to the given locale. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number} + */ + static getMinimumDaysInFirstWeek({ + locale = null, + locObj = null + } = {}) { + return (locObj || Locale.create(locale)).getMinDaysInFirstWeek(); + } + + /** + * Get the weekdays, which are considered the weekend according to the given locale + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.locObj=null] - an existing locale object to use + * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday + */ + static getWeekendWeekdays({ + locale = null, + locObj = null + } = {}) { + // copy the array, because we cache it internally + return (locObj || Locale.create(locale)).getWeekendDays().slice(); + } + + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */ + static months(length = "long", { + locale = null, + numberingSystem = null, + locObj = null, + outputCalendar = "gregory" + } = {}) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */ + static monthsFormat(length = "long", { + locale = null, + numberingSystem = null, + locObj = null, + outputCalendar = "gregory" + } = {}) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */ + static weekdays(length = "long", { + locale = null, + numberingSystem = null, + locObj = null + } = {}) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */ + static weekdaysFormat(length = "long", { + locale = null, + numberingSystem = null, + locObj = null + } = {}) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */ + static meridiems({ + locale = null + } = {}) { + return Locale.create(locale).meridiems(); + } + + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */ + static eras(length = "short", { + locale = null + } = {}) { + return Locale.create(locale, null, "gregory").eras(length); + } + + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale + * @example Info.features() //=> { relative: false, localeWeek: true } + * @return {Object} + */ + static features() { + return { + relative: hasRelative(), + localeWeek: hasLocaleWeekInfo() + }; + } +} + +function dayDiff(earlier, later) { + const utcDayStart = dt => dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(), + ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); +} +function highOrderDiffs(cursor, later, units) { + const differs = [["years", (a, b) => b.year - a.year], ["quarters", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4], ["months", (a, b) => b.month - a.month + (b.year - a.year) * 12], ["weeks", (a, b) => { + const days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + const results = {}; + const earlier = cursor; + let lowestOrder, highWater; + + /* This loop tries to diff using larger units first. + If we overshoot, we backtrack and try the next smaller unit. + "cursor" starts out at the earlier timestamp and moves closer and closer to "later" + as we use smaller and smaller units. + highWater keeps track of where we would be if we added one more of the smallest unit, + this is used later to potentially convert any difference smaller than the smallest higher order unit + into a fraction of that smallest higher order unit + */ + for (const [unit, differ] of differs) { + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + if (highWater > later) { + // we overshot the end point, backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + + // if we are still overshooting now, we need to backtrack again + // this happens in certain situations when diffing times in different zones, + // because this calculation ignores time zones + if (cursor > later) { + // keep the "overshot by 1" around as highWater + highWater = cursor; + // backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + return [cursor, results, highWater, lowestOrder]; +} +function diff (earlier, later, units, opts) { + let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units); + const remainingMillis = later - cursor; + const lowerOrderUnits = units.filter(u => ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0); + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + highWater = cursor.plus({ + [lowestOrder]: 1 + }); + } + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + const duration = Duration.fromObject(results, opts); + if (lowerOrderUnits.length > 0) { + return Duration.fromMillis(remainingMillis, opts).shiftTo(...lowerOrderUnits).plus(duration); + } else { + return duration; + } +} + +const MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; +function intUnit(regex, post = i => i) { + return { + regex, + deser: ([s]) => post(parseDigits(s)) + }; +} +const NBSP = String.fromCharCode(160); +const spaceOrNBSP = `[ ${NBSP}]`; +const spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); +function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); +} +function stripInsensitivities(s) { + return s.replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); +} +function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: ([s]) => strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex + }; + } +} +function offset(regex, groups) { + return { + regex, + deser: ([, h, m]) => signedOffset(h, m), + groups + }; +} +function simple(regex) { + return { + regex, + deser: ([s]) => s + }; +} +function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); +} + +/** + * @param token + * @param {Locale} loc + */ +function unitForToken(token, loc) { + const one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = t => ({ + regex: RegExp(escapeToken(t.val)), + deser: ([s]) => s, + literal: true + }), + unitate = t => { + if (token.literal) { + return literal(t); + } + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + // years + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + // months + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + // dates + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + // ordinals + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + // time + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + // meridiem + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + // weekdays + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + // offset/zone + case "Z": + case "ZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2); + case "ZZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + // this special-case "token" represents a place where a macro-token expanded into a white-space literal + // in this case we accept any non-newline white-space + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + const unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; +} +const partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh" + }, + hour24: { + numeric: "H", + "2-digit": "HH" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ" + } +}; +function tokenForPart(part, formatOpts, resolvedOpts) { + const { + type, + value + } = part; + if (type === "literal") { + const isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value + }; + } + const style = formatOpts[type]; + + // The user might have explicitly specified hour12 or hourCycle + // if so, respect their decision + // if not, refer back to the resolvedOpts, which are based on the locale + let actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + // tokens only differentiate between 24 hours or not, + // so we do not need to check hourCycle here, which is less supported anyways + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + let val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + if (val) { + return { + literal: false, + val + }; + } + return undefined; +} +function buildRegex(units) { + const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, ""); + return [`^${re}$`, units]; +} +function match(input, regex, handlers) { + const matches = input.match(regex); + if (matches) { + const all = {}; + let matchIndex = 1; + for (const i in handlers) { + if (hasOwnProperty(handlers, i)) { + const h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } +} +function dateTimeFromMatches(matches) { + const toField = token => { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + let zone = null; + let specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + const vals = Object.keys(matches).reduce((r, k) => { + const f = toField(k); + if (f) { + r[f] = matches[k]; + } + return r; + }, {}); + return [vals, zone, specificOffset]; +} +let dummyDateTimeCache = null; +function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + return dummyDateTimeCache; +} +function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + const formatOpts = Formatter.macroTokenToFormatOpts(token.val); + const tokens = formatOptsToTokens(formatOpts, locale); + if (tokens == null || tokens.includes(undefined)) { + return token; + } + return tokens; +} +function expandMacroTokens(tokens, locale) { + return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale))); +} + +/** + * @private + */ + +class TokenParser { + constructor(locale, format) { + this.locale = locale; + this.format = format; + this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale); + this.units = this.tokens.map(t => unitForToken(t, locale)); + this.disqualifyingUnit = this.units.find(t => t.invalidReason); + if (!this.disqualifyingUnit) { + const [regexString, handlers] = buildRegex(this.units); + this.regex = RegExp(regexString, "i"); + this.handlers = handlers; + } + } + explainFromTokens(input) { + if (!this.isValid) { + return { + input, + tokens: this.tokens, + invalidReason: this.invalidReason + }; + } else { + const [rawMatches, matches] = match(input, this.regex, this.handlers), + [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, undefined]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + return { + input, + tokens: this.tokens, + regex: this.regex, + rawMatches, + matches, + result, + zone, + specificOffset + }; + } + } + get isValid() { + return !this.disqualifyingUnit; + } + get invalidReason() { + return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null; + } +} +function explainFromTokens(locale, input, format) { + const parser = new TokenParser(locale, format); + return parser.explainFromTokens(input); +} +function parseFromTokens(locale, input, format) { + const { + result, + zone, + specificOffset, + invalidReason + } = explainFromTokens(locale, input, format); + return [result, zone, specificOffset, invalidReason]; +} +function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + const formatter = Formatter.create(locale, formatOpts); + const df = formatter.dtFormatter(getDummyDateTime()); + const parts = df.formatToParts(); + const resolvedOpts = df.resolvedOptions(); + return parts.map(p => tokenForPart(p, formatOpts, resolvedOpts)); +} + +const INVALID = "Invalid DateTime"; +const MAX_DATE = 8.64e15; +function unsupportedZone(zone) { + return new Invalid("unsupported zone", `the zone "${zone.name}" is not supported`); +} + +// we cache week data on the DT object and this intermediates the cache +/** + * @param {DateTime} dt + */ +function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; +} + +/** + * @param {DateTime} dt + */ +function possiblyCachedLocalWeekData(dt) { + if (dt.localWeekData === null) { + dt.localWeekData = gregorianToWeek(dt.c, dt.loc.getMinDaysInFirstWeek(), dt.loc.getStartOfWeek()); + } + return dt.localWeekData; +} + +// clone really means, "make a new object with these modifications". all "setters" really use this +// to create a new object while only changing some of the properties +function clone(inst, alts) { + const current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime({ + ...current, + ...alts, + old: current + }); +} + +// find the right offset a given local time. The o input is our guess, which determines which +// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) +function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + let utcGuess = localTS - o * 60 * 1000; + + // Test whether the zone matches the offset for this ts + const o2 = tz.offset(utcGuess); + + // If so, offset didn't change and we're done + if (o === o2) { + return [utcGuess, o]; + } + + // If not, change the ts by the difference in the offset + utcGuess -= (o2 - o) * 60 * 1000; + + // If that gives us the local time we want, we're done + const o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + + // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; +} + +// convert an epoch timestamp into a calendar object with the given offset +function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + const d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; +} + +// convert a calendar object to a epoch timestamp +function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); +} + +// create a new DT instance by adding a duration, adjusting for DSTs +function adjustTime(inst, dur) { + const oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = { + ...inst.c, + year, + month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }, + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + let [ts, o] = fixOffset(localTS, oPre, inst.zone); + if (millisToAdd !== 0) { + ts += millisToAdd; + // that could have changed the offset by going over a DST, but we want to keep the ts the same + o = inst.zone.offset(ts); + } + return { + ts, + o + }; +} + +// helper useful in turning the results of parsing into real dates +// by handling the zone options +function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + const { + setZone, + zone + } = opts; + if (parsed && Object.keys(parsed).length !== 0 || parsedZone) { + const interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, { + ...opts, + zone: interpretationZone, + specificOffset + }); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", `the input "${text}" can't be parsed as ${format}`)); + } +} + +// if you want to output a technical format (e.g. RFC 2822), this helper +// helps handle the details +function toTechFormat(dt, format, allowZ = true) { + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; +} +function toISODate(o, extended, precision) { + const longFormat = o.c.year > 9999 || o.c.year < 0; + let c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + if (precision === "year") return c; + if (extended) { + c += "-"; + c += padStart(o.c.month); + if (precision === "month") return c; + c += "-"; + } else { + c += padStart(o.c.month); + if (precision === "month") return c; + } + c += padStart(o.c.day); + return c; +} +function toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision) { + let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0, + c = ""; + switch (precision) { + case "day": + case "month": + case "year": + break; + default: + c += padStart(o.c.hour); + if (precision === "hour") break; + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += ":"; + c += padStart(o.c.second); + } + } else { + c += padStart(o.c.minute); + if (precision === "minute") break; + if (showSeconds) { + c += padStart(o.c.second); + } + } + if (precision === "second") break; + if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; +} + +// defaults for unspecified units in the supported calendars +const defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + +// Units in the supported calendars, sorted by bigness +const orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + +// standardize case and plurality in units +function normalizeUnit(unit) { + const normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; +} +function normalizeUnitWithLocalWeeks(unit) { + switch (unit.toLowerCase()) { + case "localweekday": + case "localweekdays": + return "localWeekday"; + case "localweeknumber": + case "localweeknumbers": + return "localWeekNumber"; + case "localweekyear": + case "localweekyears": + return "localWeekYear"; + default: + return normalizeUnit(unit); + } +} + +// cache offsets for zones based on the current timestamp when this function is +// first called. When we are handling a datetime from components like (year, +// month, day, hour) in a time zone, we need a guess about what the timezone +// offset is so that we can convert into a UTC timestamp. One way is to find the +// offset of now in the zone. The actual date may have a different offset (for +// example, if we handle a date in June while we're in December in a zone that +// observes DST), but we can check and adjust that. +// +// When handling many dates, calculating the offset for now every time is +// expensive. It's just a guess, so we can cache the offset to use even if we +// are right on a time change boundary (we'll just correct in the other +// direction). Using a timestamp from first read is a slight optimization for +// handling dates close to the current date, since those dates will usually be +// in the same offset (we could set the timestamp statically, instead). We use a +// single timestamp for all zones to make things a bit more predictable. +// +// This is safe for quickDT (used by local() and utc()) because we don't fill in +// higher-order units from tsNow (as we do in fromObject, this requires that +// offset is calculated from tsNow). +/** + * @param {Zone} zone + * @return {number} + */ +function guessOffsetForZone(zone) { + if (zoneOffsetTs === undefined) { + zoneOffsetTs = Settings.now(); + } + + // Do not cache anything but IANA zones, because it is not safe to do so. + // Guessing an offset which is not present in the zone can cause wrong results from fixOffset + if (zone.type !== "iana") { + return zone.offset(zoneOffsetTs); + } + const zoneName = zone.name; + let offsetGuess = zoneOffsetGuessCache.get(zoneName); + if (offsetGuess === undefined) { + offsetGuess = zone.offset(zoneOffsetTs); + zoneOffsetGuessCache.set(zoneName, offsetGuess); + } + return offsetGuess; +} + +// this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. +function quickDT(obj, opts) { + const zone = normalizeZone(opts.zone, Settings.defaultZone); + if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } + const loc = Locale.fromObject(opts); + let ts, o; + + // assume we have the higher-order units + if (!isUndefined(obj.year)) { + for (const u of orderedUnits) { + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + const offsetProvis = guessOffsetForZone(zone); + [ts, o] = objToTS(obj, offsetProvis, zone); + } else { + ts = Settings.now(); + } + return new DateTime({ + ts, + zone, + loc, + o + }); +} +function diffRelative(start, end, opts) { + const round = isUndefined(opts.round) ? true : opts.round, + rounding = isUndefined(opts.rounding) ? "trunc" : opts.rounding, + format = (c, unit) => { + c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? "round" : rounding); + const formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = unit => { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + for (const unit of opts.units) { + const count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); +} +function lastOpts(argList) { + let opts = {}, + args; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + return [opts, args]; +} + +/** + * Timestamp to use for cached zone offset guesses (exposed for test) + */ +let zoneOffsetTs; +/** + * Cache for zone offset guesses (exposed for test). + * + * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of + * zone.offset(). + */ +const zoneOffsetGuessCache = new Map(); + +/** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ +class DateTime { + /** + * @access private + */ + constructor(config) { + const zone = config.zone || Settings.defaultZone; + let invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + let c = null, + o = null; + if (!invalid) { + const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + if (unchanged) { + [c, o] = [config.old.c, config.old.o]; + } else { + // If an offset has been passed and we have not been called from + // clone(), we can trust it and avoid the offset calculation. + const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + + /** + * @access private + */ + this._zone = zone; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.invalid = invalid; + /** + * @access private + */ + this.weekData = null; + /** + * @access private + */ + this.localWeekData = null; + /** + * @access private + */ + this.c = c; + /** + * @access private + */ + this.o = o; + /** + * @access private + */ + this.isLuxonDateTime = true; + } + + // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + static now() { + return new DateTime({}); + } + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + static local() { + const [opts, args] = lastOpts(arguments), + [year, month, day, hour, minute, second, millisecond] = args; + return quickDT({ + year, + month, + day, + hour, + minute, + second, + millisecond + }, opts); + } + + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */ + static utc() { + const [opts, args] = lastOpts(arguments), + [year, month, day, hour, minute, second, millisecond] = args; + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ + year, + month, + day, + hour, + minute, + second, + millisecond + }, opts); + } + + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + static fromJSDate(date, options = {}) { + const ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + const zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromMillis(milliseconds, options = {}) { + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError(`fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromSeconds(seconds, options = {}) { + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.localWeekYear - a week year, according to the locale + * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale + * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system\'s locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: "en-US" }).toISODate() //=> '2021-12-26' + * @return {DateTime} + */ + static fromObject(obj, opts = {}) { + obj = obj || {}; + const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + const loc = Locale.fromObject(opts); + const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks); + const { + minDaysInFirstWeek, + startOfWeek + } = usesLocalWeekValues(normalized, loc); + const tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + const useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; + + // configure ourselves to deal with gregorian dates or week stuff + let units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + + // set default values for missing stuff + let foundFirst = false; + for (const u of units) { + const v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + + // make sure the values we have are in range + const higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + if (invalid) { + return DateTime.invalid(invalid); + } + + // compute the actual time + const gregorian = useWeekData ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc + }); + + // gregorian data + weekday serves only to validate + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`); + } + if (!inst.isValid) { + return DateTime.invalid(inst.invalid); + } + return inst; + } + + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + static fromISO(text, opts = {}) { + const [vals, parsedZone] = parseISODate(text); + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + static fromRFC2822(text, opts = {}) { + const [vals, parsedZone] = parseRFC2822Date(text); + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + static fromHTTP(text, opts = {}) { + const [vals, parsedZone] = parseHTTPDate(text); + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromFormat(text, fmt, opts = {}) { + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + const { + locale = null, + numberingSystem = null + } = opts, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true + }), + [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt); + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset); + } + } + + /** + * @deprecated use fromFormat instead + */ + static fromString(text, fmt, opts = {}) { + return DateTime.fromFormat(text, fmt, opts); + } + + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + static fromSQL(text, opts = {}) { + const [vals, parsedZone] = parseSQL(text); + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent. + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid + }); + } + } + + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isDateTime(o) { + return o && o.isLuxonDateTime || false; + } + + /** + * Produce the format string for a set of options + * @param formatOpts + * @param localeOpts + * @returns {string} + */ + static parseFormatForOpts(formatOpts, localeOpts = {}) { + const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map(t => t ? t.val : null).join(""); + } + + /** + * Produce the the fully expanded format token for the locale + * Does NOT quote characters, so quoted tokens will not round trip correctly + * @param fmt + * @param localeOpts + * @returns {string} + */ + static expandFormat(fmt, localeOpts = {}) { + const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map(t => t.val).join(""); + } + static resetCache() { + zoneOffsetTs = undefined; + zoneOffsetGuessCache.clear(); + } + + // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + get(unit) { + return this[unit]; + } + + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + get isValid() { + return this.invalid === null; + } + + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + get locale() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + get outputCalendar() { + return this.isValid ? this.loc.outputCalendar : null; + } + + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + get zone() { + return this._zone; + } + + /** + * Get the name of the time zone. + * @type {string} + */ + get zoneName() { + return this.isValid ? this.zone.name : null; + } + + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + get year() { + return this.isValid ? this.c.year : NaN; + } + + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + get quarter() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + get month() { + return this.isValid ? this.c.month : NaN; + } + + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + get day() { + return this.isValid ? this.c.day : NaN; + } + + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + get hour() { + return this.isValid ? this.c.hour : NaN; + } + + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + get minute() { + return this.isValid ? this.c.minute : NaN; + } + + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + get second() { + return this.isValid ? this.c.second : NaN; + } + + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + get millisecond() { + return this.isValid ? this.c.millisecond : NaN; + } + + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + get weekYear() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + get weekNumber() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + get weekday() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + + /** + * Returns true if this date is on a weekend according to the locale, false otherwise + * @returns {boolean} + */ + get isWeekend() { + return this.isValid && this.loc.getWeekendDays().includes(this.weekday); + } + + /** + * Get the day of the week according to the locale. + * 1 is the first day of the week and 7 is the last day of the week. + * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1, + * @returns {number} + */ + get localWeekday() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN; + } + + /** + * Get the week number of the week year according to the locale. Different locales assign week numbers differently, + * because the week can start on different days of the week (see localWeekday) and because a different number of days + * is required for a week to count as the first week of a year. + * @returns {number} + */ + get localWeekNumber() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN; + } + + /** + * Get the week year according to the locale. Different locales assign week numbers (and therefor week years) + * differently, see localWeekNumber. + * @returns {number} + */ + get localWeekYear() { + return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN; + } + + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + get ordinal() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + get monthShort() { + return this.isValid ? Info.months("short", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + get monthLong() { + return this.isValid ? Info.months("long", { + locObj: this.loc + })[this.month - 1] : null; + } + + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + get weekdayShort() { + return this.isValid ? Info.weekdays("short", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + get weekdayLong() { + return this.isValid ? Info.weekdays("long", { + locObj: this.loc + })[this.weekday - 1] : null; + } + + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + get offset() { + return this.isValid ? +this.o : NaN; + } + + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + get offsetNameShort() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + get offsetNameLong() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + get isOffsetFixed() { + return this.isValid ? this.zone.isUniversal : null; + } + + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + get isInDST() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1, + day: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + + /** + * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC + * in this DateTime's zone. During DST changes local time can be ambiguous, for example + * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`. + * This method will return both possible DateTimes if this DateTime's local time is ambiguous. + * @returns {DateTime[]} + */ + getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + const dayMs = 86400000; + const minuteMs = 60000; + const localTS = objToLocalTS(this.c); + const oEarlier = this.zone.offset(localTS - dayMs); + const oLater = this.zone.offset(localTS + dayMs); + const o1 = this.zone.offset(localTS - oEarlier * minuteMs); + const o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + const ts1 = localTS - o1 * minuteMs; + const ts2 = localTS - o2 * minuteMs; + const c1 = tsToObj(ts1, o1); + const c2 = tsToObj(ts2, o2); + if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) { + return [clone(this, { + ts: ts1 + }), clone(this, { + ts: ts2 + })]; + } + return [this]; + } + + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + get isInLeapYear() { + return isLeapYear(this.year); + } + + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + get daysInMonth() { + return daysInMonth(this.year, this.month); + } + + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + get daysInYear() { + return this.isValid ? daysInYear(this.year) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + get weeksInWeekYear() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's local week year + * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52 + * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53 + * @type {number} + */ + get weeksInLocalWeekYear() { + return this.isValid ? weeksInWeekYear(this.localWeekYear, this.loc.getMinDaysInFirstWeek(), this.loc.getStartOfWeek()) : NaN; + } + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + resolvedLocaleOptions(opts = {}) { + const { + locale, + numberingSystem, + calendar + } = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this); + return { + locale, + numberingSystem, + outputCalendar: calendar + }; + } + + // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + toUTC(offset = 0, opts = {}) { + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + toLocal() { + return this.setZone(Settings.defaultZone); + } + + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + setZone(zone, { + keepLocalTime = false, + keepCalendarTime = false + } = {}) { + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + let newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + const offsetGuess = zone.offset(this.ts); + const asObj = this.toObject(); + [newTS] = objToTS(asObj, offsetGuess, zone); + } + return clone(this, { + ts: newTS, + zone + }); + } + } + + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + reconfigure({ + locale, + numberingSystem, + outputCalendar + } = {}) { + const loc = this.loc.clone({ + locale, + numberingSystem, + outputCalendar + }); + return clone(this, { + loc + }); + } + + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + setLocale(locale) { + return this.reconfigure({ + locale + }); + } + + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * + * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`. + * They cannot be mixed with ISO-week units like `weekday`. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + set(values) { + if (!this.isValid) return this; + const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks); + const { + minDaysInFirstWeek, + startOfWeek + } = usesLocalWeekValues(normalized, this.loc); + const settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + let mixed; + if (settingWeekStuff) { + mixed = weekToGregorian({ + ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), + ...normalized + }, minDaysInFirstWeek, startOfWeek); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian({ + ...gregorianToOrdinal(this.c), + ...normalized + }); + } else { + mixed = { + ...this.toObject(), + ...normalized + }; + + // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + const [ts, o] = objToTS(mixed, this.o, this.zone); + return clone(this, { + ts, + o + }); + } + + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + plus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + minus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + startOf(unit, { + useLocaleWeeks = false + } = {}) { + if (!this.isValid) return this; + const o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + case "quarters": + case "months": + o.day = 1; + // falls through + case "weeks": + case "days": + o.hour = 0; + // falls through + case "hours": + o.minute = 0; + // falls through + case "minutes": + o.second = 0; + // falls through + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + if (useLocaleWeeks) { + const startOfWeek = this.loc.getStartOfWeek(); + const { + weekday + } = this; + if (weekday < startOfWeek) { + o.weekNumber = this.weekNumber - 1; + } + o.weekday = startOfWeek; + } else { + o.weekday = 1; + } + } + if (normalizedUnit === "quarters") { + const q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + return this.set(o); + } + + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + endOf(unit, opts) { + return this.isValid ? this.plus({ + [unit]: 1 + }).startOf(unit, opts).minus(1) : this; + } + + // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + toFormat(fmt, opts = {}) { + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */ + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + toLocaleParts(opts = {}) { + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=false] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z' + * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z' + * @return {string|null} + */ + toISO({ + format = "extended", + suppressSeconds = false, + suppressMilliseconds = false, + includeOffset = true, + extendedZone = false, + precision = "milliseconds" + } = {}) { + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + const ext = format === "extended"; + let c = toISODate(this, ext, precision); + if (orderedUnits.indexOf(precision) >= 3) c += "T"; + c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + return c; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'. + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05' + * @return {string|null} + */ + toISODate({ + format = "extended", + precision = "day" + } = {}) { + if (!this.isValid) { + return null; + } + return toISODate(this, format === "extended", normalizeUnit(precision)); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0. + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z' + * @return {string} + */ + toISOTime({ + suppressMilliseconds = false, + suppressSeconds = false, + includeOffset = true, + includePrefix = false, + extendedZone = false, + format = "extended", + precision = "milliseconds" + } = {}) { + if (!this.isValid) { + return null; + } + precision = normalizeUnit(precision); + let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? "T" : ""; + return c + toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision); + } + + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string|null} + */ + toSQLDate() { + if (!this.isValid) { + return null; + } + return toISODate(this, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + toSQLTime({ + includeOffset = true, + includeZone = false, + includeOffsetSpace = true + } = {}) { + let fmt = "HH:mm:ss.SSS"; + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + return toTechFormat(this, fmt, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + toSQL(opts = {}) { + if (!this.isValid) { + return null; + } + return `${this.toSQLDate()} ${this.toSQLTime(opts)}`; + } + + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + toString() { + return this.isValid ? this.toISO() : INVALID; + } + + /** + * Returns a string representation of this DateTime appropriate for the REPL. + * @return {string} + */ + [Symbol.for("nodejs.util.inspect.custom")]() { + if (this.isValid) { + return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`; + } else { + return `DateTime { Invalid, reason: ${this.invalidReason} }`; + } + } + + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */ + valueOf() { + return this.toMillis(); + } + + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + toMillis() { + return this.isValid ? this.ts : NaN; + } + + /** + * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime. + * @return {number} + */ + toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */ + toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + toJSON() { + return this.toISO(); + } + + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + toBSON() { + return this.toJSDate(); + } + + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + toObject(opts = {}) { + if (!this.isValid) return {}; + const base = { + ...this.c + }; + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */ + toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + + // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + diff(otherDateTime, unit = "milliseconds", opts = {}) { + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + const durOpts = { + locale: this.locale, + numberingSystem: this.numberingSystem, + ...opts + }; + const units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = diff(earlier, later, units, durOpts); + return otherIsLater ? diffed.negate() : diffed; + } + + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + diffNow(unit = "milliseconds", opts = {}) { + return this.diff(DateTime.now(), unit, opts); + } + + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval|DateTime} + */ + until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @param {Object} opts - options + * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */ + hasSame(otherDateTime, unit, opts) { + if (!this.isValid) return false; + const inputMs = otherDateTime.valueOf(); + const adjustedToZone = this.setZone(otherDateTime.zone, { + keepLocalTime: true + }); + return adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts); + } + + /** + * Equality check + * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {string} [options.rounding="trunc"] - rounding method to use when rounding the numbers in the output. Can be "trunc" (toward zero), "expand" (away from zero), "round", "floor", or "ceil". + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + toRelative(options = {}) { + if (!this.isValid) return null; + const base = options.base || DateTime.fromObject({}, { + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + let units = ["years", "months", "days", "hours", "minutes", "seconds"]; + let unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + return diffRelative(base, this.plus(padding), { + ...options, + numeric: "always", + units, + unit + }); + } + + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + toRelativeCalendar(options = {}) { + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({}, { + zone: this.zone + }), this, { + ...options, + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + }); + } + + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + static min(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, i => i.valueOf(), Math.min); + } + + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + static max(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, i => i.valueOf(), Math.max); + } + + // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + static fromFormatExplain(text, fmt, options = {}) { + const { + locale = null, + numberingSystem = null + } = options, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + + /** + * @deprecated use fromFormatExplain instead + */ + static fromStringExplain(text, fmt, options = {}) { + return DateTime.fromFormatExplain(text, fmt, options); + } + + /** + * Build a parser for `fmt` using the given locale. This parser can be passed + * to {@link DateTime.fromFormatParser} to a parse a date in this format. This + * can be used to optimize cases where many dates need to be parsed in a + * specific format. + * + * @param {String} fmt - the format the string is expected to be in (see + * description) + * @param {Object} options - options used to set locale and numberingSystem + * for parser + * @returns {TokenParser} - opaque object to be used + */ + static buildFormatParser(fmt, options = {}) { + const { + locale = null, + numberingSystem = null + } = options, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true + }); + return new TokenParser(localeToUse, fmt); + } + + /** + * Create a DateTime from an input string and format parser. + * + * The format parser must have been created with the same locale as this call. + * + * @param {String} text - the string to parse + * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser} + * @param {Object} opts - options taken by fromFormat() + * @returns {DateTime} + */ + static fromFormatParser(text, formatParser, opts = {}) { + if (isUndefined(text) || isUndefined(formatParser)) { + throw new InvalidArgumentError("fromFormatParser requires an input string and a format parser"); + } + const { + locale = null, + numberingSystem = null + } = opts, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true + }); + if (!localeToUse.equals(formatParser.locale)) { + throw new InvalidArgumentError(`fromFormatParser called with a locale of ${localeToUse}, ` + `but the format parser was created for ${formatParser.locale}`); + } + const { + result, + zone, + specificOffset, + invalidReason + } = formatParser.explainFromTokens(text); + if (invalidReason) { + return DateTime.invalid(invalidReason); + } else { + return parseDataToDateTime(result, zone, opts, `format ${formatParser.format}`, text, specificOffset); + } + } + + // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */ + static get DATE_SHORT() { + return DATE_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + static get DATE_MED() { + return DATE_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + static get DATE_MED_WITH_WEEKDAY() { + return DATE_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + static get DATE_FULL() { + return DATE_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + static get DATE_HUGE() { + return DATE_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_SIMPLE() { + return TIME_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_SECONDS() { + return TIME_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_SHORT_OFFSET() { + return TIME_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_LONG_OFFSET() { + return TIME_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + static get TIME_24_SIMPLE() { + return TIME_24_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_SECONDS() { + return TIME_24_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_SHORT_OFFSET() { + return TIME_24_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_LONG_OFFSET() { + return TIME_24_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_SHORT() { + return DATETIME_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_SHORT_WITH_SECONDS() { + return DATETIME_SHORT_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED() { + return DATETIME_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED_WITH_SECONDS() { + return DATETIME_MED_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED_WITH_WEEKDAY() { + return DATETIME_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_FULL() { + return DATETIME_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_FULL_WITH_SECONDS() { + return DATETIME_FULL_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_HUGE() { + return DATETIME_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_HUGE_WITH_SECONDS() { + return DATETIME_HUGE_WITH_SECONDS; + } +} + +/** + * @private + */ +function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError(`Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`); + } +} + +const VERSION = "3.7.2"; + +exports.DateTime = DateTime; +exports.Duration = Duration; +exports.FixedOffsetZone = FixedOffsetZone; +exports.IANAZone = IANAZone; +exports.Info = Info; +exports.Interval = Interval; +exports.InvalidZone = InvalidZone; +exports.Settings = Settings; +exports.SystemZone = SystemZone; +exports.VERSION = VERSION; +exports.Zone = Zone; +//# sourceMappingURL=luxon.js.map diff --git a/node_modules/luxon/build/node/luxon.js.map b/node_modules/luxon/build/node/luxon.js.map new file mode 100644 index 00000000..bcb08350 --- /dev/null +++ b/node_modules/luxon/build/node/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/zone.js","../../src/zones/systemZone.js","../../src/zones/IANAZone.js","../../src/impl/locale.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/impl/digits.js","../../src/settings.js","../../src/impl/invalid.js","../../src/impl/conversions.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/tokenParser.js","../../src/datetime.js","../../src/luxon.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n let dtf = dtfCache.get(zoneName);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zoneName,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n dtfCache.set(zoneName, dtf);\n }\n return dtf;\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n let zone = ianaZoneCache.get(name);\n if (zone === undefined) {\n ianaZoneCache.set(name, (zone = new IANAZone(name)));\n }\n return zone;\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache.clear();\n dtfCache.clear();\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n if (!this.valid) return NaN;\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache.get(key);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache.set(key, dtf);\n }\n return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache.get(key);\n if (inf === undefined) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache.set(key, inf);\n }\n return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache.get(key);\n if (inf === undefined) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache.set(key, inf);\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n let opts = intlResolvedOptionsCache.get(locString);\n if (opts === undefined) {\n opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n intlResolvedOptionsCache.set(locString, opts);\n }\n return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache.get(locString);\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n if (!(\"minimalDays\" in data)) {\n data = { ...fallbackWeekSettings, ...data };\n }\n weekInfoCache.set(locString, data);\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache.clear();\n intlNumCache.clear();\n intlRelCache.clear();\n intlResolvedOptionsCache.clear();\n weekInfoCache.clear();\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n // As such, just use format() instead of formatToParts() and take the whole string\n const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n format &= !monthSpecialCase;\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n const mapper = !monthSpecialCase\n ? (dt) => this.extract(dt, intl, \"month\")\n : (dt) => this.dtFormatter(dt, intl).format();\n this.monthsCache[formatStr][length] = mapMonths(mapper);\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n let appendCache = digitRegexCache.get(ns);\n if (appendCache === undefined) {\n appendCache = new Map();\n digitRegexCache.set(ns, appendCache);\n }\n let regex = appendCache.get(append);\n if (regex === undefined) {\n regex = new RegExp(`${numberingSystems[ns]}${append}`);\n appendCache.set(append, regex);\n }\n\n return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n const factor = 10 ** digits;\n switch (rounding) {\n case \"expand\":\n return number > 0\n ? Math.ceil(number * factor) / factor\n : Math.floor(number * factor) / factor;\n case \"trunc\":\n return Math.trunc(number * factor) / factor;\n case \"round\":\n return Math.round(number * factor) / factor;\n case \"floor\":\n return Math.floor(number * factor) / factor;\n case \"ceil\":\n return Math.ceil(number * factor) / factor;\n default:\n throw new RangeError(`Value rounding ${rounding} is out of range`);\n }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n // turn '' into a literal signal quote instead of just skipping the empty literal\n if (currentFull.length > 0 || bracketed) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull === \"\" ? \"'\" : currentFull,\n });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0, signDisplay = undefined) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n if (signDisplay) {\n opts.signDisplay = signDisplay;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"milliseconds\";\n case \"s\":\n return \"seconds\";\n case \"m\":\n return \"minutes\";\n case \"h\":\n return \"hours\";\n case \"d\":\n return \"days\";\n case \"w\":\n return \"weeks\";\n case \"M\":\n return \"months\";\n case \"y\":\n return \"years\";\n default:\n return null;\n }\n },\n tokenToString = (lildur, info) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n const inversionFactor =\n info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n let signDisplay;\n if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n signDisplay = \"never\";\n } else if (this.opts.signMode === \"all\") {\n signDisplay = \"always\";\n } else {\n // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n signDisplay = \"auto\";\n }\n return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n durationInfo = {\n isNegativeDuration: collapsed < 0,\n // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n // in order\n largestUnit: Object.keys(collapsed.values)[0],\n };\n return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n * @example\n * ```js\n * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const showZeros = opts.showZeros !== false;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val) || (val === 0 && !showZeros)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Removes all units with values equal to 0 from this Duration.\n * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n * @return {Duration}\n */\n removeZeros() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.values);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval. This is the first instant which is not part of the interval\n * (Interval is half-open).\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns the last DateTime included in the interval (since end is not part of the interval)\n * @type {DateTime}\n */\n get lastDateTime() {\n return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into an equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n * and ending with the latest.\n *\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended, precision) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (precision === \"year\") return c;\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n c += \"-\";\n } else {\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n }\n c += padStart(o.c.day);\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n) {\n let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n c = \"\";\n switch (precision) {\n case \"day\":\n case \"month\":\n case \"year\":\n break;\n default:\n c += padStart(o.c.hour);\n if (precision === \"hour\") break;\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += \":\";\n c += padStart(o.c.second);\n }\n } else {\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += padStart(o.c.second);\n }\n }\n if (precision === \"second\") break;\n if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n // Do not cache anything but IANA zones, because it is not safe to do so.\n // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n if (zone.type !== \"iana\") {\n return zone.offset(zoneOffsetTs);\n }\n const zoneName = zone.name;\n let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n if (offsetGuess === undefined) {\n offsetGuess = zone.offset(zoneOffsetTs);\n zoneOffsetGuessCache.set(zoneName, offsetGuess);\n }\n return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache.clear();\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n * @return {string|null}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext, precision);\n if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n c += toISOTime(\n this,\n ext,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n );\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n * @return {string|null}\n */\n toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\", normalizeUnit(precision));\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string|null}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval|DateTime}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n"],"names":["LuxonError","Error","InvalidDateTimeError","constructor","reason","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","type","name","ianaName","isUniversal","offsetName","ts","opts","formatOffset","format","offset","equals","otherZone","isValid","singleton","SystemZone","instance","Intl","DateTimeFormat","resolvedOptions","timeZone","locale","parseZoneInfo","Date","getTimezoneOffset","dtfCache","Map","makeDTF","zoneName","dtf","get","undefined","hour12","era","set","typeToPos","hackyOffset","date","formatted","replace","parsed","exec","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","formatToParts","filled","i","length","value","pos","isUndefined","parseInt","ianaZoneCache","IANAZone","create","zone","resetCache","clear","isValidSpecifier","isValidZone","e","valid","NaN","isNaN","adOrBc","Math","abs","adjustedHour","asUTC","objToLocalTS","millisecond","asTS","over","intlLFCache","getCachedLF","locString","key","JSON","stringify","ListFormat","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","NumberFormat","intlRelCache","getCachedRTF","base","cacheKeyOpts","RelativeTimeFormat","sysLocaleCache","systemLocale","intlResolvedOptionsCache","getCachedIntResolvedOptions","weekInfoCache","getCachedWeekInfo","data","Locale","getWeekInfo","weekInfo","fallbackWeekSettings","parseLocaleString","localeStr","xIndex","indexOf","substring","uIndex","options","selectedStr","smaller","numberingSystem","calendar","intlConfigString","outputCalendar","includes","mapMonths","f","ms","dt","DateTime","utc","push","mapWeekdays","listStuff","loc","englishFn","intlFn","mode","listingMode","supportsFastNumbers","startsWith","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","Object","keys","intlOpts","useGrouping","minimumIntegerDigits","fixed","roundTo","padStart","PolyDateFormatter","originalZone","z","gmtOffset","offsetZ","setZone","plus","minutes","map","join","toJSDate","parts","part","PolyRelFormatter","isEnglish","style","hasRelative","rtf","count","English","numeric","firstDay","minimalDays","weekend","fromOpts","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","months","monthSpecialCase","formatStr","mapper","extract","dtFormatter","weekdays","meridiems","eras","field","df","results","matching","find","m","toLowerCase","numberFormatter","relFormatter","listFormatter","getWeekSettings","hasLocaleWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","toString","FixedOffsetZone","utcInstance","parseSpecifier","r","match","signedOffset","InvalidZone","normalizeZone","input","defaultZone","isString","lowered","isNumber","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","split","parseDigits","str","code","charCodeAt","search","min","max","digitRegexCache","resetDigitRegexCache","digitRegex","append","ns","appendCache","regex","RegExp","now","twoDigitCutoffYear","throwOnInvalid","cutoffYear","t","resetCaches","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","d","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","findIndex","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekNumber","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","obj","hasLocaleWeekData","localWeekday","localWeekNumber","localWeekYear","hasIsoWeekData","hasInvalidWeekData","validYear","isInteger","validWeek","integerBetween","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","o","isDate","prototype","call","maybeArray","thing","Array","isArray","bestBy","arr","by","compare","reduce","best","next","pair","pick","a","k","hasOwnProperty","prop","settings","some","v","from","bottom","top","floorMod","x","isNeg","padded","parseInteger","string","parseFloating","parseFloat","parseMillis","fraction","number","digits","rounding","factor","ceil","trunc","round","RangeError","modMonth","modYear","firstWeekOffset","fwdlw","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","Number","offMin","offMinSigned","is","asNumber","numericValue","isFinite","normalizeObject","normalizer","normalized","u","hours","sign","monthsLong","monthsShort","monthsNarrow","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","meridiemForDateTime","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","token","literal","val","macroTokenToFormatOpts","D","Formats","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","parseFormat","fmt","current","currentFull","bracketed","c","charAt","test","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","start","formatRange","end","num","p","signDisplay","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","meridiem","maybeMacro","slice","quarter","formatDurationFromString","dur","invertLargest","signMode","tokenToField","lildur","info","mapped","inversionFactor","isNegativeDuration","largestUnit","tokens","realTokens","found","concat","collapsed","shiftTo","filter","durationInfo","values","ianaRegex","combineRegexes","regexes","full","source","combineExtractors","extractors","mergedVals","mergedZone","cursor","ex","parse","patterns","extractor","simpleParse","ret","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","item","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","trim","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","conf","conversionAccuracy","matrix","Duration","durationToMillis","vals","_vals$milliseconds","sum","normalizeValues","reduceRight","previous","previousVal","conv","rollUp","removeZeroes","newVals","entries","config","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","text","fromISOTime","week","toFormat","fmtOpts","toHuman","showZeros","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","dateTime","toJSON","Symbol","for","invalidReason","valueOf","duration","minus","negate","mapUnits","fn","mixed","reconfigure","as","normalize","rescale","shiftToAll","built","accumulated","lastUnit","own","ak","negated","removeZeros","invalidExplanation","eq","v1","v2","validateStartEnd","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","startIsValid","endIsValid","isInterval","lastDateTime","toDuration","startOf","useLocaleWeeks","diff","hasSame","isEmpty","isAfter","isBefore","contains","splitAt","dateTimes","sorted","sort","b","added","splitBy","idx","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","final","sofar","xor","currentCount","ends","time","flattened","difference","toLocaleString","toISODate","dateFormat","separator","mapEndpoints","mapFn","Info","hasDST","proto","isValidIANAZone","locObj","getMinimumDaysInFirstWeek","getWeekendWeekdays","monthsFormat","weekdaysFormat","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highOrderDiffs","differs","lowestOrder","highWater","differ","remainingMillis","lowerOrderUnits","MISSING_FTP","intUnit","post","deser","NBSP","String","fromCharCode","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","groups","h","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","tokenForPart","resolvedOpts","isSpace","actualType","buildRegex","re","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","specificOffset","Z","q","M","G","y","S","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatOptsToTokens","expandMacroTokens","TokenParser","disqualifyingUnit","regexString","explainFromTokens","rawMatches","parser","parseFromTokens","formatter","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","precision","longFormat","extendedZone","showSeconds","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","normalizeUnitWithLocalWeeks","guessOffsetForZone","zoneOffsetTs","offsetGuess","zoneOffsetGuessCache","quickDT","offsetProvis","diffRelative","calendary","lastOpts","argList","args","unchanged","ot","_zone","isLuxonDateTime","arguments","fromJSDate","zoneToUse","fromSeconds","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","gregorian","tsFinal","offsetFinal","fromRFC2822","fromHTTP","fromFormat","localeToUse","fromString","fromSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","expanded","isWeekend","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","isInLeapYear","weeksInLocalWeekYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","asObj","setLocale","settingWeekStuff","normalizedUnit","endOf","toLocaleParts","ext","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","fromStringExplain","buildFormatParser","fromFormatParser","formatParser","dateTimeish","VERSION"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/luxon/package.json b/node_modules/luxon/package.json new file mode 100644 index 00000000..f80269b1 --- /dev/null +++ b/node_modules/luxon/package.json @@ -0,0 +1,87 @@ +{ + "name": "luxon", + "version": "3.7.2", + "description": "Immutable date wrapper", + "author": "Isaac Cambron", + "keywords": [ + "date", + "immutable" + ], + "repository": "https://github.com/moment/luxon", + "exports": { + ".": { + "import": "./build/es6/luxon.mjs", + "require": "./build/node/luxon.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "build": "babel-node tasks/buildAll.js", + "build-node": "babel-node tasks/buildNode.js", + "build-global": "babel-node tasks/buildGlobal.js", + "jest": "jest", + "test": "jest --coverage", + "api-docs": "mkdir -p build && documentation build src/luxon.js -f html -o build/api-docs && sed -i.bak 's/<\\/body>/ +``` + +``` +// "lite" version + +``` + +## Quick Start + +For the full version (800+ MIME types, 1,000+ extensions): + +```javascript +const mime = require('mime'); + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getExtension('text/plain'); // ⇨ 'txt' +``` + +See [Mime API](#mime-api) below for API details. + +## Lite Version + +The "lite" version of this module omits vendor-specific (`*/vnd.*`) and +experimental (`*/x-*`) types. It weighs in at ~2.5KB, compared to 8KB for the +full version. To load the lite version: + +```javascript +const mime = require('mime/lite'); +``` + +## Mime .vs. mime-types .vs. mime-db modules + +For those of you wondering about the difference between these [popular] NPM modules, +here's a brief rundown ... + +[`mime-db`](https://github.com/jshttp/mime-db) is "the source of +truth" for MIME type information. It is not an API. Rather, it is a canonical +dataset of mime type definitions pulled from IANA, Apache, NGINX, and custom mappings +submitted by the Node.js community. + +[`mime-types`](https://github.com/jshttp/mime-types) is a thin +wrapper around mime-db that provides an API drop-in compatible(ish) with `mime @ < v1.3.6` API. + +`mime` is, as of v2, a self-contained module bundled with a pre-optimized version +of the `mime-db` dataset. It provides a simplified API with the following characteristics: + +* Intelligently resolved type conflicts (See [mime-score](https://github.com/broofa/mime-score) for details) +* Method naming consistent with industry best-practices +* Compact footprint. E.g. The minified+compressed sizes of the various modules: + +Module | Size +--- | --- +`mime-db` | 18 KB +`mime-types` | same as mime-db +`mime` | 8 KB +`mime/lite` | 2 KB + +## Mime API + +Both `require('mime')` and `require('mime/lite')` return instances of the MIME +class, documented below. + +Note: Inputs to this API are case-insensitive. Outputs (returned values) will +be lowercase. + +### new Mime(typeMap, ... more maps) + +Most users of this module will not need to create Mime instances directly. +However if you would like to create custom mappings, you may do so as follows +... + +```javascript +// Require Mime class +const Mime = require('mime/Mime'); + +// Define mime type -> extensions map +const typeMap = { + 'text/abc': ['abc', 'alpha', 'bet'], + 'text/def': ['leppard'] +}; + +// Create and use Mime instance +const myMime = new Mime(typeMap); +myMime.getType('abc'); // ⇨ 'text/abc' +myMime.getExtension('text/def'); // ⇨ 'leppard' +``` + +If more than one map argument is provided, each map is `define()`ed (see below), in order. + +### mime.getType(pathOrExtension) + +Get mime type for the given path or extension. E.g. + +```javascript +mime.getType('js'); // ⇨ 'application/javascript' +mime.getType('json'); // ⇨ 'application/json' + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getType('dir/text.txt'); // ⇨ 'text/plain' +mime.getType('dir\\text.txt'); // ⇨ 'text/plain' +mime.getType('.text.txt'); // ⇨ 'text/plain' +mime.getType('.txt'); // ⇨ 'text/plain' +``` + +`null` is returned in cases where an extension is not detected or recognized + +```javascript +mime.getType('foo/txt'); // ⇨ null +mime.getType('bogus_type'); // ⇨ null +``` + +### mime.getExtension(type) +Get extension for the given mime type. Charset options (often included in +Content-Type headers) are ignored. + +```javascript +mime.getExtension('text/plain'); // ⇨ 'txt' +mime.getExtension('application/json'); // ⇨ 'json' +mime.getExtension('text/html; charset=utf8'); // ⇨ 'html' +``` + +### mime.define(typeMap[, force = false]) + +Define [more] type mappings. + +`typeMap` is a map of type -> extensions, as documented in `new Mime`, above. + +By default this method will throw an error if you try to map a type to an +extension that is already assigned to another type. Passing `true` for the +`force` argument will suppress this behavior (overriding any previous mapping). + +```javascript +mime.define({'text/x-abc': ['abc', 'abcd']}); + +mime.getType('abcd'); // ⇨ 'text/x-abc' +mime.getExtension('text/x-abc') // ⇨ 'abc' +``` + +## Command Line + + mime [path_or_extension] + +E.g. + + > mime scripts/jquery.js + application/javascript + +---- +Markdown generated from [src/README_js.md](src/README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js new file mode 100644 index 00000000..ab70a49c --- /dev/null +++ b/node_modules/mime/cli.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node + +'use strict'; + +process.title = 'mime'; +let mime = require('.'); +let pkg = require('./package.json'); +let args = process.argv.splice(2); + +if (args.includes('--version') || args.includes('-v') || args.includes('--v')) { + console.log(pkg.version); + process.exit(0); +} else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) { + console.log(pkg.name); + process.exit(0); +} else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) { + console.log(pkg.name + ' - ' + pkg.description + '\n'); + console.log(`Usage: + + mime [flags] [path_or_extension] + + Flags: + --help, -h Show this message + --version, -v Display the version + --name, -n Print the name of the program + + Note: the command will exit after it executes if a command is specified + The path_or_extension is the path to the file or the extension of the file. + + Examples: + mime --help + mime --version + mime --name + mime -v + mime src/log.js + mime new.py + mime foo.sh + `); + process.exit(0); +} + +let file = args[0]; +let type = mime.getType(file); + +process.stdout.write(type + '\n'); + diff --git a/node_modules/mime/index.js b/node_modules/mime/index.js new file mode 100644 index 00000000..fadcf8d6 --- /dev/null +++ b/node_modules/mime/index.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard'), require('./types/other')); diff --git a/node_modules/mime/lite.js b/node_modules/mime/lite.js new file mode 100644 index 00000000..835cffb3 --- /dev/null +++ b/node_modules/mime/lite.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard')); diff --git a/node_modules/mime/package.json b/node_modules/mime/package.json new file mode 100644 index 00000000..84f51323 --- /dev/null +++ b/node_modules/mime/package.json @@ -0,0 +1,52 @@ +{ + "author": { + "name": "Robert Kieffer", + "url": "http://github.com/broofa", + "email": "robert@broofa.com" + }, + "engines": { + "node": ">=10.0.0" + }, + "bin": { + "mime": "cli.js" + }, + "contributors": [], + "description": "A comprehensive library for mime-type mapping", + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "benchmark": "*", + "chalk": "4.1.2", + "eslint": "8.1.0", + "mime-db": "1.50.0", + "mime-score": "1.2.0", + "mime-types": "2.1.33", + "mocha": "9.1.3", + "runmd": "*", + "standard-version": "9.3.2" + }, + "files": [ + "index.js", + "lite.js", + "Mime.js", + "cli.js", + "/types" + ], + "scripts": { + "prepare": "node src/build.js && runmd --output README.md src/README_js.md", + "release": "standard-version", + "benchmark": "node src/benchmark.js", + "md": "runmd --watch --output README.md src/README_js.md", + "test": "mocha src/test.js" + }, + "keywords": [ + "util", + "mime" + ], + "name": "mime", + "repository": { + "url": "https://github.com/broofa/mime", + "type": "git" + }, + "version": "3.0.0" +} diff --git a/node_modules/mime/types/other.js b/node_modules/mime/types/other.js new file mode 100644 index 00000000..bb6a0353 --- /dev/null +++ b/node_modules/mime/types/other.js @@ -0,0 +1 @@ +module.exports = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}; \ No newline at end of file diff --git a/node_modules/mime/types/standard.js b/node_modules/mime/types/standard.js new file mode 100644 index 00000000..5ee9937e --- /dev/null +++ b/node_modules/mime/types/standard.js @@ -0,0 +1 @@ +module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]}; \ No newline at end of file diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md new file mode 100644 index 00000000..60d88502 --- /dev/null +++ b/node_modules/minimatch/README.md @@ -0,0 +1,267 @@ +# minimatch + +A minimal matching utility. + +[![Build Status](https://travis-ci.org/isaacs/minimatch.svg?branch=master)](http://travis-ci.org/isaacs/minimatch) + + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Important Security Consideration! + +> [!WARNING] +> This library uses JavaScript regular expressions. Please read +> the following warning carefully, and be thoughtful about what +> you provide to this library in production systems. + +_Any_ library in JavaScript that deals with matching string +patterns using regular expressions will be subject to +[ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS) +if the pattern is generated using untrusted input. + +Efforts have been made to mitigate risk as much as is feasible in +such a library, providing maximum recursion depths and so forth, +but these measures can only ultimately protect against accidents, +not malice. A dedicated attacker can _always_ find patterns that +cannot be defended against by a bash-compatible glob pattern +matching system that uses JavaScript regular expressions. + +To be extremely clear: + +> [!WARNING] +> **If you create a system where you take user input, and use +> that input as the source of a Regular Expression pattern, in +> this or any extant glob matcher in JavaScript, you will be +> pwned.** + +A future version of this library _may_ use a different matching +algorithm which does not exhibit backtracking problems. If and +when that happens, it will likely be a sweeping change, and those +improvements will **not** be backported to legacy versions. + +In the near term, it is not reasonable to continue to play +whack-a-mole with security advisories, and so any future ReDoS +reports will be considered "working as intended", and resolved +entirely by this warning. + +## Usage + +```javascript +var minimatch = require("minimatch") + +minimatch("bar.foo", "*.foo") // true! +minimatch("bar.foo", "*.bar") // false! +minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require("minimatch").Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +* `pattern` The original pattern the minimatch object represents. +* `options` The options supplied to the constructor. +* `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +* `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +* `negate` True if the pattern is negated. +* `comment` True if the pattern is a comment. +* `empty` True if the pattern is `""`. + +### Methods + +* `makeRe` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +* `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +* `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, "*.js", { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) +``` + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + +### partial + +Compare a partial path to a pattern. As long as the parts of the path that +are present are not contradicted by the pattern, it will be treated as a +match. This is useful in applications where you're walking through a +folder structure, and don't yet have the full path, but want to ensure that +you do not walk down paths that can never be a match. + +For example, + +```js +minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d +minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d +minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a +``` + +### allowWindowsEscape + +Windows path separator `\` is by default converted to `/`, which +prohibits the usage of `\` as a escape character. This flag skips that +behavior and allows using the escape character. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between minimatch and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. diff --git a/node_modules/minimatch/minimatch.js b/node_modules/minimatch/minimatch.js new file mode 100644 index 00000000..2e4a058a --- /dev/null +++ b/node_modules/minimatch/minimatch.js @@ -0,0 +1,1005 @@ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = (function () { try { return require('path') } catch (e) {}}()) || { + sep: '/' +} +minimatch.sep = path.sep + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + b = b || {} + var t = {} + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || typeof def !== 'object' || !Object.keys(def).length) { + return minimatch + } + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + m.Minimatch.defaults = function defaults (options) { + return orig.defaults(ext(def, options)).Minimatch + } + + m.filter = function filter (pattern, options) { + return orig.filter(pattern, ext(def, options)) + } + + m.defaults = function defaults (options) { + return orig.defaults(ext(def, options)) + } + + m.makeRe = function makeRe (pattern, options) { + return orig.makeRe(pattern, ext(def, options)) + } + + m.braceExpand = function braceExpand (pattern, options) { + return orig.braceExpand(pattern, ext(def, options)) + } + + m.match = function (list, pattern, options) { + return orig.match(list, pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + assertValidPattern(pattern) + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + assertValidPattern(pattern) + + if (!options) options = {} + + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (!options.allowWindowsEscape && path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined + ? options.maxGlobstarRecursion : 200 + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + this.partial = !!options.partial + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) } + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + assertValidPattern(pattern) + + // Thanks to Yeting Li for + // improving this regexp to avoid a ReDOS vulnerability. + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +var MAX_PATTERN_LENGTH = 1024 * 64 +var assertValidPattern = function (pattern) { + if (typeof pattern !== 'string') { + throw new TypeError('invalid pattern') + } + + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError('pattern is too long') + } +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + assertValidPattern(pattern) + + var options = this.options + + // shortcuts + if (pattern === '**') { + if (!options.noglobstar) + return GLOBSTAR + else + pattern = '*' + } + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + /* istanbul ignore next */ + case '/': { + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + } + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // coalesce consecutive non-globstar * characters + if (c === '*' && stateChar === '*') continue + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '[': case '.': case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) /* istanbul ignore next - should be impossible */ { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) /* istanbul ignore next - should be impossible */ { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = function match (f, partial) { + if (typeof partial === 'undefined') partial = this.partial + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + if (pattern.indexOf(GLOBSTAR) !== -1) { + return this._matchGlobstar(file, pattern, partial, 0, 0) + } + return this._matchOne(file, pattern, partial, 0, 0) +} + +Minimatch.prototype._matchGlobstar = function (file, pattern, partial, fileIndex, patternIndex) { + var i + + // find first globstar from patternIndex + var firstgs = -1 + for (i = patternIndex; i < pattern.length; i++) { + if (pattern[i] === GLOBSTAR) { firstgs = i; break } + } + + // find last globstar + var lastgs = -1 + for (i = pattern.length - 1; i >= 0; i--) { + if (pattern[i] === GLOBSTAR) { lastgs = i; break } + } + + var head = pattern.slice(patternIndex, firstgs) + var body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs) + var tail = partial ? [] : pattern.slice(lastgs + 1) + + // check the head + if (head.length) { + var fileHead = file.slice(fileIndex, fileIndex + head.length) + if (!this._matchOne(fileHead, head, partial, 0, 0)) { + return false + } + fileIndex += head.length + } + + // check the tail + var fileTailMatch = 0 + if (tail.length) { + if (tail.length + fileIndex > file.length) return false + + var tailStart = file.length - tail.length + if (this._matchOne(file, tail, partial, tailStart, 0)) { + fileTailMatch = tail.length + } else { + // affordance for stuff like a/**/* matching a/b/ + if (file[file.length - 1] !== '' || + fileIndex + tail.length === file.length) { + return false + } + tailStart-- + if (!this._matchOne(file, tail, partial, tailStart, 0)) { + return false + } + fileTailMatch = tail.length + 1 + } + } + + // if body is empty (single ** between head and tail) + if (!body.length) { + var sawSome = !!fileTailMatch + for (i = fileIndex; i < file.length - fileTailMatch; i++) { + var f = String(file[i]) + sawSome = true + if (f === '.' || f === '..' || + (!this.options.dot && f.charAt(0) === '.')) { + return false + } + } + return partial || sawSome + } + + // split body into segments at each GLOBSTAR + var bodySegments = [[[], 0]] + var currentBody = bodySegments[0] + var nonGsParts = 0 + var nonGsPartsSums = [0] + for (var bi = 0; bi < body.length; bi++) { + var b = body[bi] + if (b === GLOBSTAR) { + nonGsPartsSums.push(nonGsParts) + currentBody = [[], 0] + bodySegments.push(currentBody) + } else { + currentBody[0].push(b) + nonGsParts++ + } + } + + var idx = bodySegments.length - 1 + var fileLength = file.length - fileTailMatch + for (var si = 0; si < bodySegments.length; si++) { + bodySegments[si][1] = fileLength - + (nonGsPartsSums[idx--] + bodySegments[si][0].length) + } + + return !!this._matchGlobStarBodySections( + file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch + ) +} + +// return false for "nope, not matching" +// return null for "not matching, cannot keep trying" +Minimatch.prototype._matchGlobStarBodySections = function ( + file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail +) { + var bs = bodySegments[bodyIndex] + if (!bs) { + // just make sure there are no bad dots + for (var i = fileIndex; i < file.length; i++) { + sawTail = true + var f = file[i] + if (f === '.' || f === '..' || + (!this.options.dot && f.charAt(0) === '.')) { + return false + } + } + return sawTail + } + + var body = bs[0] + var after = bs[1] + while (fileIndex <= after) { + var m = this._matchOne( + file.slice(0, fileIndex + body.length), + body, + partial, + fileIndex, + 0 + ) + // if limit exceeded, no match. intentional false negative, + // acceptable break in correctness for security. + if (m && globStarDepth < this.maxGlobstarRecursion) { + var sub = this._matchGlobStarBodySections( + file, bodySegments, + fileIndex + body.length, bodyIndex + 1, + partial, globStarDepth + 1, sawTail + ) + if (sub !== false) { + return sub + } + } + var f = file[fileIndex] + if (f === '.' || f === '..' || + (!this.options.dot && f.charAt(0) === '.')) { + return false + } + fileIndex++ + } + return partial || null +} + +Minimatch.prototype._matchOne = function (file, pattern, partial, fileIndex, patternIndex) { + var fi, pi, fl, pl + for ( + fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++ + ) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + /* istanbul ignore if */ + if (p === false || p === GLOBSTAR) return false + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + hit = f === p + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else /* istanbul ignore else */ if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + return (fi === fl - 1) && (file[fi] === '') + } + + // should be unreachable. + /* istanbul ignore next */ + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json new file mode 100644 index 00000000..563d2184 --- /dev/null +++ b/node_modules/minimatch/package.json @@ -0,0 +1,33 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "name": "minimatch", + "description": "a glob matcher in javascript", + "version": "3.1.5", + "publishConfig": { + "tag": "legacy-v3" + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "main": "minimatch.js", + "scripts": { + "test": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --all; git push origin --tags" + }, + "engines": { + "node": "*" + }, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "devDependencies": { + "tap": "^15.1.6" + }, + "license": "ISC", + "files": [ + "minimatch.js" + ] +} diff --git a/node_modules/minimist/.eslintrc b/node_modules/minimist/.eslintrc new file mode 100644 index 00000000..bd1a5e04 --- /dev/null +++ b/node_modules/minimist/.eslintrc @@ -0,0 +1,29 @@ +{ + "root": true, + + "extends": "@ljharb/eslint-config/node/0.4", + + "rules": { + "array-element-newline": 0, + "complexity": 0, + "func-style": [2, "declaration"], + "max-lines-per-function": 0, + "max-nested-callbacks": 1, + "max-statements-per-line": 1, + "max-statements": 0, + "multiline-comment-style": 0, + "no-continue": 1, + "no-param-reassign": 1, + "no-restricted-syntax": 1, + "object-curly-newline": 0, + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "camelcase": 0, + }, + }, + ] +} diff --git a/node_modules/minimist/.github/FUNDING.yml b/node_modules/minimist/.github/FUNDING.yml new file mode 100644 index 00000000..a9366222 --- /dev/null +++ b/node_modules/minimist/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/minimist +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/minimist/.nycrc b/node_modules/minimist/.nycrc new file mode 100644 index 00000000..55c3d293 --- /dev/null +++ b/node_modules/minimist/.nycrc @@ -0,0 +1,14 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "example", + "test" + ] +} diff --git a/node_modules/minimist/CHANGELOG.md b/node_modules/minimist/CHANGELOG.md new file mode 100644 index 00000000..c9a1e15e --- /dev/null +++ b/node_modules/minimist/CHANGELOG.md @@ -0,0 +1,298 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) +- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) +- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) +- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) +- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) +- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) +- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) + +## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) +- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) +- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) +- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) +- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) +- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) +- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) +- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) +- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) +- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) +- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) + +## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 + +### Commits + +- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) +- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) +- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) + +## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 + +## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 + +### Commits + +- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) +- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) + +## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 + +### Commits + +- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) +- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) + +## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 + +### Commits + +- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) +- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) +- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) +- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) + +## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 + +### Merged + +- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) + +### Commits + +- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) +- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) + +## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 + +### Commits + +- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) +- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) +- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) +- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) +- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) + +## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 + +### Commits + +- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) +- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) + +## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 + +### Commits + +- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) +- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) +- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) + +## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 + +### Commits + +- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) +- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) +- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) +- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) + +## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 + +### Commits + +- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) +- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) +- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) +- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) + +## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 + +### Commits + +- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) +- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) + +## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) + +## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) + +## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 + +## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 + +### Commits + +- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) + +## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 + +### Commits + +- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) +- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) +- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) + +## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 + +### Commits + +- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) +- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) +- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) +- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) +- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) + +## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 + +### Commits + +- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) + +## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 + +### Commits + +- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) +- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) + +## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 + +### Commits + +- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) + +## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 + +### Commits + +- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) + +## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 + +### Commits + +- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) + +## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 + +## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 + +### Commits + +- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) +- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) + +## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 + +### Commits + +- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) +- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) + +## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 + +### Commits + +- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) + +## v0.0.0 - 2013-06-25 + +### Commits + +- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) +- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) +- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) +- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) +- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) +- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) +- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) +- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) +- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) +- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) +- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/README.md b/node_modules/minimist/README.md new file mode 100644 index 00000000..74da3234 --- /dev/null +++ b/node_modules/minimist/README.md @@ -0,0 +1,121 @@ +# minimist [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ + _: ['foo', 'bar', 'baz'], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' +} +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { + _: ['one', 'two', 'three'], + '--': ['four', 'five', '--six'] + } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/minimist +[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg +[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/minimist.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/minimist.svg +[downloads-url]: https://npm-stat.com/charts.html?package=minimist +[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist +[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js new file mode 100644 index 00000000..9d90ffb2 --- /dev/null +++ b/node_modules/minimist/example/parse.js @@ -0,0 +1,4 @@ +'use strict'; + +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js new file mode 100644 index 00000000..f020f394 --- /dev/null +++ b/node_modules/minimist/index.js @@ -0,0 +1,263 @@ +'use strict'; + +function hasKey(obj, keys) { + var o = obj; + keys.slice(0, -1).forEach(function (key) { + o = o[key] || {}; + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber(x) { + if (typeof x === 'number') { return true; } + if ((/^0x[0-9a-f]+$/i).test(x)) { return true; } + return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x); +} + +function isConstructorOrProto(obj, key) { + return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__'; +} + +module.exports = function (args, opts) { + if (!opts) { opts = {}; } + + var flags = { + bools: {}, + strings: {}, + unknownFn: null, + }; + + if (typeof opts.unknown === 'function') { + flags.unknownFn = opts.unknown; + } + + if (typeof opts.boolean === 'boolean' && opts.boolean) { + flags.allBools = true; + } else { + [].concat(opts.boolean).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + [].concat(aliases[key]).forEach(function (k) { + flags.strings[k] = true; + }); + } + }); + + var defaults = opts.default || {}; + + var argv = { _: [] }; + + function argDefined(key, arg) { + return (flags.allBools && (/^--[^=]+$/).test(arg)) + || flags.strings[key] + || flags.bools[key] + || aliases[key]; + } + + function setKey(obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length - 1; i++) { + var key = keys[i]; + if (isConstructorOrProto(o, key)) { return; } + if (o[key] === undefined) { o[key] = {}; } + if ( + o[key] === Object.prototype + || o[key] === Number.prototype + || o[key] === String.prototype + ) { + o[key] = {}; + } + if (o[key] === Array.prototype) { o[key] = []; } + o = o[key]; + } + + var lastKey = keys[keys.length - 1]; + if (isConstructorOrProto(o, lastKey)) { return; } + if ( + o === Object.prototype + || o === Number.prototype + || o === String.prototype + ) { + o = {}; + } + if (o === Array.prototype) { o = []; } + if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') { + o[lastKey] = value; + } else if (Array.isArray(o[lastKey])) { + o[lastKey].push(value); + } else { + o[lastKey] = [o[lastKey], value]; + } + } + + function setArg(key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) { return; } + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) + : val; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--') + 1); + args = args.slice(0, args.indexOf('--')); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + var key; + var next; + + if ((/^--.+=/).test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } else if ((/^--no-.+/).test(arg)) { + key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } else if ((/^--.+/).test(arg)) { + key = arg.match(/^--(.+)/)[1]; + next = args[i + 1]; + if ( + next !== undefined + && !(/^(-|--)[^-]/).test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, next, arg); + i += 1; + } else if ((/^(true|false)$/).test(next)) { + setArg(key, next === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } else if ((/^-[^-]+/).test(arg)) { + var letters = arg.slice(1, -1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + + if (next === '-') { + setArg(letters[j], next, arg); + continue; + } + + if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') { + setArg(letters[j], next.slice(1), arg); + broken = true; + break; + } + + if ( + (/[A-Za-z]/).test(letters[j]) + && (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next) + ) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j + 1] && letters[j + 1].match(/\W/)) { + setArg(letters[j], arg.slice(j + 2), arg); + broken = true; + break; + } else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if ( + args[i + 1] + && !(/^(-|--)[^-]/).test(args[i + 1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, args[i + 1], arg); + i += 1; + } else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) { + setArg(key, args[i + 1] === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg)); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (k) { + if (!hasKey(argv, k.split('.'))) { + setKey(argv, k.split('.'), defaults[k]); + + (aliases[k] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[k]); + }); + } + }); + + if (opts['--']) { + argv['--'] = notFlags.slice(); + } else { + notFlags.forEach(function (k) { + argv._.push(k); + }); + } + + return argv; +}; diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json new file mode 100644 index 00000000..c10a3344 --- /dev/null +++ b/node_modules/minimist/package.json @@ -0,0 +1,75 @@ +{ + "name": "minimist", + "version": "1.2.8", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "@ljharb/eslint-config": "^21.0.1", + "aud": "^2.0.2", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.3" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/minimistjs/minimist.git" + }, + "homepage": "https://github.com/minimistjs/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js new file mode 100644 index 00000000..befa0c99 --- /dev/null +++ b/node_modules/minimist/test/all_bool.js @@ -0,0 +1,34 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js new file mode 100644 index 00000000..e58d47e4 --- /dev/null +++ b/node_modules/minimist/test/bool.js @@ -0,0 +1,177 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false }, + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse(['-x', '-z', 'one', 'two', 'three'], { + boolean: ['x', 'y', 'z'], + }); + + t.deepEqual(argv, { + x: true, + y: false, + z: true, + _: ['one', 'two', 'three'], + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var opts = { + alias: { h: 'herp' }, + boolean: 'herp', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var alt = ['--harp', 'derp']; + var opts = { + alias: { h: ['herp', 'harp'] }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = ['-h', 'true']; + var regular = ['--herp', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: [], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function (t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + _: ['true.txt'], + }; + + t.same(result, expected); + t.end(); +}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js new file mode 100644 index 00000000..70788177 --- /dev/null +++ b/node_modules/minimist/test/dash.js @@ -0,0 +1,43 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(6); + t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); + t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); + t.deepEqual(parse(['-']), { _: ['-'] }); + t.deepEqual(parse(['-f-']), { f: '-', _: [] }); + t.deepEqual( + parse(['-b', '-'], { boolean: 'b' }), + { b: true, _: ['-'] } + ); + t.deepEqual( + parse(['-s', '-'], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(2); + t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); + t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); +}); + +test('move arguments after the -- into their own `--` array', function (t) { + t.plan(1); + t.deepEqual( + parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), + { name: 'John', _: ['before'], '--': ['after'] } + ); +}); + +test('--- option value', function (t) { + // A multi-dash value is largely an edge case, but check the behaviour is as expected, + // and in particular the same for short option and long option (as made consistent in Jan 2023). + t.plan(2); + t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); + t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); +}); + diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js new file mode 100644 index 00000000..4e9f6250 --- /dev/null +++ b/node_modules/minimist/test/default_bool.js @@ -0,0 +1,37 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true }, + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false }, + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argv.maybe, null); + + var argvLong = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argvLong.maybe, true); + t.end(); +}); diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js new file mode 100644 index 00000000..126ff033 --- /dev/null +++ b/node_modules/minimist/test/dotted.js @@ -0,0 +1,24 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', { default: { 'a.b': 11 } }); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js new file mode 100644 index 00000000..6d1b53a7 --- /dev/null +++ b/node_modules/minimist/test/kv_short.js @@ -0,0 +1,32 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-b=123']); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-a=whatever', '-b=robots']); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); + +test('short with embedded equals -k=a=b', function (t) { + t.plan(1); + + var argv = parse(['-k=a=b']); + t.deepEqual(argv, { k: 'a=b', _: [] }); +}); + +test('short with later equals like -ab=c', function (t) { + t.plan(1); + + var argv = parse(['-ab=c']); + t.deepEqual(argv, { a: true, b: 'c', _: [] }); +}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js new file mode 100644 index 00000000..9fef51f1 --- /dev/null +++ b/node_modules/minimist/test/long.js @@ -0,0 +1,33 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse(['--bool']), + { bool: true, _: [] }, + 'long boolean' + ); + t.deepEqual( + parse(['--pow', 'xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture sp' + ); + t.deepEqual( + parse(['--pow=xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture eq' + ); + t.deepEqual( + parse(['--host', 'localhost', '--port', '555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures sp' + ); + t.deepEqual( + parse(['--host=localhost', '--port=555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js new file mode 100644 index 00000000..074393ec --- /dev/null +++ b/node_modules/minimist/test/num.js @@ -0,0 +1,38 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789', + ]); + t.deepEqual(argv, { + x: 1234, + y: 5.67, + z: 1e7, + w: '10f', + hex: 0xdeadbeef, + _: [789], + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse(['-x', 1234, 789]); + t.deepEqual(argv, { x: 1234, _: [789] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js new file mode 100644 index 00000000..65d9d909 --- /dev/null +++ b/node_modules/minimist/test/parse.js @@ -0,0 +1,209 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse(['--no-moo']), + { moo: false, _: [] }, + 'no' + ); + t.deepEqual( + parse(['-v', 'a', '-v', 'b', '-v', 'c']), + { v: ['a', 'b', 'c'], _: [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek', + ]), + { + c: true, + a: true, + t: true, + s: 'woo', + h: 'awesome', + b: true, + bool: true, + key: 'value', + multi: ['quux', 'baz'], + meep: false, + name: 'meowmers', + _: ['bare', '--not-a-flag', 'eek'], + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse(['-t', 'moo'], { boolean: 't' }); + t.deepEqual(argv, { t: true, _: ['moo'] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: ['t', 'verbose'], + default: { verbose: true }, + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params', function (t) { + var args = parse(['-s', 'X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse(['--s=X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + t.end(); +}); + +test('strings', function (t) { + var s = parse(['-s', '0001234'], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse(['-x', '56'], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([' ', ' '], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function (t) { + var s = parse(['-s'], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse(['--str'], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse(['-art'], { + string: ['a', 't'], + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + +test('string and alias', function (t) { + var x = parse(['--str', '000123'], { + string: 's', + alias: { s: 'str' }, + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse(['-s', '000123'], { + string: 'str', + alias: { str: 's' }, + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + + var z = parse(['-s123'], { + alias: { str: ['s', 'S'] }, + string: ['str'], + }); + + t.deepEqual( + z, + { _: [], s: '123', S: '123', str: '123' }, + 'opt.string works with multiple aliases' + ); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse(['-I/foo/bar/baz']), + { I: '/foo/bar/baz', _: [] } + ); + t.same( + parse(['-xyz/foo/bar/baz']), + { x: true, y: true, z: '/foo/bar/baz', _: [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: 'zoom' }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: ['zm', 'zoom'] }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop', + ]); + + t.same(argv.foo, { + bar: 3, + baz: 4, + quux: { + quibble: 5, + o_O: true, + }, + }); + t.same(argv.beep, { boop: true }); + t.end(); +}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js new file mode 100644 index 00000000..32965d13 --- /dev/null +++ b/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,11 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions', function (t) { + t.plan(1); + + var argv = parse(['-b', '123'], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/node_modules/minimist/test/proto.js b/node_modules/minimist/test/proto.js new file mode 100644 index 00000000..6e629dd3 --- /dev/null +++ b/node_modules/minimist/test/proto.js @@ -0,0 +1,64 @@ +'use strict'; + +/* eslint no-proto: 0 */ + +var parse = require('../'); +var test = require('tape'); + +test('proto pollution', function (t) { + var argv = parse(['--__proto__.x', '123']); + t.equal({}.x, undefined); + t.equal(argv.__proto__.x, undefined); + t.equal(argv.x, undefined); + t.end(); +}); + +test('proto pollution (array)', function (t) { + var argv = parse(['--x', '4', '--x', '5', '--x.__proto__.z', '789']); + t.equal({}.z, undefined); + t.deepEqual(argv.x, [4, 5]); + t.equal(argv.x.z, undefined); + t.equal(argv.x.__proto__.z, undefined); + t.end(); +}); + +test('proto pollution (number)', function (t) { + var argv = parse(['--x', '5', '--x.__proto__.z', '100']); + t.equal({}.z, undefined); + t.equal((4).z, undefined); + t.equal(argv.x, 5); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (string)', function (t) { + var argv = parse(['--x', 'abc', '--x.__proto__.z', 'def']); + t.equal({}.z, undefined); + t.equal('...'.z, undefined); + t.equal(argv.x, 'abc'); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (constructor)', function (t) { + var argv = parse(['--constructor.prototype.y', '123']); + t.equal({}.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +test('proto pollution (constructor function)', function (t) { + var argv = parse(['--_.concat.constructor.prototype.y', '123']); + function fnToBeTested() {} + t.equal(fnToBeTested.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +// powered by snyk - https://github.com/backstage/backstage/issues/10343 +test('proto pollution (constructor function) snyk', function (t) { + var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); + t.equal(function () {}.foo, undefined); + t.equal(argv.y, undefined); + t.end(); +}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js new file mode 100644 index 00000000..4a7b8438 --- /dev/null +++ b/node_modules/minimist/test/short.js @@ -0,0 +1,69 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse(['-n123']), { n: 123, _: [] }); + t.deepEqual( + parse(['-123', '456']), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse(['-b']), + { b: true, _: [] }, + 'short boolean' + ); + t.deepEqual( + parse(['foo', 'bar', 'baz']), + { _: ['foo', 'bar', 'baz'] }, + 'bare' + ); + t.deepEqual( + parse(['-cats']), + { c: true, a: true, t: true, s: true, _: [] }, + 'group' + ); + t.deepEqual( + parse(['-cats', 'meow']), + { c: true, a: true, t: true, s: 'meow', _: [] }, + 'short group next' + ); + t.deepEqual( + parse(['-h', 'localhost']), + { h: 'localhost', _: [] }, + 'short capture' + ); + t.deepEqual( + parse(['-h', 'localhost', '-p', '555']), + { h: 'localhost', p: 555, _: [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js new file mode 100644 index 00000000..52a6a919 --- /dev/null +++ b/node_modules/minimist/test/stop_early.js @@ -0,0 +1,17 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true, + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'], + }); + + t.end(); +}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js new file mode 100644 index 00000000..4f2e0ca4 --- /dev/null +++ b/node_modules/minimist/test/unknown.js @@ -0,0 +1,104 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'true', '--derp', 'true']; + var regular = ['--herp', 'true', '-d', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn, + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [], + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello', '--derp', 'goodbye']; + var regular = ['--herp', 'hello', '-d', 'moon']; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello']; + var regular = ['--herp', 'hello']; + var opts = { + default: { h: 'bar' }, + alias: { h: 'herp' }, + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['--bad', '--', 'good', 'arg']; + var opts = { + '--': true, + unknown: unknownFn, + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + _: [], + }); + t.end(); +}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js new file mode 100644 index 00000000..4fdaf1d3 --- /dev/null +++ b/node_modules/minimist/test/whitespace.js @@ -0,0 +1,10 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace', function (t) { + t.plan(1); + var x = parse(['-x', '\t']).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/minipass/LICENSE.md b/node_modules/minipass/LICENSE.md new file mode 100644 index 00000000..c5402b95 --- /dev/null +++ b/node_modules/minipass/LICENSE.md @@ -0,0 +1,55 @@ +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** diff --git a/node_modules/minipass/README.md b/node_modules/minipass/README.md new file mode 100644 index 00000000..11263305 --- /dev/null +++ b/node_modules/minipass/README.md @@ -0,0 +1,825 @@ +# minipass + +A _very_ minimal implementation of a [PassThrough +stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough) + +[It's very +fast](https://docs.google.com/spreadsheets/d/1K_HR5oh3r80b8WVMWCPPjfuWXUgfkmhlX7FGI6JJ8tY/edit?usp=sharing) +for objects, strings, and buffers. + +Supports `pipe()`ing (including multi-`pipe()` and backpressure +transmission), buffering data until either a `data` event handler +or `pipe()` is added (so you don't lose the first chunk), and +most other cases where PassThrough is a good idea. + +There is a `read()` method, but it's much more efficient to +consume data from this stream via `'data'` events or by calling +`pipe()` into some other stream. Calling `read()` requires the +buffer to be flattened in some cases, which requires copying +memory. + +If you set `objectMode: true` in the options, then whatever is +written will be emitted. Otherwise, it'll do a minimal amount of +Buffer copying to ensure proper Streams semantics when `read(n)` +is called. + +`objectMode` can only be set at instantiation. Attempting to +write something other than a String or Buffer without having set +`objectMode` in the options will throw an error. + +This is not a `through` or `through2` stream. It doesn't +transform the data, it just passes it right through. If you want +to transform the data, extend the class, and override the +`write()` method. Once you're done transforming the data however +you want, call `super.write()` with the transform output. + +For some examples of streams that extend Minipass in various +ways, check out: + +- [minizlib](http://npm.im/minizlib) +- [fs-minipass](http://npm.im/fs-minipass) +- [tar](http://npm.im/tar) +- [minipass-collect](http://npm.im/minipass-collect) +- [minipass-flush](http://npm.im/minipass-flush) +- [minipass-pipeline](http://npm.im/minipass-pipeline) +- [tap](http://npm.im/tap) +- [tap-parser](http://npm.im/tap-parser) +- [treport](http://npm.im/treport) +- [minipass-fetch](http://npm.im/minipass-fetch) +- [pacote](http://npm.im/pacote) +- [make-fetch-happen](http://npm.im/make-fetch-happen) +- [cacache](http://npm.im/cacache) +- [ssri](http://npm.im/ssri) +- [npm-registry-fetch](http://npm.im/npm-registry-fetch) +- [minipass-json-stream](http://npm.im/minipass-json-stream) +- [minipass-sized](http://npm.im/minipass-sized) + +## Usage in TypeScript + +The `Minipass` class takes three type template definitions: + +- `RType` the type being read, which defaults to `Buffer`. If + `RType` is `string`, then the constructor _must_ get an options + object specifying either an `encoding` or `objectMode: true`. + If it's anything other than `string` or `Buffer`, then it + _must_ get an options object specifying `objectMode: true`. +- `WType` the type being written. If `RType` is `Buffer` or + `string`, then this defaults to `ContiguousData` (Buffer, + string, ArrayBuffer, or ArrayBufferView). Otherwise, it + defaults to `RType`. +- `Events` type mapping event names to the arguments emitted + with that event, which extends `Minipass.Events`. + +To declare types for custom events in subclasses, extend the +third parameter with your own event signatures. For example: + +```js +import { Minipass } from 'minipass' + +// a NDJSON stream that emits 'jsonError' when it can't stringify +export interface Events extends Minipass.Events { + jsonError: [e: Error] +} + +export class NDJSONStream extends Minipass { + constructor() { + super({ objectMode: true }) + } + + // data is type `any` because that's WType + write(data, encoding, cb) { + try { + const json = JSON.stringify(data) + return super.write(json + '\n', encoding, cb) + } catch (er) { + if (!er instanceof Error) { + er = Object.assign(new Error('json stringify failed'), { + cause: er, + }) + } + // trying to emit with something OTHER than an error will + // fail, because we declared the event arguments type. + this.emit('jsonError', er) + } + } +} + +const s = new NDJSONStream() +s.on('jsonError', e => { + // here, TS knows that e is an Error +}) +``` + +Emitting/handling events that aren't declared in this way is +fine, but the arguments will be typed as `unknown`. + +## Differences from Node.js Streams + +There are several things that make Minipass streams different +from (and in some ways superior to) Node.js core streams. + +Please read these caveats if you are familiar with node-core +streams and intend to use Minipass streams in your programs. + +You can avoid most of these differences entirely (for a very +small performance penalty) by setting `{async: true}` in the +constructor options. + +### Timing + +Minipass streams are designed to support synchronous use-cases. +Thus, data is emitted as soon as it is available, always. It is +buffered until read, but no longer. Another way to look at it is +that Minipass streams are exactly as synchronous as the logic +that writes into them. + +This can be surprising if your code relies on +`PassThrough.write()` always providing data on the next tick +rather than the current one, or being able to call `resume()` and +not have the entire buffer disappear immediately. + +However, without this synchronicity guarantee, there would be no +way for Minipass to achieve the speeds it does, or support the +synchronous use cases that it does. Simply put, waiting takes +time. + +This non-deferring approach makes Minipass streams much easier to +reason about, especially in the context of Promises and other +flow-control mechanisms. + +Example: + +```js +// hybrid module, either works +import { Minipass } from 'minipass' +// or: +const { Minipass } = require('minipass') + +const stream = new Minipass() +stream.on('data', () => console.log('data event')) +console.log('before write') +stream.write('hello') +console.log('after write') +// output: +// before write +// data event +// after write +``` + +### Exception: Async Opt-In + +If you wish to have a Minipass stream with behavior that more +closely mimics Node.js core streams, you can set the stream in +async mode either by setting `async: true` in the constructor +options, or by setting `stream.async = true` later on. + +```js +// hybrid module, either works +import { Minipass } from 'minipass' +// or: +const { Minipass } = require('minipass') + +const asyncStream = new Minipass({ async: true }) +asyncStream.on('data', () => console.log('data event')) +console.log('before write') +asyncStream.write('hello') +console.log('after write') +// output: +// before write +// after write +// data event <-- this is deferred until the next tick +``` + +Switching _out_ of async mode is unsafe, as it could cause data +corruption, and so is not enabled. Example: + +```js +import { Minipass } from 'minipass' +const stream = new Minipass({ encoding: 'utf8' }) +stream.on('data', chunk => console.log(chunk)) +stream.async = true +console.log('before writes') +stream.write('hello') +setStreamSyncAgainSomehow(stream) // <-- this doesn't actually exist! +stream.write('world') +console.log('after writes') +// hypothetical output would be: +// before writes +// world +// after writes +// hello +// NOT GOOD! +``` + +To avoid this problem, once set into async mode, any attempt to +make the stream sync again will be ignored. + +```js +const { Minipass } = require('minipass') +const stream = new Minipass({ encoding: 'utf8' }) +stream.on('data', chunk => console.log(chunk)) +stream.async = true +console.log('before writes') +stream.write('hello') +stream.async = false // <-- no-op, stream already async +stream.write('world') +console.log('after writes') +// actual output: +// before writes +// after writes +// hello +// world +``` + +### No High/Low Water Marks + +Node.js core streams will optimistically fill up a buffer, +returning `true` on all writes until the limit is hit, even if +the data has nowhere to go. Then, they will not attempt to draw +more data in until the buffer size dips below a minimum value. + +Minipass streams are much simpler. The `write()` method will +return `true` if the data has somewhere to go (which is to say, +given the timing guarantees, that the data is already there by +the time `write()` returns). + +If the data has nowhere to go, then `write()` returns false, and +the data sits in a buffer, to be drained out immediately as soon +as anyone consumes it. + +Since nothing is ever buffered unnecessarily, there is much less +copying data, and less bookkeeping about buffer capacity levels. + +### Hazards of Buffering (or: Why Minipass Is So Fast) + +Since data written to a Minipass stream is immediately written +all the way through the pipeline, and `write()` always returns +true/false based on whether the data was fully flushed, +backpressure is communicated immediately to the upstream caller. +This minimizes buffering. + +Consider this case: + +```js +const { PassThrough } = require('stream') +const p1 = new PassThrough({ highWaterMark: 1024 }) +const p2 = new PassThrough({ highWaterMark: 1024 }) +const p3 = new PassThrough({ highWaterMark: 1024 }) +const p4 = new PassThrough({ highWaterMark: 1024 }) + +p1.pipe(p2).pipe(p3).pipe(p4) +p4.on('data', () => console.log('made it through')) + +// this returns false and buffers, then writes to p2 on next tick (1) +// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2) +// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3) +// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain' +// on next tick (4) +// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and +// 'drain' on next tick (5) +// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6) +// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next +// tick (7) + +p1.write(Buffer.alloc(2048)) // returns false +``` + +Along the way, the data was buffered and deferred at each stage, +and multiple event deferrals happened, for an unblocked pipeline +where it was perfectly safe to write all the way through! + +Furthermore, setting a `highWaterMark` of `1024` might lead +someone reading the code to think an advisory maximum of 1KiB is +being set for the pipeline. However, the actual advisory +buffering level is the _sum_ of `highWaterMark` values, since +each one has its own bucket. + +Consider the Minipass case: + +```js +const m1 = new Minipass() +const m2 = new Minipass() +const m3 = new Minipass() +const m4 = new Minipass() + +m1.pipe(m2).pipe(m3).pipe(m4) +m4.on('data', () => console.log('made it through')) + +// m1 is flowing, so it writes the data to m2 immediately +// m2 is flowing, so it writes the data to m3 immediately +// m3 is flowing, so it writes the data to m4 immediately +// m4 is flowing, so it fires the 'data' event immediately, returns true +// m4's write returned true, so m3 is still flowing, returns true +// m3's write returned true, so m2 is still flowing, returns true +// m2's write returned true, so m1 is still flowing, returns true +// No event deferrals or buffering along the way! + +m1.write(Buffer.alloc(2048)) // returns true +``` + +It is extremely unlikely that you _don't_ want to buffer any data +written, or _ever_ buffer data that can be flushed all the way +through. Neither node-core streams nor Minipass ever fail to +buffer written data, but node-core streams do a lot of +unnecessary buffering and pausing. + +As always, the faster implementation is the one that does less +stuff and waits less time to do it. + +### Immediately emit `end` for empty streams (when not paused) + +If a stream is not paused, and `end()` is called before writing +any data into it, then it will emit `end` immediately. + +If you have logic that occurs on the `end` event which you don't +want to potentially happen immediately (for example, closing file +descriptors, moving on to the next entry in an archive parse +stream, etc.) then be sure to call `stream.pause()` on creation, +and then `stream.resume()` once you are ready to respond to the +`end` event. + +However, this is _usually_ not a problem because: + +### Emit `end` When Asked + +One hazard of immediately emitting `'end'` is that you may not +yet have had a chance to add a listener. In order to avoid this +hazard, Minipass streams safely re-emit the `'end'` event if a +new listener is added after `'end'` has been emitted. + +Ie, if you do `stream.on('end', someFunction)`, and the stream +has already emitted `end`, then it will call the handler right +away. (You can think of this somewhat like attaching a new +`.then(fn)` to a previously-resolved Promise.) + +To prevent calling handlers multiple times who would not expect +multiple ends to occur, all listeners are removed from the +`'end'` event whenever it is emitted. + +### Emit `error` When Asked + +The most recent error object passed to the `'error'` event is +stored on the stream. If a new `'error'` event handler is added, +and an error was previously emitted, then the event handler will +be called immediately (or on `process.nextTick` in the case of +async streams). + +This makes it much more difficult to end up trying to interact +with a broken stream, if the error handler is added after an +error was previously emitted. + +### Impact of "immediate flow" on Tee-streams + +A "tee stream" is a stream piping to multiple destinations: + +```js +const tee = new Minipass() +t.pipe(dest1) +t.pipe(dest2) +t.write('foo') // goes to both destinations +``` + +Since Minipass streams _immediately_ process any pending data +through the pipeline when a new pipe destination is added, this +can have surprising effects, especially when a stream comes in +from some other function and may or may not have data in its +buffer. + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone +src.pipe(dest2) // gets nothing! +``` + +One solution is to create a dedicated tee-stream junction that +pipes to both locations, and then pipe to _that_ instead. + +```js +// Safe example: tee to both places +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.pipe(dest1) +tee.pipe(dest2) +src.pipe(tee) // tee gets 'foo', pipes to both locations +``` + +The same caveat applies to `on('data')` event listeners. The +first one added will _immediately_ receive all of the data, +leaving nothing for the second: + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.on('data', handler1) // receives 'foo' right away +src.on('data', handler2) // nothing to see here! +``` + +Using a dedicated tee-stream can be used in this case as well: + +```js +// Safe example: tee to both data handlers +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.on('data', handler1) +tee.on('data', handler2) +src.pipe(tee) +``` + +All of the hazards in this section are avoided by setting `{ +async: true }` in the Minipass constructor, or by setting +`stream.async = true` afterwards. Note that this does add some +overhead, so should only be done in cases where you are willing +to lose a bit of performance in order to avoid having to refactor +program logic. + +## USAGE + +It's a stream! Use it like a stream and it'll most likely do what +you want. + +```js +import { Minipass } from 'minipass' +const mp = new Minipass(options) // options is optional +mp.write('foo') +mp.pipe(someOtherStream) +mp.end('bar') +``` + +### OPTIONS + +- `encoding` How would you like the data coming _out_ of the + stream to be encoded? Accepts any values that can be passed to + `Buffer.toString()`. +- `objectMode` Emit data exactly as it comes in. This will be + flipped on by default if you write() something other than a + string or Buffer at any point. Setting `objectMode: true` will + prevent setting any encoding value. +- `async` Defaults to `false`. Set to `true` to defer data + emission until next tick. This reduces performance slightly, + but makes Minipass streams use timing behavior closer to Node + core streams. See [Timing](#timing) for more details. +- `signal` An `AbortSignal` that will cause the stream to unhook + itself from everything and become as inert as possible. Note + that providing a `signal` parameter will make `'error'` events + no longer throw if they are unhandled, but they will still be + emitted to handlers if any are attached. + +### API + +Implements the user-facing portions of Node.js's `Readable` and +`Writable` streams. + +### Methods + +- `write(chunk, [encoding], [callback])` - Put data in. (Note + that, in the base Minipass class, the same data will come out.) + Returns `false` if the stream will buffer the next write, or + true if it's still in "flowing" mode. +- `end([chunk, [encoding]], [callback])` - Signal that you have + no more data to write. This will queue an `end` event to be + fired when all the data has been consumed. +- `pause()` - No more data for a while, please. This also + prevents `end` from being emitted for empty streams until the + stream is resumed. +- `resume()` - Resume the stream. If there's data in the buffer, + it is all discarded. Any buffered events are immediately + emitted. +- `pipe(dest)` - Send all output to the stream provided. When + data is emitted, it is immediately written to any and all pipe + destinations. (Or written on next tick in `async` mode.) +- `unpipe(dest)` - Stop piping to the destination stream. This is + immediate, meaning that any asynchronously queued data will + _not_ make it to the destination when running in `async` mode. + - `options.end` - Boolean, end the destination stream when the + source stream ends. Default `true`. + - `options.proxyErrors` - Boolean, proxy `error` events from + the source stream to the destination stream. Note that errors + are _not_ proxied after the pipeline terminates, either due + to the source emitting `'end'` or manually unpiping with + `src.unpipe(dest)`. Default `false`. +- `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are + EventEmitters. Some events are given special treatment, + however. (See below under "events".) +- `promise()` - Returns a Promise that resolves when the stream + emits `end`, or rejects if the stream emits `error`. +- `collect()` - Return a Promise that resolves on `end` with an + array containing each chunk of data that was emitted, or + rejects if the stream emits `error`. Note that this consumes + the stream data. +- `concat()` - Same as `collect()`, but concatenates the data + into a single Buffer object. Will reject the returned promise + if the stream is in objectMode, or if it goes into objectMode + by the end of the data. +- `read(n)` - Consume `n` bytes of data out of the buffer. If `n` + is not provided, then consume all of it. If `n` bytes are not + available, then it returns null. **Note** consuming streams in + this way is less efficient, and can lead to unnecessary Buffer + copying. +- `destroy([er])` - Destroy the stream. If an error is provided, + then an `'error'` event is emitted. If the stream has a + `close()` method, and has not emitted a `'close'` event yet, + then `stream.close()` will be called. Any Promises returned by + `.promise()`, `.collect()` or `.concat()` will be rejected. + After being destroyed, writing to the stream will emit an + error. No more data will be emitted if the stream is destroyed, + even if it was previously buffered. + +### Properties + +- `bufferLength` Read-only. Total number of bytes buffered, or in + the case of objectMode, the total number of objects. +- `encoding` Read-only. The encoding that has been set. +- `flowing` Read-only. Boolean indicating whether a chunk written + to the stream will be immediately emitted. +- `emittedEnd` Read-only. Boolean indicating whether the end-ish + events (ie, `end`, `prefinish`, `finish`) have been emitted. + Note that listening on any end-ish event will immediateyl + re-emit it if it has already been emitted. +- `writable` Whether the stream is writable. Default `true`. Set + to `false` when `end()` +- `readable` Whether the stream is readable. Default `true`. +- `pipes` An array of Pipe objects referencing streams that this + stream is piping into. +- `destroyed` A getter that indicates whether the stream was + destroyed. +- `paused` True if the stream has been explicitly paused, + otherwise false. +- `objectMode` Indicates whether the stream is in `objectMode`. +- `aborted` Readonly property set when the `AbortSignal` + dispatches an `abort` event. + +### Events + +- `data` Emitted when there's data to read. Argument is the data + to read. This is never emitted while not flowing. If a listener + is attached, that will resume the stream. +- `end` Emitted when there's no more data to read. This will be + emitted immediately for empty streams when `end()` is called. + If a listener is attached, and `end` was already emitted, then + it will be emitted again. All listeners are removed when `end` + is emitted. +- `prefinish` An end-ish event that follows the same logic as + `end` and is emitted in the same conditions where `end` is + emitted. Emitted after `'end'`. +- `finish` An end-ish event that follows the same logic as `end` + and is emitted in the same conditions where `end` is emitted. + Emitted after `'prefinish'`. +- `close` An indication that an underlying resource has been + released. Minipass does not emit this event, but will defer it + until after `end` has been emitted, since it throws off some + stream libraries otherwise. +- `drain` Emitted when the internal buffer empties, and it is + again suitable to `write()` into the stream. +- `readable` Emitted when data is buffered and ready to be read + by a consumer. +- `resume` Emitted when stream changes state from buffering to + flowing mode. (Ie, when `resume` is called, `pipe` is called, + or a `data` event listener is added.) + +### Static Methods + +- `Minipass.isStream(stream)` Returns `true` if the argument is a + stream, and false otherwise. To be considered a stream, the + object must be either an instance of Minipass, or an + EventEmitter that has either a `pipe()` method, or both + `write()` and `end()` methods. (Pretty much any stream in + node-land will return `true` for this.) + +## EXAMPLES + +Here are some examples of things you can do with Minipass +streams. + +### simple "are you done yet" promise + +```js +mp.promise().then( + () => { + // stream is finished + }, + er => { + // stream emitted an error + } +) +``` + +### collecting + +```js +mp.collect().then(all => { + // all is an array of all the data emitted + // encoding is supported in this case, so + // so the result will be a collection of strings if + // an encoding is specified, or buffers/objects if not. + // + // In an async function, you may do + // const data = await stream.collect() +}) +``` + +### collecting into a single blob + +This is a bit slower because it concatenates the data into one +chunk for you, but if you're going to do it yourself anyway, it's +convenient this way: + +```js +mp.concat().then(onebigchunk => { + // onebigchunk is a string if the stream + // had an encoding set, or a buffer otherwise. +}) +``` + +### iteration + +You can iterate over streams synchronously or asynchronously in +platforms that support it. + +Synchronous iteration will end when the currently available data +is consumed, even if the `end` event has not been reached. In +string and buffer mode, the data is concatenated, so unless +multiple writes are occurring in the same tick as the `read()`, +sync iteration loops will generally only have a single iteration. + +To consume chunks in this way exactly as they have been written, +with no flattening, create the stream with the `{ objectMode: +true }` option. + +```js +const mp = new Minipass({ objectMode: true }) +mp.write('a') +mp.write('b') +for (let letter of mp) { + console.log(letter) // a, b +} +mp.write('c') +mp.write('d') +for (let letter of mp) { + console.log(letter) // c, d +} +mp.write('e') +mp.end() +for (let letter of mp) { + console.log(letter) // e +} +for (let letter of mp) { + console.log(letter) // nothing +} +``` + +Asynchronous iteration will continue until the end event is reached, +consuming all of the data. + +```js +const mp = new Minipass({ encoding: 'utf8' }) + +// some source of some data +let i = 5 +const inter = setInterval(() => { + if (i-- > 0) mp.write(Buffer.from('foo\n', 'utf8')) + else { + mp.end() + clearInterval(inter) + } +}, 100) + +// consume the data with asynchronous iteration +async function consume() { + for await (let chunk of mp) { + console.log(chunk) + } + return 'ok' +} + +consume().then(res => console.log(res)) +// logs `foo\n` 5 times, and then `ok` +``` + +### subclass that `console.log()`s everything written into it + +```js +class Logger extends Minipass { + write(chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end(chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } +} + +someSource.pipe(new Logger()).pipe(someDest) +``` + +### same thing, but using an inline anonymous class + +```js +// js classes are fun +someSource + .pipe( + new (class extends Minipass { + emit(ev, ...data) { + // let's also log events, because debugging some weird thing + console.log('EMIT', ev) + return super.emit(ev, ...data) + } + write(chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end(chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } + })() + ) + .pipe(someDest) +``` + +### subclass that defers 'end' for some reason + +```js +class SlowEnd extends Minipass { + emit(ev, ...args) { + if (ev === 'end') { + console.log('going to end, hold on a sec') + setTimeout(() => { + console.log('ok, ready to end now') + super.emit('end', ...args) + }, 100) + return true + } else { + return super.emit(ev, ...args) + } + } +} +``` + +### transform that creates newline-delimited JSON + +```js +class NDJSONEncode extends Minipass { + write(obj, cb) { + try { + // JSON.stringify can throw, emit an error on that + return super.write(JSON.stringify(obj) + '\n', 'utf8', cb) + } catch (er) { + this.emit('error', er) + } + } + end(obj, cb) { + if (typeof obj === 'function') { + cb = obj + obj = undefined + } + if (obj !== undefined) { + this.write(obj) + } + return super.end(cb) + } +} +``` + +### transform that parses newline-delimited JSON + +```js +class NDJSONDecode extends Minipass { + constructor(options) { + // always be in object mode, as far as Minipass is concerned + super({ objectMode: true }) + this._jsonBuffer = '' + } + write(chunk, encoding, cb) { + if ( + typeof chunk === 'string' && + typeof encoding === 'string' && + encoding !== 'utf8' + ) { + chunk = Buffer.from(chunk, encoding).toString() + } else if (Buffer.isBuffer(chunk)) { + chunk = chunk.toString() + } + if (typeof encoding === 'function') { + cb = encoding + } + const jsonData = (this._jsonBuffer + chunk).split('\n') + this._jsonBuffer = jsonData.pop() + for (let i = 0; i < jsonData.length; i++) { + try { + // JSON.parse can throw, emit an error on that + super.write(JSON.parse(jsonData[i])) + } catch (er) { + this.emit('error', er) + continue + } + } + if (cb) cb() + } +} +``` diff --git a/node_modules/minipass/dist/commonjs/index.d.ts b/node_modules/minipass/dist/commonjs/index.d.ts new file mode 100644 index 00000000..3e75b578 --- /dev/null +++ b/node_modules/minipass/dist/commonjs/index.d.ts @@ -0,0 +1,545 @@ +import { EventEmitter } from 'node:events'; +import { StringDecoder } from 'node:string_decoder'; +/** + * Same as StringDecoder, but exposing the `lastNeed` flag on the type + */ +type SD = StringDecoder & { + lastNeed: boolean; +}; +export type { SD, Pipe, PipeProxyErrors }; +/** + * Return true if the argument is a Minipass stream, Node stream, or something + * else that Minipass can interact with. + */ +export declare const isStream: (s: any) => s is Minipass | NodeJS.ReadStream | NodeJS.WriteStream | (EventEmitter & { + end(): any; + write(chunk: any, ...args: any[]): any; +}) | (EventEmitter & { + pause(): any; + resume(): any; + pipe(...destArgs: any[]): any; +}) | (NodeJS.ReadStream & { + fd: number; +}) | (NodeJS.WriteStream & { + fd: number; +}); +/** + * Return true if the argument is a valid {@link Minipass.Readable} + */ +export declare const isReadable: (s: any) => s is Minipass.Readable; +/** + * Return true if the argument is a valid {@link Minipass.Writable} + */ +export declare const isWritable: (s: any) => s is Minipass.Readable; +declare const EOF: unique symbol; +declare const MAYBE_EMIT_END: unique symbol; +declare const EMITTED_END: unique symbol; +declare const EMITTING_END: unique symbol; +declare const EMITTED_ERROR: unique symbol; +declare const CLOSED: unique symbol; +declare const READ: unique symbol; +declare const FLUSH: unique symbol; +declare const FLUSHCHUNK: unique symbol; +declare const ENCODING: unique symbol; +declare const DECODER: unique symbol; +declare const FLOWING: unique symbol; +declare const PAUSED: unique symbol; +declare const RESUME: unique symbol; +declare const BUFFER: unique symbol; +declare const PIPES: unique symbol; +declare const BUFFERLENGTH: unique symbol; +declare const BUFFERPUSH: unique symbol; +declare const BUFFERSHIFT: unique symbol; +declare const OBJECTMODE: unique symbol; +declare const DESTROYED: unique symbol; +declare const ERROR: unique symbol; +declare const EMITDATA: unique symbol; +declare const EMITEND: unique symbol; +declare const EMITEND2: unique symbol; +declare const ASYNC: unique symbol; +declare const ABORT: unique symbol; +declare const ABORTED: unique symbol; +declare const SIGNAL: unique symbol; +declare const DATALISTENERS: unique symbol; +declare const DISCARDED: unique symbol; +/** + * Options that may be passed to stream.pipe() + */ +export interface PipeOptions { + /** + * end the destination stream when the source stream ends + */ + end?: boolean; + /** + * proxy errors from the source stream to the destination stream + */ + proxyErrors?: boolean; +} +/** + * Internal class representing a pipe to a destination stream. + * + * @internal + */ +declare class Pipe { + src: Minipass; + dest: Minipass; + opts: PipeOptions; + ondrain: () => any; + constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions); + unpipe(): void; + proxyErrors(_er: any): void; + end(): void; +} +/** + * Internal class representing a pipe to a destination stream where + * errors are proxied. + * + * @internal + */ +declare class PipeProxyErrors extends Pipe { + unpipe(): void; + constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions); +} +export declare namespace Minipass { + /** + * Encoding used to create a stream that outputs strings rather than + * Buffer objects. + */ + export type Encoding = BufferEncoding | 'buffer' | null; + /** + * Any stream that Minipass can pipe into + */ + export type Writable = Minipass | NodeJS.WriteStream | (NodeJS.WriteStream & { + fd: number; + }) | (EventEmitter & { + end(): any; + write(chunk: any, ...args: any[]): any; + }); + /** + * Any stream that can be read from + */ + export type Readable = Minipass | NodeJS.ReadStream | (NodeJS.ReadStream & { + fd: number; + }) | (EventEmitter & { + pause(): any; + resume(): any; + pipe(...destArgs: any[]): any; + }); + /** + * Utility type that can be iterated sync or async + */ + export type DualIterable = Iterable & AsyncIterable; + type EventArguments = Record; + /** + * The listing of events that a Minipass class can emit. + * Extend this when extending the Minipass class, and pass as + * the third template argument. The key is the name of the event, + * and the value is the argument list. + * + * Any undeclared events will still be allowed, but the handler will get + * arguments as `unknown[]`. + */ + export interface Events extends EventArguments { + readable: []; + data: [chunk: RType]; + error: [er: unknown]; + abort: [reason: unknown]; + drain: []; + resume: []; + end: []; + finish: []; + prefinish: []; + close: []; + [DESTROYED]: [er?: unknown]; + [ERROR]: [er: unknown]; + } + /** + * String or buffer-like data that can be joined and sliced + */ + export type ContiguousData = Buffer | ArrayBufferLike | ArrayBufferView | string; + export type BufferOrString = Buffer | string; + /** + * Options passed to the Minipass constructor. + */ + export type SharedOptions = { + /** + * Defer all data emission and other events until the end of the + * current tick, similar to Node core streams + */ + async?: boolean; + /** + * A signal which will abort the stream + */ + signal?: AbortSignal; + /** + * Output string encoding. Set to `null` or `'buffer'` (or omit) to + * emit Buffer objects rather than strings. + * + * Conflicts with `objectMode` + */ + encoding?: BufferEncoding | null | 'buffer'; + /** + * Output data exactly as it was written, supporting non-buffer/string + * data (such as arbitrary objects, falsey values, etc.) + * + * Conflicts with `encoding` + */ + objectMode?: boolean; + }; + /** + * Options for a string encoded output + */ + export type EncodingOptions = SharedOptions & { + encoding: BufferEncoding; + objectMode?: false; + }; + /** + * Options for contiguous data buffer output + */ + export type BufferOptions = SharedOptions & { + encoding?: null | 'buffer'; + objectMode?: false; + }; + /** + * Options for objectMode arbitrary output + */ + export type ObjectModeOptions = SharedOptions & { + objectMode: true; + encoding?: null; + }; + /** + * Utility type to determine allowed options based on read type + */ + export type Options = ObjectModeOptions | (T extends string ? EncodingOptions : T extends Buffer ? BufferOptions : SharedOptions); + export {}; +} +/** + * Main export, the Minipass class + * + * `RType` is the type of data emitted, defaults to Buffer + * + * `WType` is the type of data to be written, if RType is buffer or string, + * then any {@link Minipass.ContiguousData} is allowed. + * + * `Events` is the set of event handler signatures that this object + * will emit, see {@link Minipass.Events} + */ +export declare class Minipass = Minipass.Events> extends EventEmitter implements Minipass.DualIterable { + [FLOWING]: boolean; + [PAUSED]: boolean; + [PIPES]: Pipe[]; + [BUFFER]: RType[]; + [OBJECTMODE]: boolean; + [ENCODING]: BufferEncoding | null; + [ASYNC]: boolean; + [DECODER]: SD | null; + [EOF]: boolean; + [EMITTED_END]: boolean; + [EMITTING_END]: boolean; + [CLOSED]: boolean; + [EMITTED_ERROR]: unknown; + [BUFFERLENGTH]: number; + [DESTROYED]: boolean; + [SIGNAL]?: AbortSignal; + [ABORTED]: boolean; + [DATALISTENERS]: number; + [DISCARDED]: boolean; + /** + * true if the stream can be written + */ + writable: boolean; + /** + * true if the stream can be read + */ + readable: boolean; + /** + * If `RType` is Buffer, then options do not need to be provided. + * Otherwise, an options object must be provided to specify either + * {@link Minipass.SharedOptions.objectMode} or + * {@link Minipass.SharedOptions.encoding}, as appropriate. + */ + constructor(...args: [Minipass.ObjectModeOptions] | (RType extends Buffer ? [] | [Minipass.Options] : [Minipass.Options])); + /** + * The amount of data stored in the buffer waiting to be read. + * + * For Buffer strings, this will be the total byte length. + * For string encoding streams, this will be the string character length, + * according to JavaScript's `string.length` logic. + * For objectMode streams, this is a count of the items waiting to be + * emitted. + */ + get bufferLength(): number; + /** + * The `BufferEncoding` currently in use, or `null` + */ + get encoding(): BufferEncoding | null; + /** + * @deprecated - This is a read only property + */ + set encoding(_enc: BufferEncoding | null); + /** + * @deprecated - Encoding may only be set at instantiation time + */ + setEncoding(_enc: Minipass.Encoding): void; + /** + * True if this is an objectMode stream + */ + get objectMode(): boolean; + /** + * @deprecated - This is a read-only property + */ + set objectMode(_om: boolean); + /** + * true if this is an async stream + */ + get ['async'](): boolean; + /** + * Set to true to make this stream async. + * + * Once set, it cannot be unset, as this would potentially cause incorrect + * behavior. Ie, a sync stream can be made async, but an async stream + * cannot be safely made sync. + */ + set ['async'](a: boolean); + [ABORT](): void; + /** + * True if the stream has been aborted. + */ + get aborted(): boolean; + /** + * No-op setter. Stream aborted status is set via the AbortSignal provided + * in the constructor options. + */ + set aborted(_: boolean); + /** + * Write data into the stream + * + * If the chunk written is a string, and encoding is not specified, then + * `utf8` will be assumed. If the stream encoding matches the encoding of + * a written string, and the state of the string decoder allows it, then + * the string will be passed through to either the output or the internal + * buffer without any processing. Otherwise, it will be turned into a + * Buffer object for processing into the desired encoding. + * + * If provided, `cb` function is called immediately before return for + * sync streams, or on next tick for async streams, because for this + * base class, a chunk is considered "processed" once it is accepted + * and either emitted or buffered. That is, the callback does not indicate + * that the chunk has been eventually emitted, though of course child + * classes can override this function to do whatever processing is required + * and call `super.write(...)` only once processing is completed. + */ + write(chunk: WType, cb?: () => void): boolean; + write(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): boolean; + /** + * Low-level explicit read method. + * + * In objectMode, the argument is ignored, and one item is returned if + * available. + * + * `n` is the number of bytes (or in the case of encoding streams, + * characters) to consume. If `n` is not provided, then the entire buffer + * is returned, or `null` is returned if no data is available. + * + * If `n` is greater that the amount of data in the internal buffer, + * then `null` is returned. + */ + read(n?: number | null): RType | null; + [READ](n: number | null, chunk: RType): RType; + /** + * End the stream, optionally providing a final write. + * + * See {@link Minipass#write} for argument descriptions + */ + end(cb?: () => void): this; + end(chunk: WType, cb?: () => void): this; + end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this; + [RESUME](): void; + /** + * Resume the stream if it is currently in a paused state + * + * If called when there are no pipe destinations or `data` event listeners, + * this will place the stream in a "discarded" state, where all data will + * be thrown away. The discarded state is removed if a pipe destination or + * data handler is added, if pause() is called, or if any synchronous or + * asynchronous iteration is started. + */ + resume(): void; + /** + * Pause the stream + */ + pause(): void; + /** + * true if the stream has been forcibly destroyed + */ + get destroyed(): boolean; + /** + * true if the stream is currently in a flowing state, meaning that + * any writes will be immediately emitted. + */ + get flowing(): boolean; + /** + * true if the stream is currently in a paused state + */ + get paused(): boolean; + [BUFFERPUSH](chunk: RType): void; + [BUFFERSHIFT](): RType; + [FLUSH](noDrain?: boolean): void; + [FLUSHCHUNK](chunk: RType): boolean; + /** + * Pipe all data emitted by this stream into the destination provided. + * + * Triggers the flow of data. + */ + pipe(dest: W, opts?: PipeOptions): W; + /** + * Fully unhook a piped destination stream. + * + * If the destination stream was the only consumer of this stream (ie, + * there are no other piped destinations or `'data'` event listeners) + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + unpipe(dest: W): void; + /** + * Alias for {@link Minipass#on} + */ + addListener(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Mostly identical to `EventEmitter.on`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * - Adding a 'data' event handler will trigger the flow of data + * + * - Adding a 'readable' event handler when there is data waiting to be read + * will cause 'readable' to be emitted immediately. + * + * - Adding an 'endish' event handler ('end', 'finish', etc.) which has + * already passed will cause the event to be emitted immediately and all + * handlers removed. + * + * - Adding an 'error' event handler after an error has been emitted will + * cause the event to be re-emitted immediately with the error previously + * raised. + */ + on(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Alias for {@link Minipass#off} + */ + removeListener(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Mostly identical to `EventEmitter.off` + * + * If a 'data' event handler is removed, and it was the last consumer + * (ie, there are no pipe destinations or other 'data' event listeners), + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + off(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Mostly identical to `EventEmitter.removeAllListeners` + * + * If all 'data' event handlers are removed, and they were the last consumer + * (ie, there are no pipe destinations), then the flow of data will stop + * until there is another consumer or {@link Minipass#resume} is explicitly + * called. + */ + removeAllListeners(ev?: Event): this; + /** + * true if the 'end' event has been emitted + */ + get emittedEnd(): boolean; + [MAYBE_EMIT_END](): void; + /** + * Mostly identical to `EventEmitter.emit`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * If the stream has been destroyed, and the event is something other + * than 'close' or 'error', then `false` is returned and no handlers + * are called. + * + * If the event is 'end', and has already been emitted, then the event + * is ignored. If the stream is in a paused or non-flowing state, then + * the event will be deferred until data flow resumes. If the stream is + * async, then handlers will be called on the next tick rather than + * immediately. + * + * If the event is 'close', and 'end' has not yet been emitted, then + * the event will be deferred until after 'end' is emitted. + * + * If the event is 'error', and an AbortSignal was provided for the stream, + * and there are no listeners, then the event is ignored, matching the + * behavior of node core streams in the presense of an AbortSignal. + * + * If the event is 'finish' or 'prefinish', then all listeners will be + * removed after emitting the event, to prevent double-firing. + */ + emit(ev: Event, ...args: Events[Event]): boolean; + [EMITDATA](data: RType): boolean; + [EMITEND](): boolean; + [EMITEND2](): boolean; + /** + * Return a Promise that resolves to an array of all emitted data once + * the stream ends. + */ + collect(): Promise; + /** + * Return a Promise that resolves to the concatenation of all emitted data + * once the stream ends. + * + * Not allowed on objectMode streams. + */ + concat(): Promise; + /** + * Return a void Promise that resolves once the stream ends. + */ + promise(): Promise; + /** + * Asynchronous `for await of` iteration. + * + * This will continue emitting all chunks until the stream terminates. + */ + [Symbol.asyncIterator](): AsyncGenerator; + /** + * Synchronous `for of` iteration. + * + * The iteration will terminate when the internal buffer runs out, even + * if the stream has not yet terminated. + */ + [Symbol.iterator](): Generator; + /** + * Destroy a stream, preventing it from being used for any further purpose. + * + * If the stream has a `close()` method, then it will be called on + * destruction. + * + * After destruction, any attempt to write data, read data, or emit most + * events will be ignored. + * + * If an error argument is provided, then it will be emitted in an + * 'error' event. + */ + destroy(er?: unknown): this; + /** + * Alias for {@link isStream} + * + * Former export location, maintained for backwards compatibility. + * + * @deprecated + */ + static get isStream(): (s: any) => s is Minipass | NodeJS.ReadStream | NodeJS.WriteStream | (EventEmitter & { + end(): any; + write(chunk: any, ...args: any[]): any; + }) | (EventEmitter & { + pause(): any; + resume(): any; + pipe(...destArgs: any[]): any; + }) | (NodeJS.ReadStream & { + fd: number; + }) | (NodeJS.WriteStream & { + fd: number; + }); +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/minipass/dist/commonjs/index.d.ts.map b/node_modules/minipass/dist/commonjs/index.d.ts.map new file mode 100644 index 00000000..7bce611b --- /dev/null +++ b/node_modules/minipass/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const proc =\n typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n s: any\n): s is Minipass.Readable | Minipass.Writable =>\n !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Readable).pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Writable).write === 'function' &&\n typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n /**\n * end the destination stream when the source stream ends\n */\n end?: boolean\n /**\n * proxy errors from the source stream to the destination stream\n */\n proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src: Minipass\n dest: Minipass\n opts: PipeOptions\n ondrain: () => any\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n this.src = src\n this.dest = dest as Minipass\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n this.dest.on('drain', this.ondrain)\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain)\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er: any) {}\n /* c8 ignore stop */\n end() {\n this.unpipe()\n if (this.opts.end) this.dest.end()\n }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n super(src, dest, opts)\n this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nexport namespace Minipass {\n /**\n * Encoding used to create a stream that outputs strings rather than\n * Buffer objects.\n */\n export type Encoding = BufferEncoding | 'buffer' | null\n\n /**\n * Any stream that Minipass can pipe into\n */\n export type Writable =\n | Minipass\n | NodeJS.WriteStream\n | (NodeJS.WriteStream & { fd: number })\n | (EventEmitter & {\n end(): any\n write(chunk: any, ...args: any[]): any\n })\n\n /**\n * Any stream that can be read from\n */\n export type Readable =\n | Minipass\n | NodeJS.ReadStream\n | (NodeJS.ReadStream & { fd: number })\n | (EventEmitter & {\n pause(): any\n resume(): any\n pipe(...destArgs: any[]): any\n })\n\n /**\n * Utility type that can be iterated sync or async\n */\n export type DualIterable = Iterable & AsyncIterable\n\n type EventArguments = Record\n\n /**\n * The listing of events that a Minipass class can emit.\n * Extend this when extending the Minipass class, and pass as\n * the third template argument. The key is the name of the event,\n * and the value is the argument list.\n *\n * Any undeclared events will still be allowed, but the handler will get\n * arguments as `unknown[]`.\n */\n export interface Events\n extends EventArguments {\n readable: []\n data: [chunk: RType]\n error: [er: unknown]\n abort: [reason: unknown]\n drain: []\n resume: []\n end: []\n finish: []\n prefinish: []\n close: []\n [DESTROYED]: [er?: unknown]\n [ERROR]: [er: unknown]\n }\n\n /**\n * String or buffer-like data that can be joined and sliced\n */\n export type ContiguousData =\n | Buffer\n | ArrayBufferLike\n | ArrayBufferView\n | string\n export type BufferOrString = Buffer | string\n\n /**\n * Options passed to the Minipass constructor.\n */\n export type SharedOptions = {\n /**\n * Defer all data emission and other events until the end of the\n * current tick, similar to Node core streams\n */\n async?: boolean\n /**\n * A signal which will abort the stream\n */\n signal?: AbortSignal\n /**\n * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n * emit Buffer objects rather than strings.\n *\n * Conflicts with `objectMode`\n */\n encoding?: BufferEncoding | null | 'buffer'\n /**\n * Output data exactly as it was written, supporting non-buffer/string\n * data (such as arbitrary objects, falsey values, etc.)\n *\n * Conflicts with `encoding`\n */\n objectMode?: boolean\n }\n\n /**\n * Options for a string encoded output\n */\n export type EncodingOptions = SharedOptions & {\n encoding: BufferEncoding\n objectMode?: false\n }\n\n /**\n * Options for contiguous data buffer output\n */\n export type BufferOptions = SharedOptions & {\n encoding?: null | 'buffer'\n objectMode?: false\n }\n\n /**\n * Options for objectMode arbitrary output\n */\n export type ObjectModeOptions = SharedOptions & {\n objectMode: true\n encoding?: null\n }\n\n /**\n * Utility type to determine allowed options based on read type\n */\n export type Options =\n | ObjectModeOptions\n | (T extends string\n ? EncodingOptions\n : T extends Buffer\n ? BufferOptions\n : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n RType extends unknown = Buffer,\n WType extends unknown = RType extends Minipass.BufferOrString\n ? Minipass.ContiguousData\n : RType,\n Events extends Minipass.Events = Minipass.Events\n >\n extends EventEmitter\n implements Minipass.DualIterable\n{\n [FLOWING]: boolean = false;\n [PAUSED]: boolean = false;\n [PIPES]: Pipe[] = [];\n [BUFFER]: RType[] = [];\n [OBJECTMODE]: boolean;\n [ENCODING]: BufferEncoding | null;\n [ASYNC]: boolean;\n [DECODER]: SD | null;\n [EOF]: boolean = false;\n [EMITTED_END]: boolean = false;\n [EMITTING_END]: boolean = false;\n [CLOSED]: boolean = false;\n [EMITTED_ERROR]: unknown = null;\n [BUFFERLENGTH]: number = 0;\n [DESTROYED]: boolean = false;\n [SIGNAL]?: AbortSignal;\n [ABORTED]: boolean = false;\n [DATALISTENERS]: number = 0;\n [DISCARDED]: boolean = false\n\n /**\n * true if the stream can be written\n */\n writable: boolean = true\n /**\n * true if the stream can be read\n */\n readable: boolean = true\n\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(\n ...args:\n | [Minipass.ObjectModeOptions]\n | (RType extends Buffer\n ? [] | [Minipass.Options]\n : [Minipass.Options])\n ) {\n const options: Minipass.Options = (args[0] ||\n {}) as Minipass.Options\n super()\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError(\n 'Encoding and objectMode may not be used together'\n )\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true\n this[ENCODING] = null\n } else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding\n this[OBJECTMODE] = false\n } else {\n this[OBJECTMODE] = false\n this[ENCODING] = null\n }\n this[ASYNC] = !!options.async\n this[DECODER] = this[ENCODING]\n ? (new StringDecoder(this[ENCODING]) as SD)\n : null\n\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n }\n\n const { signal } = options\n if (signal) {\n this[SIGNAL] = signal\n if (signal.aborted) {\n this[ABORT]()\n } else {\n signal.addEventListener('abort', () => this[ABORT]())\n }\n }\n }\n\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH]\n }\n\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING]\n }\n\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc: Minipass.Encoding) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE]\n }\n\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time')\n }\n\n /**\n * true if this is an async stream\n */\n get ['async'](): boolean {\n return this[ASYNC]\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a: boolean) {\n this[ASYNC] = this[ASYNC] || !!a\n }\n\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true\n this.emit('abort', this[SIGNAL]?.reason)\n this.destroy(this[SIGNAL]?.reason)\n }\n\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED]\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) {}\n\n /**\n * Write data into the stream\n *\n * If the chunk written is a string, and encoding is not specified, then\n * `utf8` will be assumed. If the stream encoding matches the encoding of\n * a written string, and the state of the string decoder allows it, then\n * the string will be passed through to either the output or the internal\n * buffer without any processing. Otherwise, it will be turned into a\n * Buffer object for processing into the desired encoding.\n *\n * If provided, `cb` function is called immediately before return for\n * sync streams, or on next tick for async streams, because for this\n * base class, a chunk is considered \"processed\" once it is accepted\n * and either emitted or buffered. That is, the callback does not indicate\n * that the chunk has been eventually emitted, though of course child\n * classes can override this function to do whatever processing is required\n * and call `super.write(...)` only once processing is completed.\n */\n write(chunk: WType, cb?: () => void): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding,\n cb?: () => void\n ): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): boolean {\n if (this[ABORTED]) return false\n if (this[EOF]) throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit(\n 'error',\n Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n )\n )\n return true\n }\n\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n\n if (!encoding) encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : nodefer\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(\n chunk.buffer,\n chunk.byteOffset,\n chunk.byteLength\n )\n } else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk)\n } else if (typeof chunk !== 'string') {\n throw new Error(\n 'Non-contiguous data written to non-objectMode stream'\n )\n }\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n /* c8 ignore stop */\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!(chunk as Minipass.BufferOrString).length) {\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n if (cb) fn(cb)\n return this[FLOWING]\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (\n typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n ) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk)\n }\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n?: number | null): RType | null {\n if (this[DESTROYED]) return null\n this[DISCARDED] = false\n\n if (\n this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])\n ) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE]) n = null\n\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(\n this[BUFFER] as Buffer[],\n this[BUFFERLENGTH]\n )) as RType,\n ]\n }\n\n const ret = this[READ](n || null, this[BUFFER][0] as RType)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ](n: number | null, chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n else {\n const c = chunk as Minipass.BufferOrString\n if (n === c.length || n === null) this[BUFFERSHIFT]()\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n) as RType\n chunk = c.slice(0, n) as RType\n this[BUFFERLENGTH] -= n\n } else {\n this[BUFFER][0] = c.subarray(n) as RType\n chunk = c.subarray(0, n) as RType\n this[BUFFERLENGTH] -= n\n }\n }\n\n this.emit('data', chunk)\n\n if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n return chunk\n }\n\n /**\n * End the stream, optionally providing a final write.\n *\n * See {@link Minipass#write} for argument descriptions\n */\n end(cb?: () => void): this\n end(chunk: WType, cb?: () => void): this\n end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n end(\n chunk?: WType | (() => void),\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): this {\n if (typeof chunk === 'function') {\n cb = chunk as () => void\n chunk = undefined\n }\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n if (chunk !== undefined) this.write(chunk, encoding)\n if (cb) this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED]) return\n\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true\n }\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this[BUFFER].length) this[FLUSH]()\n else if (this[EOF]) this[MAYBE_EMIT_END]()\n else this.emit('drain')\n }\n\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]()\n }\n\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false\n this[PAUSED] = true\n this[DISCARDED] = false\n }\n\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED]\n }\n\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING]\n }\n\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED]\n }\n\n [BUFFERPUSH](chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n this[BUFFER].push(chunk)\n }\n\n [BUFFERSHIFT](): RType {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= (\n this[BUFFER][0] as Minipass.BufferOrString\n ).length\n return this[BUFFER].shift() as RType\n }\n\n [FLUSH](noDrain: boolean = false) {\n do {} while (\n this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length\n )\n\n if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n }\n\n [FLUSHCHUNK](chunk: RType) {\n this.emit('data', chunk)\n return this[FLOWING]\n }\n\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest: W, opts?: PipeOptions): W {\n if (this[DESTROYED]) return dest\n this[DISCARDED] = false\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n else opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end) dest.end()\n } else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(\n !opts.proxyErrors\n ? new Pipe(this as Minipass, dest, opts)\n : new PipeProxyErrors(this as Minipass, dest, opts)\n )\n if (this[ASYNC]) defer(() => this[RESUME]())\n else this[RESUME]()\n }\n\n return dest\n }\n\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest: W) {\n const p = this[PIPES].find(p => p.dest === dest)\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false\n }\n this[PIPES] = []\n } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n p.unpipe()\n }\n }\n\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n return this.on(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n const ret = super.on(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n if (ev === 'data') {\n this[DISCARDED] = false\n this[DATALISTENERS]++\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]()\n }\n } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable')\n } else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler as (...a: Events['error']) => any\n if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n else h.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n return this.off(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n const ret = super.off(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length\n if (\n this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length\n ) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev?: Event) {\n const ret = super.removeAllListeners(ev as string | symbol | undefined)\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END]() {\n if (\n !this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]\n ) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED]) this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(\n ev: Event,\n ...args: Events[Event]\n ): boolean {\n const data = args[0]\n // error and close are only events allowed after calling destroy()\n if (\n ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]\n ) {\n return false\n } else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data as RType)), true)\n : this[EMITDATA](data as RType)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED]) return false\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n super.emit(ERROR, data)\n const ret =\n !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev as string, ...args)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA](data: RType) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data as RType) === false) this.pause()\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND]() {\n if (this[EMITTED_END]) return false\n\n this[EMITTED_END] = true\n this.readable = false\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]()\n }\n\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data as RType)\n }\n if (!this[DISCARDED]) super.emit('data', data)\n }\n }\n\n for (const p of this[PIPES]) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect(): Promise {\n const buf: RType[] & { dataLength: number } = Object.assign([], {\n dataLength: 0,\n })\n if (!this[OBJECTMODE]) buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += (c as Minipass.BufferOrString).length\n })\n await p\n return buf\n }\n\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat(): Promise {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode')\n }\n const buf = await this.collect()\n return (\n this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf as Buffer[], buf.dataLength)\n ) as RType\n }\n\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise(): Promise {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator](): AsyncGenerator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = async (): Promise> => {\n this.pause()\n stopped = true\n return { value: undefined, done: true }\n }\n const next = (): Promise> => {\n if (stopped) return stop()\n const res = this.read()\n if (res !== null) return Promise.resolve({ done: false, value: res })\n\n if (this[EOF]) return stop()\n\n let resolve!: (res: IteratorResult) => void\n let reject!: (er: unknown) => void\n const onerr = (er: unknown) => {\n this.off('data', ondata)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n stop()\n reject(er)\n }\n const ondata = (value: RType) => {\n this.off('error', onerr)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n this.pause()\n resolve({ value, done: !!this[EOF] })\n }\n const onend = () => {\n this.off('error', onerr)\n this.off('data', ondata)\n this.off(DESTROYED, ondestroy)\n stop()\n resolve({ done: true, value: undefined })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise>((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this\n },\n [Symbol.asyncDispose]: async () => {},\n }\n }\n\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator](): Generator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = (): IteratorReturnResult => {\n this.pause()\n this.off(ERROR, stop)\n this.off(DESTROYED, stop)\n this.off('end', stop)\n stopped = true\n return { done: true, value: undefined }\n }\n\n const next = (): IteratorResult => {\n if (stopped) return stop()\n const value = this.read()\n return value === null ? stop() : { done: false, value }\n }\n\n this.once('end', stop)\n this.once(ERROR, stop)\n this.once(DESTROYED, stop)\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this\n },\n [Symbol.dispose]: () => {},\n }\n }\n\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er?: unknown) {\n if (this[DESTROYED]) {\n if (er) this.emit('error', er)\n else this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n this[DISCARDED] = true\n\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0\n this[BUFFERLENGTH] = 0\n\n const wc = this as Minipass & {\n close?: () => void\n }\n if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n if (er) this.emit('error', er)\n // if no error to emit, still reject pending promises\n else this.emit(DESTROYED)\n\n return this\n }\n\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/minipass/dist/commonjs/index.js b/node_modules/minipass/dist/commonjs/index.js new file mode 100644 index 00000000..91f3a5cf --- /dev/null +++ b/node_modules/minipass/dist/commonjs/index.js @@ -0,0 +1,1038 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Minipass = exports.isWritable = exports.isReadable = exports.isStream = void 0; +const proc = typeof process === 'object' && process + ? process + : { + stdout: null, + stderr: null, + }; +const node_events_1 = require("node:events"); +const node_stream_1 = __importDefault(require("node:stream")); +const node_string_decoder_1 = require("node:string_decoder"); +/** + * Return true if the argument is a Minipass stream, Node stream, or something + * else that Minipass can interact with. + */ +const isStream = (s) => !!s && + typeof s === 'object' && + (s instanceof Minipass || + s instanceof node_stream_1.default || + (0, exports.isReadable)(s) || + (0, exports.isWritable)(s)) +/** + * Return true if the argument is a valid {@link Minipass.Readable} + */ +; +exports.isStream = isStream; +/** + * Return true if the argument is a valid {@link Minipass.Readable} + */ +const isReadable = (s) => !!s && + typeof s === 'object' && + s instanceof node_events_1.EventEmitter && + typeof s.pipe === 'function' && + // node core Writable streams have a pipe() method, but it throws + s.pipe !== node_stream_1.default.Writable.prototype.pipe +/** + * Return true if the argument is a valid {@link Minipass.Writable} + */ +; +exports.isReadable = isReadable; +/** + * Return true if the argument is a valid {@link Minipass.Writable} + */ +const isWritable = (s) => !!s && + typeof s === 'object' && + s instanceof node_events_1.EventEmitter && + typeof s.write === 'function' && + typeof s.end === 'function'; +exports.isWritable = isWritable; +const EOF = Symbol('EOF'); +const MAYBE_EMIT_END = Symbol('maybeEmitEnd'); +const EMITTED_END = Symbol('emittedEnd'); +const EMITTING_END = Symbol('emittingEnd'); +const EMITTED_ERROR = Symbol('emittedError'); +const CLOSED = Symbol('closed'); +const READ = Symbol('read'); +const FLUSH = Symbol('flush'); +const FLUSHCHUNK = Symbol('flushChunk'); +const ENCODING = Symbol('encoding'); +const DECODER = Symbol('decoder'); +const FLOWING = Symbol('flowing'); +const PAUSED = Symbol('paused'); +const RESUME = Symbol('resume'); +const BUFFER = Symbol('buffer'); +const PIPES = Symbol('pipes'); +const BUFFERLENGTH = Symbol('bufferLength'); +const BUFFERPUSH = Symbol('bufferPush'); +const BUFFERSHIFT = Symbol('bufferShift'); +const OBJECTMODE = Symbol('objectMode'); +// internal event when stream is destroyed +const DESTROYED = Symbol('destroyed'); +// internal event when stream has an error +const ERROR = Symbol('error'); +const EMITDATA = Symbol('emitData'); +const EMITEND = Symbol('emitEnd'); +const EMITEND2 = Symbol('emitEnd2'); +const ASYNC = Symbol('async'); +const ABORT = Symbol('abort'); +const ABORTED = Symbol('aborted'); +const SIGNAL = Symbol('signal'); +const DATALISTENERS = Symbol('dataListeners'); +const DISCARDED = Symbol('discarded'); +const defer = (fn) => Promise.resolve().then(fn); +const nodefer = (fn) => fn(); +const isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish'; +const isArrayBufferLike = (b) => b instanceof ArrayBuffer || + (!!b && + typeof b === 'object' && + b.constructor && + b.constructor.name === 'ArrayBuffer' && + b.byteLength >= 0); +const isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b); +/** + * Internal class representing a pipe to a destination stream. + * + * @internal + */ +class Pipe { + src; + dest; + opts; + ondrain; + constructor(src, dest, opts) { + this.src = src; + this.dest = dest; + this.opts = opts; + this.ondrain = () => src[RESUME](); + this.dest.on('drain', this.ondrain); + } + unpipe() { + this.dest.removeListener('drain', this.ondrain); + } + // only here for the prototype + /* c8 ignore start */ + proxyErrors(_er) { } + /* c8 ignore stop */ + end() { + this.unpipe(); + if (this.opts.end) + this.dest.end(); + } +} +/** + * Internal class representing a pipe to a destination stream where + * errors are proxied. + * + * @internal + */ +class PipeProxyErrors extends Pipe { + unpipe() { + this.src.removeListener('error', this.proxyErrors); + super.unpipe(); + } + constructor(src, dest, opts) { + super(src, dest, opts); + this.proxyErrors = (er) => this.dest.emit('error', er); + src.on('error', this.proxyErrors); + } +} +const isObjectModeOptions = (o) => !!o.objectMode; +const isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer'; +/** + * Main export, the Minipass class + * + * `RType` is the type of data emitted, defaults to Buffer + * + * `WType` is the type of data to be written, if RType is buffer or string, + * then any {@link Minipass.ContiguousData} is allowed. + * + * `Events` is the set of event handler signatures that this object + * will emit, see {@link Minipass.Events} + */ +class Minipass extends node_events_1.EventEmitter { + [FLOWING] = false; + [PAUSED] = false; + [PIPES] = []; + [BUFFER] = []; + [OBJECTMODE]; + [ENCODING]; + [ASYNC]; + [DECODER]; + [EOF] = false; + [EMITTED_END] = false; + [EMITTING_END] = false; + [CLOSED] = false; + [EMITTED_ERROR] = null; + [BUFFERLENGTH] = 0; + [DESTROYED] = false; + [SIGNAL]; + [ABORTED] = false; + [DATALISTENERS] = 0; + [DISCARDED] = false; + /** + * true if the stream can be written + */ + writable = true; + /** + * true if the stream can be read + */ + readable = true; + /** + * If `RType` is Buffer, then options do not need to be provided. + * Otherwise, an options object must be provided to specify either + * {@link Minipass.SharedOptions.objectMode} or + * {@link Minipass.SharedOptions.encoding}, as appropriate. + */ + constructor(...args) { + const options = (args[0] || + {}); + super(); + if (options.objectMode && typeof options.encoding === 'string') { + throw new TypeError('Encoding and objectMode may not be used together'); + } + if (isObjectModeOptions(options)) { + this[OBJECTMODE] = true; + this[ENCODING] = null; + } + else if (isEncodingOptions(options)) { + this[ENCODING] = options.encoding; + this[OBJECTMODE] = false; + } + else { + this[OBJECTMODE] = false; + this[ENCODING] = null; + } + this[ASYNC] = !!options.async; + this[DECODER] = this[ENCODING] + ? new node_string_decoder_1.StringDecoder(this[ENCODING]) + : null; + //@ts-ignore - private option for debugging and testing + if (options && options.debugExposeBuffer === true) { + Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] }); + } + //@ts-ignore - private option for debugging and testing + if (options && options.debugExposePipes === true) { + Object.defineProperty(this, 'pipes', { get: () => this[PIPES] }); + } + const { signal } = options; + if (signal) { + this[SIGNAL] = signal; + if (signal.aborted) { + this[ABORT](); + } + else { + signal.addEventListener('abort', () => this[ABORT]()); + } + } + } + /** + * The amount of data stored in the buffer waiting to be read. + * + * For Buffer strings, this will be the total byte length. + * For string encoding streams, this will be the string character length, + * according to JavaScript's `string.length` logic. + * For objectMode streams, this is a count of the items waiting to be + * emitted. + */ + get bufferLength() { + return this[BUFFERLENGTH]; + } + /** + * The `BufferEncoding` currently in use, or `null` + */ + get encoding() { + return this[ENCODING]; + } + /** + * @deprecated - This is a read only property + */ + set encoding(_enc) { + throw new Error('Encoding must be set at instantiation time'); + } + /** + * @deprecated - Encoding may only be set at instantiation time + */ + setEncoding(_enc) { + throw new Error('Encoding must be set at instantiation time'); + } + /** + * True if this is an objectMode stream + */ + get objectMode() { + return this[OBJECTMODE]; + } + /** + * @deprecated - This is a read-only property + */ + set objectMode(_om) { + throw new Error('objectMode must be set at instantiation time'); + } + /** + * true if this is an async stream + */ + get ['async']() { + return this[ASYNC]; + } + /** + * Set to true to make this stream async. + * + * Once set, it cannot be unset, as this would potentially cause incorrect + * behavior. Ie, a sync stream can be made async, but an async stream + * cannot be safely made sync. + */ + set ['async'](a) { + this[ASYNC] = this[ASYNC] || !!a; + } + // drop everything and get out of the flow completely + [ABORT]() { + this[ABORTED] = true; + this.emit('abort', this[SIGNAL]?.reason); + this.destroy(this[SIGNAL]?.reason); + } + /** + * True if the stream has been aborted. + */ + get aborted() { + return this[ABORTED]; + } + /** + * No-op setter. Stream aborted status is set via the AbortSignal provided + * in the constructor options. + */ + set aborted(_) { } + write(chunk, encoding, cb) { + if (this[ABORTED]) + return false; + if (this[EOF]) + throw new Error('write after end'); + if (this[DESTROYED]) { + this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' })); + return true; + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = 'utf8'; + } + if (!encoding) + encoding = 'utf8'; + const fn = this[ASYNC] ? defer : nodefer; + // convert array buffers and typed array views into buffers + // at some point in the future, we may want to do the opposite! + // leave strings and buffers as-is + // anything is only allowed if in object mode, so throw + if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { + if (isArrayBufferView(chunk)) { + //@ts-ignore - sinful unsafe type changing + chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength); + } + else if (isArrayBufferLike(chunk)) { + //@ts-ignore - sinful unsafe type changing + chunk = Buffer.from(chunk); + } + else if (typeof chunk !== 'string') { + throw new Error('Non-contiguous data written to non-objectMode stream'); + } + } + // handle object mode up front, since it's simpler + // this yields better performance, fewer checks later. + if (this[OBJECTMODE]) { + // maybe impossible? + /* c8 ignore start */ + if (this[FLOWING] && this[BUFFERLENGTH] !== 0) + this[FLUSH](true); + /* c8 ignore stop */ + if (this[FLOWING]) + this.emit('data', chunk); + else + this[BUFFERPUSH](chunk); + if (this[BUFFERLENGTH] !== 0) + this.emit('readable'); + if (cb) + fn(cb); + return this[FLOWING]; + } + // at this point the chunk is a buffer or string + // don't buffer it up or send it to the decoder + if (!chunk.length) { + if (this[BUFFERLENGTH] !== 0) + this.emit('readable'); + if (cb) + fn(cb); + return this[FLOWING]; + } + // fast-path writing strings of same encoding to a stream with + // an empty buffer, skipping the buffer/decoder dance + if (typeof chunk === 'string' && + // unless it is a string already ready for us to use + !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) { + //@ts-ignore - sinful unsafe type change + chunk = Buffer.from(chunk, encoding); + } + if (Buffer.isBuffer(chunk) && this[ENCODING]) { + //@ts-ignore - sinful unsafe type change + chunk = this[DECODER].write(chunk); + } + // Note: flushing CAN potentially switch us into not-flowing mode + if (this[FLOWING] && this[BUFFERLENGTH] !== 0) + this[FLUSH](true); + if (this[FLOWING]) + this.emit('data', chunk); + else + this[BUFFERPUSH](chunk); + if (this[BUFFERLENGTH] !== 0) + this.emit('readable'); + if (cb) + fn(cb); + return this[FLOWING]; + } + /** + * Low-level explicit read method. + * + * In objectMode, the argument is ignored, and one item is returned if + * available. + * + * `n` is the number of bytes (or in the case of encoding streams, + * characters) to consume. If `n` is not provided, then the entire buffer + * is returned, or `null` is returned if no data is available. + * + * If `n` is greater that the amount of data in the internal buffer, + * then `null` is returned. + */ + read(n) { + if (this[DESTROYED]) + return null; + this[DISCARDED] = false; + if (this[BUFFERLENGTH] === 0 || + n === 0 || + (n && n > this[BUFFERLENGTH])) { + this[MAYBE_EMIT_END](); + return null; + } + if (this[OBJECTMODE]) + n = null; + if (this[BUFFER].length > 1 && !this[OBJECTMODE]) { + // not object mode, so if we have an encoding, then RType is string + // otherwise, must be Buffer + this[BUFFER] = [ + (this[ENCODING] + ? this[BUFFER].join('') + : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])), + ]; + } + const ret = this[READ](n || null, this[BUFFER][0]); + this[MAYBE_EMIT_END](); + return ret; + } + [READ](n, chunk) { + if (this[OBJECTMODE]) + this[BUFFERSHIFT](); + else { + const c = chunk; + if (n === c.length || n === null) + this[BUFFERSHIFT](); + else if (typeof c === 'string') { + this[BUFFER][0] = c.slice(n); + chunk = c.slice(0, n); + this[BUFFERLENGTH] -= n; + } + else { + this[BUFFER][0] = c.subarray(n); + chunk = c.subarray(0, n); + this[BUFFERLENGTH] -= n; + } + } + this.emit('data', chunk); + if (!this[BUFFER].length && !this[EOF]) + this.emit('drain'); + return chunk; + } + end(chunk, encoding, cb) { + if (typeof chunk === 'function') { + cb = chunk; + chunk = undefined; + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = 'utf8'; + } + if (chunk !== undefined) + this.write(chunk, encoding); + if (cb) + this.once('end', cb); + this[EOF] = true; + this.writable = false; + // if we haven't written anything, then go ahead and emit, + // even if we're not reading. + // we'll re-emit if a new 'end' listener is added anyway. + // This makes MP more suitable to write-only use cases. + if (this[FLOWING] || !this[PAUSED]) + this[MAYBE_EMIT_END](); + return this; + } + // don't let the internal resume be overwritten + [RESUME]() { + if (this[DESTROYED]) + return; + if (!this[DATALISTENERS] && !this[PIPES].length) { + this[DISCARDED] = true; + } + this[PAUSED] = false; + this[FLOWING] = true; + this.emit('resume'); + if (this[BUFFER].length) + this[FLUSH](); + else if (this[EOF]) + this[MAYBE_EMIT_END](); + else + this.emit('drain'); + } + /** + * Resume the stream if it is currently in a paused state + * + * If called when there are no pipe destinations or `data` event listeners, + * this will place the stream in a "discarded" state, where all data will + * be thrown away. The discarded state is removed if a pipe destination or + * data handler is added, if pause() is called, or if any synchronous or + * asynchronous iteration is started. + */ + resume() { + return this[RESUME](); + } + /** + * Pause the stream + */ + pause() { + this[FLOWING] = false; + this[PAUSED] = true; + this[DISCARDED] = false; + } + /** + * true if the stream has been forcibly destroyed + */ + get destroyed() { + return this[DESTROYED]; + } + /** + * true if the stream is currently in a flowing state, meaning that + * any writes will be immediately emitted. + */ + get flowing() { + return this[FLOWING]; + } + /** + * true if the stream is currently in a paused state + */ + get paused() { + return this[PAUSED]; + } + [BUFFERPUSH](chunk) { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] += 1; + else + this[BUFFERLENGTH] += chunk.length; + this[BUFFER].push(chunk); + } + [BUFFERSHIFT]() { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] -= 1; + else + this[BUFFERLENGTH] -= this[BUFFER][0].length; + return this[BUFFER].shift(); + } + [FLUSH](noDrain = false) { + do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && + this[BUFFER].length); + if (!noDrain && !this[BUFFER].length && !this[EOF]) + this.emit('drain'); + } + [FLUSHCHUNK](chunk) { + this.emit('data', chunk); + return this[FLOWING]; + } + /** + * Pipe all data emitted by this stream into the destination provided. + * + * Triggers the flow of data. + */ + pipe(dest, opts) { + if (this[DESTROYED]) + return dest; + this[DISCARDED] = false; + const ended = this[EMITTED_END]; + opts = opts || {}; + if (dest === proc.stdout || dest === proc.stderr) + opts.end = false; + else + opts.end = opts.end !== false; + opts.proxyErrors = !!opts.proxyErrors; + // piping an ended stream ends immediately + if (ended) { + if (opts.end) + dest.end(); + } + else { + // "as" here just ignores the WType, which pipes don't care about, + // since they're only consuming from us, and writing to the dest + this[PIPES].push(!opts.proxyErrors + ? new Pipe(this, dest, opts) + : new PipeProxyErrors(this, dest, opts)); + if (this[ASYNC]) + defer(() => this[RESUME]()); + else + this[RESUME](); + } + return dest; + } + /** + * Fully unhook a piped destination stream. + * + * If the destination stream was the only consumer of this stream (ie, + * there are no other piped destinations or `'data'` event listeners) + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + unpipe(dest) { + const p = this[PIPES].find(p => p.dest === dest); + if (p) { + if (this[PIPES].length === 1) { + if (this[FLOWING] && this[DATALISTENERS] === 0) { + this[FLOWING] = false; + } + this[PIPES] = []; + } + else + this[PIPES].splice(this[PIPES].indexOf(p), 1); + p.unpipe(); + } + } + /** + * Alias for {@link Minipass#on} + */ + addListener(ev, handler) { + return this.on(ev, handler); + } + /** + * Mostly identical to `EventEmitter.on`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * - Adding a 'data' event handler will trigger the flow of data + * + * - Adding a 'readable' event handler when there is data waiting to be read + * will cause 'readable' to be emitted immediately. + * + * - Adding an 'endish' event handler ('end', 'finish', etc.) which has + * already passed will cause the event to be emitted immediately and all + * handlers removed. + * + * - Adding an 'error' event handler after an error has been emitted will + * cause the event to be re-emitted immediately with the error previously + * raised. + */ + on(ev, handler) { + const ret = super.on(ev, handler); + if (ev === 'data') { + this[DISCARDED] = false; + this[DATALISTENERS]++; + if (!this[PIPES].length && !this[FLOWING]) { + this[RESUME](); + } + } + else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) { + super.emit('readable'); + } + else if (isEndish(ev) && this[EMITTED_END]) { + super.emit(ev); + this.removeAllListeners(ev); + } + else if (ev === 'error' && this[EMITTED_ERROR]) { + const h = handler; + if (this[ASYNC]) + defer(() => h.call(this, this[EMITTED_ERROR])); + else + h.call(this, this[EMITTED_ERROR]); + } + return ret; + } + /** + * Alias for {@link Minipass#off} + */ + removeListener(ev, handler) { + return this.off(ev, handler); + } + /** + * Mostly identical to `EventEmitter.off` + * + * If a 'data' event handler is removed, and it was the last consumer + * (ie, there are no pipe destinations or other 'data' event listeners), + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + off(ev, handler) { + const ret = super.off(ev, handler); + // if we previously had listeners, and now we don't, and we don't + // have any pipes, then stop the flow, unless it's been explicitly + // put in a discarded flowing state via stream.resume(). + if (ev === 'data') { + this[DATALISTENERS] = this.listeners('data').length; + if (this[DATALISTENERS] === 0 && + !this[DISCARDED] && + !this[PIPES].length) { + this[FLOWING] = false; + } + } + return ret; + } + /** + * Mostly identical to `EventEmitter.removeAllListeners` + * + * If all 'data' event handlers are removed, and they were the last consumer + * (ie, there are no pipe destinations), then the flow of data will stop + * until there is another consumer or {@link Minipass#resume} is explicitly + * called. + */ + removeAllListeners(ev) { + const ret = super.removeAllListeners(ev); + if (ev === 'data' || ev === undefined) { + this[DATALISTENERS] = 0; + if (!this[DISCARDED] && !this[PIPES].length) { + this[FLOWING] = false; + } + } + return ret; + } + /** + * true if the 'end' event has been emitted + */ + get emittedEnd() { + return this[EMITTED_END]; + } + [MAYBE_EMIT_END]() { + if (!this[EMITTING_END] && + !this[EMITTED_END] && + !this[DESTROYED] && + this[BUFFER].length === 0 && + this[EOF]) { + this[EMITTING_END] = true; + this.emit('end'); + this.emit('prefinish'); + this.emit('finish'); + if (this[CLOSED]) + this.emit('close'); + this[EMITTING_END] = false; + } + } + /** + * Mostly identical to `EventEmitter.emit`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * If the stream has been destroyed, and the event is something other + * than 'close' or 'error', then `false` is returned and no handlers + * are called. + * + * If the event is 'end', and has already been emitted, then the event + * is ignored. If the stream is in a paused or non-flowing state, then + * the event will be deferred until data flow resumes. If the stream is + * async, then handlers will be called on the next tick rather than + * immediately. + * + * If the event is 'close', and 'end' has not yet been emitted, then + * the event will be deferred until after 'end' is emitted. + * + * If the event is 'error', and an AbortSignal was provided for the stream, + * and there are no listeners, then the event is ignored, matching the + * behavior of node core streams in the presense of an AbortSignal. + * + * If the event is 'finish' or 'prefinish', then all listeners will be + * removed after emitting the event, to prevent double-firing. + */ + emit(ev, ...args) { + const data = args[0]; + // error and close are only events allowed after calling destroy() + if (ev !== 'error' && + ev !== 'close' && + ev !== DESTROYED && + this[DESTROYED]) { + return false; + } + else if (ev === 'data') { + return !this[OBJECTMODE] && !data + ? false + : this[ASYNC] + ? (defer(() => this[EMITDATA](data)), true) + : this[EMITDATA](data); + } + else if (ev === 'end') { + return this[EMITEND](); + } + else if (ev === 'close') { + this[CLOSED] = true; + // don't emit close before 'end' and 'finish' + if (!this[EMITTED_END] && !this[DESTROYED]) + return false; + const ret = super.emit('close'); + this.removeAllListeners('close'); + return ret; + } + else if (ev === 'error') { + this[EMITTED_ERROR] = data; + super.emit(ERROR, data); + const ret = !this[SIGNAL] || this.listeners('error').length + ? super.emit('error', data) + : false; + this[MAYBE_EMIT_END](); + return ret; + } + else if (ev === 'resume') { + const ret = super.emit('resume'); + this[MAYBE_EMIT_END](); + return ret; + } + else if (ev === 'finish' || ev === 'prefinish') { + const ret = super.emit(ev); + this.removeAllListeners(ev); + return ret; + } + // Some other unknown event + const ret = super.emit(ev, ...args); + this[MAYBE_EMIT_END](); + return ret; + } + [EMITDATA](data) { + for (const p of this[PIPES]) { + if (p.dest.write(data) === false) + this.pause(); + } + const ret = this[DISCARDED] ? false : super.emit('data', data); + this[MAYBE_EMIT_END](); + return ret; + } + [EMITEND]() { + if (this[EMITTED_END]) + return false; + this[EMITTED_END] = true; + this.readable = false; + return this[ASYNC] + ? (defer(() => this[EMITEND2]()), true) + : this[EMITEND2](); + } + [EMITEND2]() { + if (this[DECODER]) { + const data = this[DECODER].end(); + if (data) { + for (const p of this[PIPES]) { + p.dest.write(data); + } + if (!this[DISCARDED]) + super.emit('data', data); + } + } + for (const p of this[PIPES]) { + p.end(); + } + const ret = super.emit('end'); + this.removeAllListeners('end'); + return ret; + } + /** + * Return a Promise that resolves to an array of all emitted data once + * the stream ends. + */ + async collect() { + const buf = Object.assign([], { + dataLength: 0, + }); + if (!this[OBJECTMODE]) + buf.dataLength = 0; + // set the promise first, in case an error is raised + // by triggering the flow here. + const p = this.promise(); + this.on('data', c => { + buf.push(c); + if (!this[OBJECTMODE]) + buf.dataLength += c.length; + }); + await p; + return buf; + } + /** + * Return a Promise that resolves to the concatenation of all emitted data + * once the stream ends. + * + * Not allowed on objectMode streams. + */ + async concat() { + if (this[OBJECTMODE]) { + throw new Error('cannot concat in objectMode'); + } + const buf = await this.collect(); + return (this[ENCODING] + ? buf.join('') + : Buffer.concat(buf, buf.dataLength)); + } + /** + * Return a void Promise that resolves once the stream ends. + */ + async promise() { + return new Promise((resolve, reject) => { + this.on(DESTROYED, () => reject(new Error('stream destroyed'))); + this.on('error', er => reject(er)); + this.on('end', () => resolve()); + }); + } + /** + * Asynchronous `for await of` iteration. + * + * This will continue emitting all chunks until the stream terminates. + */ + [Symbol.asyncIterator]() { + // set this up front, in case the consumer doesn't call next() + // right away. + this[DISCARDED] = false; + let stopped = false; + const stop = async () => { + this.pause(); + stopped = true; + return { value: undefined, done: true }; + }; + const next = () => { + if (stopped) + return stop(); + const res = this.read(); + if (res !== null) + return Promise.resolve({ done: false, value: res }); + if (this[EOF]) + return stop(); + let resolve; + let reject; + const onerr = (er) => { + this.off('data', ondata); + this.off('end', onend); + this.off(DESTROYED, ondestroy); + stop(); + reject(er); + }; + const ondata = (value) => { + this.off('error', onerr); + this.off('end', onend); + this.off(DESTROYED, ondestroy); + this.pause(); + resolve({ value, done: !!this[EOF] }); + }; + const onend = () => { + this.off('error', onerr); + this.off('data', ondata); + this.off(DESTROYED, ondestroy); + stop(); + resolve({ done: true, value: undefined }); + }; + const ondestroy = () => onerr(new Error('stream destroyed')); + return new Promise((res, rej) => { + reject = rej; + resolve = res; + this.once(DESTROYED, ondestroy); + this.once('error', onerr); + this.once('end', onend); + this.once('data', ondata); + }); + }; + return { + next, + throw: stop, + return: stop, + [Symbol.asyncIterator]() { + return this; + }, + [Symbol.asyncDispose]: async () => { }, + }; + } + /** + * Synchronous `for of` iteration. + * + * The iteration will terminate when the internal buffer runs out, even + * if the stream has not yet terminated. + */ + [Symbol.iterator]() { + // set this up front, in case the consumer doesn't call next() + // right away. + this[DISCARDED] = false; + let stopped = false; + const stop = () => { + this.pause(); + this.off(ERROR, stop); + this.off(DESTROYED, stop); + this.off('end', stop); + stopped = true; + return { done: true, value: undefined }; + }; + const next = () => { + if (stopped) + return stop(); + const value = this.read(); + return value === null ? stop() : { done: false, value }; + }; + this.once('end', stop); + this.once(ERROR, stop); + this.once(DESTROYED, stop); + return { + next, + throw: stop, + return: stop, + [Symbol.iterator]() { + return this; + }, + [Symbol.dispose]: () => { }, + }; + } + /** + * Destroy a stream, preventing it from being used for any further purpose. + * + * If the stream has a `close()` method, then it will be called on + * destruction. + * + * After destruction, any attempt to write data, read data, or emit most + * events will be ignored. + * + * If an error argument is provided, then it will be emitted in an + * 'error' event. + */ + destroy(er) { + if (this[DESTROYED]) { + if (er) + this.emit('error', er); + else + this.emit(DESTROYED); + return this; + } + this[DESTROYED] = true; + this[DISCARDED] = true; + // throw away all buffered data, it's never coming out + this[BUFFER].length = 0; + this[BUFFERLENGTH] = 0; + const wc = this; + if (typeof wc.close === 'function' && !this[CLOSED]) + wc.close(); + if (er) + this.emit('error', er); + // if no error to emit, still reject pending promises + else + this.emit(DESTROYED); + return this; + } + /** + * Alias for {@link isStream} + * + * Former export location, maintained for backwards compatibility. + * + * @deprecated + */ + static get isStream() { + return exports.isStream; + } +} +exports.Minipass = Minipass; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/minipass/dist/commonjs/index.js.map b/node_modules/minipass/dist/commonjs/index.js.map new file mode 100644 index 00000000..1687b4c9 --- /dev/null +++ b/node_modules/minipass/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const proc =\n typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n s: any\n): s is Minipass.Readable | Minipass.Writable =>\n !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Readable).pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Writable).write === 'function' &&\n typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n /**\n * end the destination stream when the source stream ends\n */\n end?: boolean\n /**\n * proxy errors from the source stream to the destination stream\n */\n proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src: Minipass\n dest: Minipass\n opts: PipeOptions\n ondrain: () => any\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n this.src = src\n this.dest = dest as Minipass\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n this.dest.on('drain', this.ondrain)\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain)\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er: any) {}\n /* c8 ignore stop */\n end() {\n this.unpipe()\n if (this.opts.end) this.dest.end()\n }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n super(src, dest, opts)\n this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nexport namespace Minipass {\n /**\n * Encoding used to create a stream that outputs strings rather than\n * Buffer objects.\n */\n export type Encoding = BufferEncoding | 'buffer' | null\n\n /**\n * Any stream that Minipass can pipe into\n */\n export type Writable =\n | Minipass\n | NodeJS.WriteStream\n | (NodeJS.WriteStream & { fd: number })\n | (EventEmitter & {\n end(): any\n write(chunk: any, ...args: any[]): any\n })\n\n /**\n * Any stream that can be read from\n */\n export type Readable =\n | Minipass\n | NodeJS.ReadStream\n | (NodeJS.ReadStream & { fd: number })\n | (EventEmitter & {\n pause(): any\n resume(): any\n pipe(...destArgs: any[]): any\n })\n\n /**\n * Utility type that can be iterated sync or async\n */\n export type DualIterable = Iterable & AsyncIterable\n\n type EventArguments = Record\n\n /**\n * The listing of events that a Minipass class can emit.\n * Extend this when extending the Minipass class, and pass as\n * the third template argument. The key is the name of the event,\n * and the value is the argument list.\n *\n * Any undeclared events will still be allowed, but the handler will get\n * arguments as `unknown[]`.\n */\n export interface Events\n extends EventArguments {\n readable: []\n data: [chunk: RType]\n error: [er: unknown]\n abort: [reason: unknown]\n drain: []\n resume: []\n end: []\n finish: []\n prefinish: []\n close: []\n [DESTROYED]: [er?: unknown]\n [ERROR]: [er: unknown]\n }\n\n /**\n * String or buffer-like data that can be joined and sliced\n */\n export type ContiguousData =\n | Buffer\n | ArrayBufferLike\n | ArrayBufferView\n | string\n export type BufferOrString = Buffer | string\n\n /**\n * Options passed to the Minipass constructor.\n */\n export type SharedOptions = {\n /**\n * Defer all data emission and other events until the end of the\n * current tick, similar to Node core streams\n */\n async?: boolean\n /**\n * A signal which will abort the stream\n */\n signal?: AbortSignal\n /**\n * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n * emit Buffer objects rather than strings.\n *\n * Conflicts with `objectMode`\n */\n encoding?: BufferEncoding | null | 'buffer'\n /**\n * Output data exactly as it was written, supporting non-buffer/string\n * data (such as arbitrary objects, falsey values, etc.)\n *\n * Conflicts with `encoding`\n */\n objectMode?: boolean\n }\n\n /**\n * Options for a string encoded output\n */\n export type EncodingOptions = SharedOptions & {\n encoding: BufferEncoding\n objectMode?: false\n }\n\n /**\n * Options for contiguous data buffer output\n */\n export type BufferOptions = SharedOptions & {\n encoding?: null | 'buffer'\n objectMode?: false\n }\n\n /**\n * Options for objectMode arbitrary output\n */\n export type ObjectModeOptions = SharedOptions & {\n objectMode: true\n encoding?: null\n }\n\n /**\n * Utility type to determine allowed options based on read type\n */\n export type Options =\n | ObjectModeOptions\n | (T extends string\n ? EncodingOptions\n : T extends Buffer\n ? BufferOptions\n : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n RType extends unknown = Buffer,\n WType extends unknown = RType extends Minipass.BufferOrString\n ? Minipass.ContiguousData\n : RType,\n Events extends Minipass.Events = Minipass.Events\n >\n extends EventEmitter\n implements Minipass.DualIterable\n{\n [FLOWING]: boolean = false;\n [PAUSED]: boolean = false;\n [PIPES]: Pipe[] = [];\n [BUFFER]: RType[] = [];\n [OBJECTMODE]: boolean;\n [ENCODING]: BufferEncoding | null;\n [ASYNC]: boolean;\n [DECODER]: SD | null;\n [EOF]: boolean = false;\n [EMITTED_END]: boolean = false;\n [EMITTING_END]: boolean = false;\n [CLOSED]: boolean = false;\n [EMITTED_ERROR]: unknown = null;\n [BUFFERLENGTH]: number = 0;\n [DESTROYED]: boolean = false;\n [SIGNAL]?: AbortSignal;\n [ABORTED]: boolean = false;\n [DATALISTENERS]: number = 0;\n [DISCARDED]: boolean = false\n\n /**\n * true if the stream can be written\n */\n writable: boolean = true\n /**\n * true if the stream can be read\n */\n readable: boolean = true\n\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(\n ...args:\n | [Minipass.ObjectModeOptions]\n | (RType extends Buffer\n ? [] | [Minipass.Options]\n : [Minipass.Options])\n ) {\n const options: Minipass.Options = (args[0] ||\n {}) as Minipass.Options\n super()\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError(\n 'Encoding and objectMode may not be used together'\n )\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true\n this[ENCODING] = null\n } else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding\n this[OBJECTMODE] = false\n } else {\n this[OBJECTMODE] = false\n this[ENCODING] = null\n }\n this[ASYNC] = !!options.async\n this[DECODER] = this[ENCODING]\n ? (new StringDecoder(this[ENCODING]) as SD)\n : null\n\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n }\n\n const { signal } = options\n if (signal) {\n this[SIGNAL] = signal\n if (signal.aborted) {\n this[ABORT]()\n } else {\n signal.addEventListener('abort', () => this[ABORT]())\n }\n }\n }\n\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH]\n }\n\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING]\n }\n\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc: Minipass.Encoding) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE]\n }\n\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time')\n }\n\n /**\n * true if this is an async stream\n */\n get ['async'](): boolean {\n return this[ASYNC]\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a: boolean) {\n this[ASYNC] = this[ASYNC] || !!a\n }\n\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true\n this.emit('abort', this[SIGNAL]?.reason)\n this.destroy(this[SIGNAL]?.reason)\n }\n\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED]\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) {}\n\n /**\n * Write data into the stream\n *\n * If the chunk written is a string, and encoding is not specified, then\n * `utf8` will be assumed. If the stream encoding matches the encoding of\n * a written string, and the state of the string decoder allows it, then\n * the string will be passed through to either the output or the internal\n * buffer without any processing. Otherwise, it will be turned into a\n * Buffer object for processing into the desired encoding.\n *\n * If provided, `cb` function is called immediately before return for\n * sync streams, or on next tick for async streams, because for this\n * base class, a chunk is considered \"processed\" once it is accepted\n * and either emitted or buffered. That is, the callback does not indicate\n * that the chunk has been eventually emitted, though of course child\n * classes can override this function to do whatever processing is required\n * and call `super.write(...)` only once processing is completed.\n */\n write(chunk: WType, cb?: () => void): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding,\n cb?: () => void\n ): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): boolean {\n if (this[ABORTED]) return false\n if (this[EOF]) throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit(\n 'error',\n Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n )\n )\n return true\n }\n\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n\n if (!encoding) encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : nodefer\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(\n chunk.buffer,\n chunk.byteOffset,\n chunk.byteLength\n )\n } else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk)\n } else if (typeof chunk !== 'string') {\n throw new Error(\n 'Non-contiguous data written to non-objectMode stream'\n )\n }\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n /* c8 ignore stop */\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!(chunk as Minipass.BufferOrString).length) {\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n if (cb) fn(cb)\n return this[FLOWING]\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (\n typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n ) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk)\n }\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n?: number | null): RType | null {\n if (this[DESTROYED]) return null\n this[DISCARDED] = false\n\n if (\n this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])\n ) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE]) n = null\n\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(\n this[BUFFER] as Buffer[],\n this[BUFFERLENGTH]\n )) as RType,\n ]\n }\n\n const ret = this[READ](n || null, this[BUFFER][0] as RType)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ](n: number | null, chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n else {\n const c = chunk as Minipass.BufferOrString\n if (n === c.length || n === null) this[BUFFERSHIFT]()\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n) as RType\n chunk = c.slice(0, n) as RType\n this[BUFFERLENGTH] -= n\n } else {\n this[BUFFER][0] = c.subarray(n) as RType\n chunk = c.subarray(0, n) as RType\n this[BUFFERLENGTH] -= n\n }\n }\n\n this.emit('data', chunk)\n\n if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n return chunk\n }\n\n /**\n * End the stream, optionally providing a final write.\n *\n * See {@link Minipass#write} for argument descriptions\n */\n end(cb?: () => void): this\n end(chunk: WType, cb?: () => void): this\n end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n end(\n chunk?: WType | (() => void),\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): this {\n if (typeof chunk === 'function') {\n cb = chunk as () => void\n chunk = undefined\n }\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n if (chunk !== undefined) this.write(chunk, encoding)\n if (cb) this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED]) return\n\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true\n }\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this[BUFFER].length) this[FLUSH]()\n else if (this[EOF]) this[MAYBE_EMIT_END]()\n else this.emit('drain')\n }\n\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]()\n }\n\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false\n this[PAUSED] = true\n this[DISCARDED] = false\n }\n\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED]\n }\n\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING]\n }\n\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED]\n }\n\n [BUFFERPUSH](chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n this[BUFFER].push(chunk)\n }\n\n [BUFFERSHIFT](): RType {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= (\n this[BUFFER][0] as Minipass.BufferOrString\n ).length\n return this[BUFFER].shift() as RType\n }\n\n [FLUSH](noDrain: boolean = false) {\n do {} while (\n this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length\n )\n\n if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n }\n\n [FLUSHCHUNK](chunk: RType) {\n this.emit('data', chunk)\n return this[FLOWING]\n }\n\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest: W, opts?: PipeOptions): W {\n if (this[DESTROYED]) return dest\n this[DISCARDED] = false\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n else opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end) dest.end()\n } else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(\n !opts.proxyErrors\n ? new Pipe(this as Minipass, dest, opts)\n : new PipeProxyErrors(this as Minipass, dest, opts)\n )\n if (this[ASYNC]) defer(() => this[RESUME]())\n else this[RESUME]()\n }\n\n return dest\n }\n\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest: W) {\n const p = this[PIPES].find(p => p.dest === dest)\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false\n }\n this[PIPES] = []\n } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n p.unpipe()\n }\n }\n\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n return this.on(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n const ret = super.on(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n if (ev === 'data') {\n this[DISCARDED] = false\n this[DATALISTENERS]++\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]()\n }\n } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable')\n } else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler as (...a: Events['error']) => any\n if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n else h.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n return this.off(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n const ret = super.off(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length\n if (\n this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length\n ) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev?: Event) {\n const ret = super.removeAllListeners(ev as string | symbol | undefined)\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END]() {\n if (\n !this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]\n ) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED]) this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(\n ev: Event,\n ...args: Events[Event]\n ): boolean {\n const data = args[0]\n // error and close are only events allowed after calling destroy()\n if (\n ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]\n ) {\n return false\n } else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data as RType)), true)\n : this[EMITDATA](data as RType)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED]) return false\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n super.emit(ERROR, data)\n const ret =\n !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev as string, ...args)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA](data: RType) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data as RType) === false) this.pause()\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND]() {\n if (this[EMITTED_END]) return false\n\n this[EMITTED_END] = true\n this.readable = false\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]()\n }\n\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data as RType)\n }\n if (!this[DISCARDED]) super.emit('data', data)\n }\n }\n\n for (const p of this[PIPES]) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect(): Promise {\n const buf: RType[] & { dataLength: number } = Object.assign([], {\n dataLength: 0,\n })\n if (!this[OBJECTMODE]) buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += (c as Minipass.BufferOrString).length\n })\n await p\n return buf\n }\n\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat(): Promise {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode')\n }\n const buf = await this.collect()\n return (\n this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf as Buffer[], buf.dataLength)\n ) as RType\n }\n\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise(): Promise {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator](): AsyncGenerator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = async (): Promise> => {\n this.pause()\n stopped = true\n return { value: undefined, done: true }\n }\n const next = (): Promise> => {\n if (stopped) return stop()\n const res = this.read()\n if (res !== null) return Promise.resolve({ done: false, value: res })\n\n if (this[EOF]) return stop()\n\n let resolve!: (res: IteratorResult) => void\n let reject!: (er: unknown) => void\n const onerr = (er: unknown) => {\n this.off('data', ondata)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n stop()\n reject(er)\n }\n const ondata = (value: RType) => {\n this.off('error', onerr)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n this.pause()\n resolve({ value, done: !!this[EOF] })\n }\n const onend = () => {\n this.off('error', onerr)\n this.off('data', ondata)\n this.off(DESTROYED, ondestroy)\n stop()\n resolve({ done: true, value: undefined })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise>((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this\n },\n [Symbol.asyncDispose]: async () => {},\n }\n }\n\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator](): Generator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = (): IteratorReturnResult => {\n this.pause()\n this.off(ERROR, stop)\n this.off(DESTROYED, stop)\n this.off('end', stop)\n stopped = true\n return { done: true, value: undefined }\n }\n\n const next = (): IteratorResult => {\n if (stopped) return stop()\n const value = this.read()\n return value === null ? stop() : { done: false, value }\n }\n\n this.once('end', stop)\n this.once(ERROR, stop)\n this.once(DESTROYED, stop)\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this\n },\n [Symbol.dispose]: () => {},\n }\n }\n\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er?: unknown) {\n if (this[DESTROYED]) {\n if (er) this.emit('error', er)\n else this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n this[DISCARDED] = true\n\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0\n this[BUFFERLENGTH] = 0\n\n const wc = this as Minipass & {\n close?: () => void\n }\n if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n if (er) this.emit('error', er)\n // if no error to emit, still reject pending promises\n else this.emit(DESTROYED)\n\n return this\n }\n\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/minipass/dist/commonjs/package.json b/node_modules/minipass/dist/commonjs/package.json new file mode 100644 index 00000000..5bbefffb --- /dev/null +++ b/node_modules/minipass/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/minipass/dist/esm/index.d.ts b/node_modules/minipass/dist/esm/index.d.ts new file mode 100644 index 00000000..3e75b578 --- /dev/null +++ b/node_modules/minipass/dist/esm/index.d.ts @@ -0,0 +1,545 @@ +import { EventEmitter } from 'node:events'; +import { StringDecoder } from 'node:string_decoder'; +/** + * Same as StringDecoder, but exposing the `lastNeed` flag on the type + */ +type SD = StringDecoder & { + lastNeed: boolean; +}; +export type { SD, Pipe, PipeProxyErrors }; +/** + * Return true if the argument is a Minipass stream, Node stream, or something + * else that Minipass can interact with. + */ +export declare const isStream: (s: any) => s is Minipass | NodeJS.ReadStream | NodeJS.WriteStream | (EventEmitter & { + end(): any; + write(chunk: any, ...args: any[]): any; +}) | (EventEmitter & { + pause(): any; + resume(): any; + pipe(...destArgs: any[]): any; +}) | (NodeJS.ReadStream & { + fd: number; +}) | (NodeJS.WriteStream & { + fd: number; +}); +/** + * Return true if the argument is a valid {@link Minipass.Readable} + */ +export declare const isReadable: (s: any) => s is Minipass.Readable; +/** + * Return true if the argument is a valid {@link Minipass.Writable} + */ +export declare const isWritable: (s: any) => s is Minipass.Readable; +declare const EOF: unique symbol; +declare const MAYBE_EMIT_END: unique symbol; +declare const EMITTED_END: unique symbol; +declare const EMITTING_END: unique symbol; +declare const EMITTED_ERROR: unique symbol; +declare const CLOSED: unique symbol; +declare const READ: unique symbol; +declare const FLUSH: unique symbol; +declare const FLUSHCHUNK: unique symbol; +declare const ENCODING: unique symbol; +declare const DECODER: unique symbol; +declare const FLOWING: unique symbol; +declare const PAUSED: unique symbol; +declare const RESUME: unique symbol; +declare const BUFFER: unique symbol; +declare const PIPES: unique symbol; +declare const BUFFERLENGTH: unique symbol; +declare const BUFFERPUSH: unique symbol; +declare const BUFFERSHIFT: unique symbol; +declare const OBJECTMODE: unique symbol; +declare const DESTROYED: unique symbol; +declare const ERROR: unique symbol; +declare const EMITDATA: unique symbol; +declare const EMITEND: unique symbol; +declare const EMITEND2: unique symbol; +declare const ASYNC: unique symbol; +declare const ABORT: unique symbol; +declare const ABORTED: unique symbol; +declare const SIGNAL: unique symbol; +declare const DATALISTENERS: unique symbol; +declare const DISCARDED: unique symbol; +/** + * Options that may be passed to stream.pipe() + */ +export interface PipeOptions { + /** + * end the destination stream when the source stream ends + */ + end?: boolean; + /** + * proxy errors from the source stream to the destination stream + */ + proxyErrors?: boolean; +} +/** + * Internal class representing a pipe to a destination stream. + * + * @internal + */ +declare class Pipe { + src: Minipass; + dest: Minipass; + opts: PipeOptions; + ondrain: () => any; + constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions); + unpipe(): void; + proxyErrors(_er: any): void; + end(): void; +} +/** + * Internal class representing a pipe to a destination stream where + * errors are proxied. + * + * @internal + */ +declare class PipeProxyErrors extends Pipe { + unpipe(): void; + constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions); +} +export declare namespace Minipass { + /** + * Encoding used to create a stream that outputs strings rather than + * Buffer objects. + */ + export type Encoding = BufferEncoding | 'buffer' | null; + /** + * Any stream that Minipass can pipe into + */ + export type Writable = Minipass | NodeJS.WriteStream | (NodeJS.WriteStream & { + fd: number; + }) | (EventEmitter & { + end(): any; + write(chunk: any, ...args: any[]): any; + }); + /** + * Any stream that can be read from + */ + export type Readable = Minipass | NodeJS.ReadStream | (NodeJS.ReadStream & { + fd: number; + }) | (EventEmitter & { + pause(): any; + resume(): any; + pipe(...destArgs: any[]): any; + }); + /** + * Utility type that can be iterated sync or async + */ + export type DualIterable = Iterable & AsyncIterable; + type EventArguments = Record; + /** + * The listing of events that a Minipass class can emit. + * Extend this when extending the Minipass class, and pass as + * the third template argument. The key is the name of the event, + * and the value is the argument list. + * + * Any undeclared events will still be allowed, but the handler will get + * arguments as `unknown[]`. + */ + export interface Events extends EventArguments { + readable: []; + data: [chunk: RType]; + error: [er: unknown]; + abort: [reason: unknown]; + drain: []; + resume: []; + end: []; + finish: []; + prefinish: []; + close: []; + [DESTROYED]: [er?: unknown]; + [ERROR]: [er: unknown]; + } + /** + * String or buffer-like data that can be joined and sliced + */ + export type ContiguousData = Buffer | ArrayBufferLike | ArrayBufferView | string; + export type BufferOrString = Buffer | string; + /** + * Options passed to the Minipass constructor. + */ + export type SharedOptions = { + /** + * Defer all data emission and other events until the end of the + * current tick, similar to Node core streams + */ + async?: boolean; + /** + * A signal which will abort the stream + */ + signal?: AbortSignal; + /** + * Output string encoding. Set to `null` or `'buffer'` (or omit) to + * emit Buffer objects rather than strings. + * + * Conflicts with `objectMode` + */ + encoding?: BufferEncoding | null | 'buffer'; + /** + * Output data exactly as it was written, supporting non-buffer/string + * data (such as arbitrary objects, falsey values, etc.) + * + * Conflicts with `encoding` + */ + objectMode?: boolean; + }; + /** + * Options for a string encoded output + */ + export type EncodingOptions = SharedOptions & { + encoding: BufferEncoding; + objectMode?: false; + }; + /** + * Options for contiguous data buffer output + */ + export type BufferOptions = SharedOptions & { + encoding?: null | 'buffer'; + objectMode?: false; + }; + /** + * Options for objectMode arbitrary output + */ + export type ObjectModeOptions = SharedOptions & { + objectMode: true; + encoding?: null; + }; + /** + * Utility type to determine allowed options based on read type + */ + export type Options = ObjectModeOptions | (T extends string ? EncodingOptions : T extends Buffer ? BufferOptions : SharedOptions); + export {}; +} +/** + * Main export, the Minipass class + * + * `RType` is the type of data emitted, defaults to Buffer + * + * `WType` is the type of data to be written, if RType is buffer or string, + * then any {@link Minipass.ContiguousData} is allowed. + * + * `Events` is the set of event handler signatures that this object + * will emit, see {@link Minipass.Events} + */ +export declare class Minipass = Minipass.Events> extends EventEmitter implements Minipass.DualIterable { + [FLOWING]: boolean; + [PAUSED]: boolean; + [PIPES]: Pipe[]; + [BUFFER]: RType[]; + [OBJECTMODE]: boolean; + [ENCODING]: BufferEncoding | null; + [ASYNC]: boolean; + [DECODER]: SD | null; + [EOF]: boolean; + [EMITTED_END]: boolean; + [EMITTING_END]: boolean; + [CLOSED]: boolean; + [EMITTED_ERROR]: unknown; + [BUFFERLENGTH]: number; + [DESTROYED]: boolean; + [SIGNAL]?: AbortSignal; + [ABORTED]: boolean; + [DATALISTENERS]: number; + [DISCARDED]: boolean; + /** + * true if the stream can be written + */ + writable: boolean; + /** + * true if the stream can be read + */ + readable: boolean; + /** + * If `RType` is Buffer, then options do not need to be provided. + * Otherwise, an options object must be provided to specify either + * {@link Minipass.SharedOptions.objectMode} or + * {@link Minipass.SharedOptions.encoding}, as appropriate. + */ + constructor(...args: [Minipass.ObjectModeOptions] | (RType extends Buffer ? [] | [Minipass.Options] : [Minipass.Options])); + /** + * The amount of data stored in the buffer waiting to be read. + * + * For Buffer strings, this will be the total byte length. + * For string encoding streams, this will be the string character length, + * according to JavaScript's `string.length` logic. + * For objectMode streams, this is a count of the items waiting to be + * emitted. + */ + get bufferLength(): number; + /** + * The `BufferEncoding` currently in use, or `null` + */ + get encoding(): BufferEncoding | null; + /** + * @deprecated - This is a read only property + */ + set encoding(_enc: BufferEncoding | null); + /** + * @deprecated - Encoding may only be set at instantiation time + */ + setEncoding(_enc: Minipass.Encoding): void; + /** + * True if this is an objectMode stream + */ + get objectMode(): boolean; + /** + * @deprecated - This is a read-only property + */ + set objectMode(_om: boolean); + /** + * true if this is an async stream + */ + get ['async'](): boolean; + /** + * Set to true to make this stream async. + * + * Once set, it cannot be unset, as this would potentially cause incorrect + * behavior. Ie, a sync stream can be made async, but an async stream + * cannot be safely made sync. + */ + set ['async'](a: boolean); + [ABORT](): void; + /** + * True if the stream has been aborted. + */ + get aborted(): boolean; + /** + * No-op setter. Stream aborted status is set via the AbortSignal provided + * in the constructor options. + */ + set aborted(_: boolean); + /** + * Write data into the stream + * + * If the chunk written is a string, and encoding is not specified, then + * `utf8` will be assumed. If the stream encoding matches the encoding of + * a written string, and the state of the string decoder allows it, then + * the string will be passed through to either the output or the internal + * buffer without any processing. Otherwise, it will be turned into a + * Buffer object for processing into the desired encoding. + * + * If provided, `cb` function is called immediately before return for + * sync streams, or on next tick for async streams, because for this + * base class, a chunk is considered "processed" once it is accepted + * and either emitted or buffered. That is, the callback does not indicate + * that the chunk has been eventually emitted, though of course child + * classes can override this function to do whatever processing is required + * and call `super.write(...)` only once processing is completed. + */ + write(chunk: WType, cb?: () => void): boolean; + write(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): boolean; + /** + * Low-level explicit read method. + * + * In objectMode, the argument is ignored, and one item is returned if + * available. + * + * `n` is the number of bytes (or in the case of encoding streams, + * characters) to consume. If `n` is not provided, then the entire buffer + * is returned, or `null` is returned if no data is available. + * + * If `n` is greater that the amount of data in the internal buffer, + * then `null` is returned. + */ + read(n?: number | null): RType | null; + [READ](n: number | null, chunk: RType): RType; + /** + * End the stream, optionally providing a final write. + * + * See {@link Minipass#write} for argument descriptions + */ + end(cb?: () => void): this; + end(chunk: WType, cb?: () => void): this; + end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this; + [RESUME](): void; + /** + * Resume the stream if it is currently in a paused state + * + * If called when there are no pipe destinations or `data` event listeners, + * this will place the stream in a "discarded" state, where all data will + * be thrown away. The discarded state is removed if a pipe destination or + * data handler is added, if pause() is called, or if any synchronous or + * asynchronous iteration is started. + */ + resume(): void; + /** + * Pause the stream + */ + pause(): void; + /** + * true if the stream has been forcibly destroyed + */ + get destroyed(): boolean; + /** + * true if the stream is currently in a flowing state, meaning that + * any writes will be immediately emitted. + */ + get flowing(): boolean; + /** + * true if the stream is currently in a paused state + */ + get paused(): boolean; + [BUFFERPUSH](chunk: RType): void; + [BUFFERSHIFT](): RType; + [FLUSH](noDrain?: boolean): void; + [FLUSHCHUNK](chunk: RType): boolean; + /** + * Pipe all data emitted by this stream into the destination provided. + * + * Triggers the flow of data. + */ + pipe(dest: W, opts?: PipeOptions): W; + /** + * Fully unhook a piped destination stream. + * + * If the destination stream was the only consumer of this stream (ie, + * there are no other piped destinations or `'data'` event listeners) + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + unpipe(dest: W): void; + /** + * Alias for {@link Minipass#on} + */ + addListener(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Mostly identical to `EventEmitter.on`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * - Adding a 'data' event handler will trigger the flow of data + * + * - Adding a 'readable' event handler when there is data waiting to be read + * will cause 'readable' to be emitted immediately. + * + * - Adding an 'endish' event handler ('end', 'finish', etc.) which has + * already passed will cause the event to be emitted immediately and all + * handlers removed. + * + * - Adding an 'error' event handler after an error has been emitted will + * cause the event to be re-emitted immediately with the error previously + * raised. + */ + on(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Alias for {@link Minipass#off} + */ + removeListener(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Mostly identical to `EventEmitter.off` + * + * If a 'data' event handler is removed, and it was the last consumer + * (ie, there are no pipe destinations or other 'data' event listeners), + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + off(ev: Event, handler: (...args: Events[Event]) => any): this; + /** + * Mostly identical to `EventEmitter.removeAllListeners` + * + * If all 'data' event handlers are removed, and they were the last consumer + * (ie, there are no pipe destinations), then the flow of data will stop + * until there is another consumer or {@link Minipass#resume} is explicitly + * called. + */ + removeAllListeners(ev?: Event): this; + /** + * true if the 'end' event has been emitted + */ + get emittedEnd(): boolean; + [MAYBE_EMIT_END](): void; + /** + * Mostly identical to `EventEmitter.emit`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * If the stream has been destroyed, and the event is something other + * than 'close' or 'error', then `false` is returned and no handlers + * are called. + * + * If the event is 'end', and has already been emitted, then the event + * is ignored. If the stream is in a paused or non-flowing state, then + * the event will be deferred until data flow resumes. If the stream is + * async, then handlers will be called on the next tick rather than + * immediately. + * + * If the event is 'close', and 'end' has not yet been emitted, then + * the event will be deferred until after 'end' is emitted. + * + * If the event is 'error', and an AbortSignal was provided for the stream, + * and there are no listeners, then the event is ignored, matching the + * behavior of node core streams in the presense of an AbortSignal. + * + * If the event is 'finish' or 'prefinish', then all listeners will be + * removed after emitting the event, to prevent double-firing. + */ + emit(ev: Event, ...args: Events[Event]): boolean; + [EMITDATA](data: RType): boolean; + [EMITEND](): boolean; + [EMITEND2](): boolean; + /** + * Return a Promise that resolves to an array of all emitted data once + * the stream ends. + */ + collect(): Promise; + /** + * Return a Promise that resolves to the concatenation of all emitted data + * once the stream ends. + * + * Not allowed on objectMode streams. + */ + concat(): Promise; + /** + * Return a void Promise that resolves once the stream ends. + */ + promise(): Promise; + /** + * Asynchronous `for await of` iteration. + * + * This will continue emitting all chunks until the stream terminates. + */ + [Symbol.asyncIterator](): AsyncGenerator; + /** + * Synchronous `for of` iteration. + * + * The iteration will terminate when the internal buffer runs out, even + * if the stream has not yet terminated. + */ + [Symbol.iterator](): Generator; + /** + * Destroy a stream, preventing it from being used for any further purpose. + * + * If the stream has a `close()` method, then it will be called on + * destruction. + * + * After destruction, any attempt to write data, read data, or emit most + * events will be ignored. + * + * If an error argument is provided, then it will be emitted in an + * 'error' event. + */ + destroy(er?: unknown): this; + /** + * Alias for {@link isStream} + * + * Former export location, maintained for backwards compatibility. + * + * @deprecated + */ + static get isStream(): (s: any) => s is Minipass | NodeJS.ReadStream | NodeJS.WriteStream | (EventEmitter & { + end(): any; + write(chunk: any, ...args: any[]): any; + }) | (EventEmitter & { + pause(): any; + resume(): any; + pipe(...destArgs: any[]): any; + }) | (NodeJS.ReadStream & { + fd: number; + }) | (NodeJS.WriteStream & { + fd: number; + }); +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/minipass/dist/esm/index.d.ts.map b/node_modules/minipass/dist/esm/index.d.ts.map new file mode 100644 index 00000000..7bce611b --- /dev/null +++ b/node_modules/minipass/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const proc =\n typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n s: any\n): s is Minipass.Readable | Minipass.Writable =>\n !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Readable).pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Writable).write === 'function' &&\n typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n /**\n * end the destination stream when the source stream ends\n */\n end?: boolean\n /**\n * proxy errors from the source stream to the destination stream\n */\n proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src: Minipass\n dest: Minipass\n opts: PipeOptions\n ondrain: () => any\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n this.src = src\n this.dest = dest as Minipass\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n this.dest.on('drain', this.ondrain)\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain)\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er: any) {}\n /* c8 ignore stop */\n end() {\n this.unpipe()\n if (this.opts.end) this.dest.end()\n }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n super(src, dest, opts)\n this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nexport namespace Minipass {\n /**\n * Encoding used to create a stream that outputs strings rather than\n * Buffer objects.\n */\n export type Encoding = BufferEncoding | 'buffer' | null\n\n /**\n * Any stream that Minipass can pipe into\n */\n export type Writable =\n | Minipass\n | NodeJS.WriteStream\n | (NodeJS.WriteStream & { fd: number })\n | (EventEmitter & {\n end(): any\n write(chunk: any, ...args: any[]): any\n })\n\n /**\n * Any stream that can be read from\n */\n export type Readable =\n | Minipass\n | NodeJS.ReadStream\n | (NodeJS.ReadStream & { fd: number })\n | (EventEmitter & {\n pause(): any\n resume(): any\n pipe(...destArgs: any[]): any\n })\n\n /**\n * Utility type that can be iterated sync or async\n */\n export type DualIterable = Iterable & AsyncIterable\n\n type EventArguments = Record\n\n /**\n * The listing of events that a Minipass class can emit.\n * Extend this when extending the Minipass class, and pass as\n * the third template argument. The key is the name of the event,\n * and the value is the argument list.\n *\n * Any undeclared events will still be allowed, but the handler will get\n * arguments as `unknown[]`.\n */\n export interface Events\n extends EventArguments {\n readable: []\n data: [chunk: RType]\n error: [er: unknown]\n abort: [reason: unknown]\n drain: []\n resume: []\n end: []\n finish: []\n prefinish: []\n close: []\n [DESTROYED]: [er?: unknown]\n [ERROR]: [er: unknown]\n }\n\n /**\n * String or buffer-like data that can be joined and sliced\n */\n export type ContiguousData =\n | Buffer\n | ArrayBufferLike\n | ArrayBufferView\n | string\n export type BufferOrString = Buffer | string\n\n /**\n * Options passed to the Minipass constructor.\n */\n export type SharedOptions = {\n /**\n * Defer all data emission and other events until the end of the\n * current tick, similar to Node core streams\n */\n async?: boolean\n /**\n * A signal which will abort the stream\n */\n signal?: AbortSignal\n /**\n * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n * emit Buffer objects rather than strings.\n *\n * Conflicts with `objectMode`\n */\n encoding?: BufferEncoding | null | 'buffer'\n /**\n * Output data exactly as it was written, supporting non-buffer/string\n * data (such as arbitrary objects, falsey values, etc.)\n *\n * Conflicts with `encoding`\n */\n objectMode?: boolean\n }\n\n /**\n * Options for a string encoded output\n */\n export type EncodingOptions = SharedOptions & {\n encoding: BufferEncoding\n objectMode?: false\n }\n\n /**\n * Options for contiguous data buffer output\n */\n export type BufferOptions = SharedOptions & {\n encoding?: null | 'buffer'\n objectMode?: false\n }\n\n /**\n * Options for objectMode arbitrary output\n */\n export type ObjectModeOptions = SharedOptions & {\n objectMode: true\n encoding?: null\n }\n\n /**\n * Utility type to determine allowed options based on read type\n */\n export type Options =\n | ObjectModeOptions\n | (T extends string\n ? EncodingOptions\n : T extends Buffer\n ? BufferOptions\n : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n RType extends unknown = Buffer,\n WType extends unknown = RType extends Minipass.BufferOrString\n ? Minipass.ContiguousData\n : RType,\n Events extends Minipass.Events = Minipass.Events\n >\n extends EventEmitter\n implements Minipass.DualIterable\n{\n [FLOWING]: boolean = false;\n [PAUSED]: boolean = false;\n [PIPES]: Pipe[] = [];\n [BUFFER]: RType[] = [];\n [OBJECTMODE]: boolean;\n [ENCODING]: BufferEncoding | null;\n [ASYNC]: boolean;\n [DECODER]: SD | null;\n [EOF]: boolean = false;\n [EMITTED_END]: boolean = false;\n [EMITTING_END]: boolean = false;\n [CLOSED]: boolean = false;\n [EMITTED_ERROR]: unknown = null;\n [BUFFERLENGTH]: number = 0;\n [DESTROYED]: boolean = false;\n [SIGNAL]?: AbortSignal;\n [ABORTED]: boolean = false;\n [DATALISTENERS]: number = 0;\n [DISCARDED]: boolean = false\n\n /**\n * true if the stream can be written\n */\n writable: boolean = true\n /**\n * true if the stream can be read\n */\n readable: boolean = true\n\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(\n ...args:\n | [Minipass.ObjectModeOptions]\n | (RType extends Buffer\n ? [] | [Minipass.Options]\n : [Minipass.Options])\n ) {\n const options: Minipass.Options = (args[0] ||\n {}) as Minipass.Options\n super()\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError(\n 'Encoding and objectMode may not be used together'\n )\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true\n this[ENCODING] = null\n } else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding\n this[OBJECTMODE] = false\n } else {\n this[OBJECTMODE] = false\n this[ENCODING] = null\n }\n this[ASYNC] = !!options.async\n this[DECODER] = this[ENCODING]\n ? (new StringDecoder(this[ENCODING]) as SD)\n : null\n\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n }\n\n const { signal } = options\n if (signal) {\n this[SIGNAL] = signal\n if (signal.aborted) {\n this[ABORT]()\n } else {\n signal.addEventListener('abort', () => this[ABORT]())\n }\n }\n }\n\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH]\n }\n\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING]\n }\n\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc: Minipass.Encoding) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE]\n }\n\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time')\n }\n\n /**\n * true if this is an async stream\n */\n get ['async'](): boolean {\n return this[ASYNC]\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a: boolean) {\n this[ASYNC] = this[ASYNC] || !!a\n }\n\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true\n this.emit('abort', this[SIGNAL]?.reason)\n this.destroy(this[SIGNAL]?.reason)\n }\n\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED]\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) {}\n\n /**\n * Write data into the stream\n *\n * If the chunk written is a string, and encoding is not specified, then\n * `utf8` will be assumed. If the stream encoding matches the encoding of\n * a written string, and the state of the string decoder allows it, then\n * the string will be passed through to either the output or the internal\n * buffer without any processing. Otherwise, it will be turned into a\n * Buffer object for processing into the desired encoding.\n *\n * If provided, `cb` function is called immediately before return for\n * sync streams, or on next tick for async streams, because for this\n * base class, a chunk is considered \"processed\" once it is accepted\n * and either emitted or buffered. That is, the callback does not indicate\n * that the chunk has been eventually emitted, though of course child\n * classes can override this function to do whatever processing is required\n * and call `super.write(...)` only once processing is completed.\n */\n write(chunk: WType, cb?: () => void): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding,\n cb?: () => void\n ): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): boolean {\n if (this[ABORTED]) return false\n if (this[EOF]) throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit(\n 'error',\n Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n )\n )\n return true\n }\n\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n\n if (!encoding) encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : nodefer\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(\n chunk.buffer,\n chunk.byteOffset,\n chunk.byteLength\n )\n } else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk)\n } else if (typeof chunk !== 'string') {\n throw new Error(\n 'Non-contiguous data written to non-objectMode stream'\n )\n }\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n /* c8 ignore stop */\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!(chunk as Minipass.BufferOrString).length) {\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n if (cb) fn(cb)\n return this[FLOWING]\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (\n typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n ) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk)\n }\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n?: number | null): RType | null {\n if (this[DESTROYED]) return null\n this[DISCARDED] = false\n\n if (\n this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])\n ) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE]) n = null\n\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(\n this[BUFFER] as Buffer[],\n this[BUFFERLENGTH]\n )) as RType,\n ]\n }\n\n const ret = this[READ](n || null, this[BUFFER][0] as RType)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ](n: number | null, chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n else {\n const c = chunk as Minipass.BufferOrString\n if (n === c.length || n === null) this[BUFFERSHIFT]()\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n) as RType\n chunk = c.slice(0, n) as RType\n this[BUFFERLENGTH] -= n\n } else {\n this[BUFFER][0] = c.subarray(n) as RType\n chunk = c.subarray(0, n) as RType\n this[BUFFERLENGTH] -= n\n }\n }\n\n this.emit('data', chunk)\n\n if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n return chunk\n }\n\n /**\n * End the stream, optionally providing a final write.\n *\n * See {@link Minipass#write} for argument descriptions\n */\n end(cb?: () => void): this\n end(chunk: WType, cb?: () => void): this\n end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n end(\n chunk?: WType | (() => void),\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): this {\n if (typeof chunk === 'function') {\n cb = chunk as () => void\n chunk = undefined\n }\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n if (chunk !== undefined) this.write(chunk, encoding)\n if (cb) this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED]) return\n\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true\n }\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this[BUFFER].length) this[FLUSH]()\n else if (this[EOF]) this[MAYBE_EMIT_END]()\n else this.emit('drain')\n }\n\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]()\n }\n\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false\n this[PAUSED] = true\n this[DISCARDED] = false\n }\n\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED]\n }\n\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING]\n }\n\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED]\n }\n\n [BUFFERPUSH](chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n this[BUFFER].push(chunk)\n }\n\n [BUFFERSHIFT](): RType {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= (\n this[BUFFER][0] as Minipass.BufferOrString\n ).length\n return this[BUFFER].shift() as RType\n }\n\n [FLUSH](noDrain: boolean = false) {\n do {} while (\n this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length\n )\n\n if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n }\n\n [FLUSHCHUNK](chunk: RType) {\n this.emit('data', chunk)\n return this[FLOWING]\n }\n\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest: W, opts?: PipeOptions): W {\n if (this[DESTROYED]) return dest\n this[DISCARDED] = false\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n else opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end) dest.end()\n } else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(\n !opts.proxyErrors\n ? new Pipe(this as Minipass, dest, opts)\n : new PipeProxyErrors(this as Minipass, dest, opts)\n )\n if (this[ASYNC]) defer(() => this[RESUME]())\n else this[RESUME]()\n }\n\n return dest\n }\n\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest: W) {\n const p = this[PIPES].find(p => p.dest === dest)\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false\n }\n this[PIPES] = []\n } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n p.unpipe()\n }\n }\n\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n return this.on(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n const ret = super.on(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n if (ev === 'data') {\n this[DISCARDED] = false\n this[DATALISTENERS]++\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]()\n }\n } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable')\n } else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler as (...a: Events['error']) => any\n if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n else h.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n return this.off(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n const ret = super.off(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length\n if (\n this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length\n ) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev?: Event) {\n const ret = super.removeAllListeners(ev as string | symbol | undefined)\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END]() {\n if (\n !this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]\n ) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED]) this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(\n ev: Event,\n ...args: Events[Event]\n ): boolean {\n const data = args[0]\n // error and close are only events allowed after calling destroy()\n if (\n ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]\n ) {\n return false\n } else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data as RType)), true)\n : this[EMITDATA](data as RType)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED]) return false\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n super.emit(ERROR, data)\n const ret =\n !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev as string, ...args)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA](data: RType) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data as RType) === false) this.pause()\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND]() {\n if (this[EMITTED_END]) return false\n\n this[EMITTED_END] = true\n this.readable = false\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]()\n }\n\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data as RType)\n }\n if (!this[DISCARDED]) super.emit('data', data)\n }\n }\n\n for (const p of this[PIPES]) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect(): Promise {\n const buf: RType[] & { dataLength: number } = Object.assign([], {\n dataLength: 0,\n })\n if (!this[OBJECTMODE]) buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += (c as Minipass.BufferOrString).length\n })\n await p\n return buf\n }\n\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat(): Promise {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode')\n }\n const buf = await this.collect()\n return (\n this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf as Buffer[], buf.dataLength)\n ) as RType\n }\n\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise(): Promise {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator](): AsyncGenerator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = async (): Promise> => {\n this.pause()\n stopped = true\n return { value: undefined, done: true }\n }\n const next = (): Promise> => {\n if (stopped) return stop()\n const res = this.read()\n if (res !== null) return Promise.resolve({ done: false, value: res })\n\n if (this[EOF]) return stop()\n\n let resolve!: (res: IteratorResult) => void\n let reject!: (er: unknown) => void\n const onerr = (er: unknown) => {\n this.off('data', ondata)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n stop()\n reject(er)\n }\n const ondata = (value: RType) => {\n this.off('error', onerr)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n this.pause()\n resolve({ value, done: !!this[EOF] })\n }\n const onend = () => {\n this.off('error', onerr)\n this.off('data', ondata)\n this.off(DESTROYED, ondestroy)\n stop()\n resolve({ done: true, value: undefined })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise>((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this\n },\n [Symbol.asyncDispose]: async () => {},\n }\n }\n\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator](): Generator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = (): IteratorReturnResult => {\n this.pause()\n this.off(ERROR, stop)\n this.off(DESTROYED, stop)\n this.off('end', stop)\n stopped = true\n return { done: true, value: undefined }\n }\n\n const next = (): IteratorResult => {\n if (stopped) return stop()\n const value = this.read()\n return value === null ? stop() : { done: false, value }\n }\n\n this.once('end', stop)\n this.once(ERROR, stop)\n this.once(DESTROYED, stop)\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this\n },\n [Symbol.dispose]: () => {},\n }\n }\n\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er?: unknown) {\n if (this[DESTROYED]) {\n if (er) this.emit('error', er)\n else this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n this[DISCARDED] = true\n\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0\n this[BUFFERLENGTH] = 0\n\n const wc = this as Minipass & {\n close?: () => void\n }\n if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n if (er) this.emit('error', er)\n // if no error to emit, still reject pending promises\n else this.emit(DESTROYED)\n\n return this\n }\n\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/minipass/dist/esm/index.js b/node_modules/minipass/dist/esm/index.js new file mode 100644 index 00000000..5df55461 --- /dev/null +++ b/node_modules/minipass/dist/esm/index.js @@ -0,0 +1,1020 @@ +const proc = typeof process === 'object' && process + ? process + : { + stdout: null, + stderr: null, + }; +import { EventEmitter } from 'node:events'; +import Stream from 'node:stream'; +import { StringDecoder } from 'node:string_decoder'; +/** + * Return true if the argument is a Minipass stream, Node stream, or something + * else that Minipass can interact with. + */ +export const isStream = (s) => !!s && + typeof s === 'object' && + (s instanceof Minipass || + s instanceof Stream || + isReadable(s) || + isWritable(s)); +/** + * Return true if the argument is a valid {@link Minipass.Readable} + */ +export const isReadable = (s) => !!s && + typeof s === 'object' && + s instanceof EventEmitter && + typeof s.pipe === 'function' && + // node core Writable streams have a pipe() method, but it throws + s.pipe !== Stream.Writable.prototype.pipe; +/** + * Return true if the argument is a valid {@link Minipass.Writable} + */ +export const isWritable = (s) => !!s && + typeof s === 'object' && + s instanceof EventEmitter && + typeof s.write === 'function' && + typeof s.end === 'function'; +const EOF = Symbol('EOF'); +const MAYBE_EMIT_END = Symbol('maybeEmitEnd'); +const EMITTED_END = Symbol('emittedEnd'); +const EMITTING_END = Symbol('emittingEnd'); +const EMITTED_ERROR = Symbol('emittedError'); +const CLOSED = Symbol('closed'); +const READ = Symbol('read'); +const FLUSH = Symbol('flush'); +const FLUSHCHUNK = Symbol('flushChunk'); +const ENCODING = Symbol('encoding'); +const DECODER = Symbol('decoder'); +const FLOWING = Symbol('flowing'); +const PAUSED = Symbol('paused'); +const RESUME = Symbol('resume'); +const BUFFER = Symbol('buffer'); +const PIPES = Symbol('pipes'); +const BUFFERLENGTH = Symbol('bufferLength'); +const BUFFERPUSH = Symbol('bufferPush'); +const BUFFERSHIFT = Symbol('bufferShift'); +const OBJECTMODE = Symbol('objectMode'); +// internal event when stream is destroyed +const DESTROYED = Symbol('destroyed'); +// internal event when stream has an error +const ERROR = Symbol('error'); +const EMITDATA = Symbol('emitData'); +const EMITEND = Symbol('emitEnd'); +const EMITEND2 = Symbol('emitEnd2'); +const ASYNC = Symbol('async'); +const ABORT = Symbol('abort'); +const ABORTED = Symbol('aborted'); +const SIGNAL = Symbol('signal'); +const DATALISTENERS = Symbol('dataListeners'); +const DISCARDED = Symbol('discarded'); +const defer = (fn) => Promise.resolve().then(fn); +const nodefer = (fn) => fn(); +const isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish'; +const isArrayBufferLike = (b) => b instanceof ArrayBuffer || + (!!b && + typeof b === 'object' && + b.constructor && + b.constructor.name === 'ArrayBuffer' && + b.byteLength >= 0); +const isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b); +/** + * Internal class representing a pipe to a destination stream. + * + * @internal + */ +class Pipe { + src; + dest; + opts; + ondrain; + constructor(src, dest, opts) { + this.src = src; + this.dest = dest; + this.opts = opts; + this.ondrain = () => src[RESUME](); + this.dest.on('drain', this.ondrain); + } + unpipe() { + this.dest.removeListener('drain', this.ondrain); + } + // only here for the prototype + /* c8 ignore start */ + proxyErrors(_er) { } + /* c8 ignore stop */ + end() { + this.unpipe(); + if (this.opts.end) + this.dest.end(); + } +} +/** + * Internal class representing a pipe to a destination stream where + * errors are proxied. + * + * @internal + */ +class PipeProxyErrors extends Pipe { + unpipe() { + this.src.removeListener('error', this.proxyErrors); + super.unpipe(); + } + constructor(src, dest, opts) { + super(src, dest, opts); + this.proxyErrors = (er) => this.dest.emit('error', er); + src.on('error', this.proxyErrors); + } +} +const isObjectModeOptions = (o) => !!o.objectMode; +const isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer'; +/** + * Main export, the Minipass class + * + * `RType` is the type of data emitted, defaults to Buffer + * + * `WType` is the type of data to be written, if RType is buffer or string, + * then any {@link Minipass.ContiguousData} is allowed. + * + * `Events` is the set of event handler signatures that this object + * will emit, see {@link Minipass.Events} + */ +export class Minipass extends EventEmitter { + [FLOWING] = false; + [PAUSED] = false; + [PIPES] = []; + [BUFFER] = []; + [OBJECTMODE]; + [ENCODING]; + [ASYNC]; + [DECODER]; + [EOF] = false; + [EMITTED_END] = false; + [EMITTING_END] = false; + [CLOSED] = false; + [EMITTED_ERROR] = null; + [BUFFERLENGTH] = 0; + [DESTROYED] = false; + [SIGNAL]; + [ABORTED] = false; + [DATALISTENERS] = 0; + [DISCARDED] = false; + /** + * true if the stream can be written + */ + writable = true; + /** + * true if the stream can be read + */ + readable = true; + /** + * If `RType` is Buffer, then options do not need to be provided. + * Otherwise, an options object must be provided to specify either + * {@link Minipass.SharedOptions.objectMode} or + * {@link Minipass.SharedOptions.encoding}, as appropriate. + */ + constructor(...args) { + const options = (args[0] || + {}); + super(); + if (options.objectMode && typeof options.encoding === 'string') { + throw new TypeError('Encoding and objectMode may not be used together'); + } + if (isObjectModeOptions(options)) { + this[OBJECTMODE] = true; + this[ENCODING] = null; + } + else if (isEncodingOptions(options)) { + this[ENCODING] = options.encoding; + this[OBJECTMODE] = false; + } + else { + this[OBJECTMODE] = false; + this[ENCODING] = null; + } + this[ASYNC] = !!options.async; + this[DECODER] = this[ENCODING] + ? new StringDecoder(this[ENCODING]) + : null; + //@ts-ignore - private option for debugging and testing + if (options && options.debugExposeBuffer === true) { + Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] }); + } + //@ts-ignore - private option for debugging and testing + if (options && options.debugExposePipes === true) { + Object.defineProperty(this, 'pipes', { get: () => this[PIPES] }); + } + const { signal } = options; + if (signal) { + this[SIGNAL] = signal; + if (signal.aborted) { + this[ABORT](); + } + else { + signal.addEventListener('abort', () => this[ABORT]()); + } + } + } + /** + * The amount of data stored in the buffer waiting to be read. + * + * For Buffer strings, this will be the total byte length. + * For string encoding streams, this will be the string character length, + * according to JavaScript's `string.length` logic. + * For objectMode streams, this is a count of the items waiting to be + * emitted. + */ + get bufferLength() { + return this[BUFFERLENGTH]; + } + /** + * The `BufferEncoding` currently in use, or `null` + */ + get encoding() { + return this[ENCODING]; + } + /** + * @deprecated - This is a read only property + */ + set encoding(_enc) { + throw new Error('Encoding must be set at instantiation time'); + } + /** + * @deprecated - Encoding may only be set at instantiation time + */ + setEncoding(_enc) { + throw new Error('Encoding must be set at instantiation time'); + } + /** + * True if this is an objectMode stream + */ + get objectMode() { + return this[OBJECTMODE]; + } + /** + * @deprecated - This is a read-only property + */ + set objectMode(_om) { + throw new Error('objectMode must be set at instantiation time'); + } + /** + * true if this is an async stream + */ + get ['async']() { + return this[ASYNC]; + } + /** + * Set to true to make this stream async. + * + * Once set, it cannot be unset, as this would potentially cause incorrect + * behavior. Ie, a sync stream can be made async, but an async stream + * cannot be safely made sync. + */ + set ['async'](a) { + this[ASYNC] = this[ASYNC] || !!a; + } + // drop everything and get out of the flow completely + [ABORT]() { + this[ABORTED] = true; + this.emit('abort', this[SIGNAL]?.reason); + this.destroy(this[SIGNAL]?.reason); + } + /** + * True if the stream has been aborted. + */ + get aborted() { + return this[ABORTED]; + } + /** + * No-op setter. Stream aborted status is set via the AbortSignal provided + * in the constructor options. + */ + set aborted(_) { } + write(chunk, encoding, cb) { + if (this[ABORTED]) + return false; + if (this[EOF]) + throw new Error('write after end'); + if (this[DESTROYED]) { + this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' })); + return true; + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = 'utf8'; + } + if (!encoding) + encoding = 'utf8'; + const fn = this[ASYNC] ? defer : nodefer; + // convert array buffers and typed array views into buffers + // at some point in the future, we may want to do the opposite! + // leave strings and buffers as-is + // anything is only allowed if in object mode, so throw + if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { + if (isArrayBufferView(chunk)) { + //@ts-ignore - sinful unsafe type changing + chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength); + } + else if (isArrayBufferLike(chunk)) { + //@ts-ignore - sinful unsafe type changing + chunk = Buffer.from(chunk); + } + else if (typeof chunk !== 'string') { + throw new Error('Non-contiguous data written to non-objectMode stream'); + } + } + // handle object mode up front, since it's simpler + // this yields better performance, fewer checks later. + if (this[OBJECTMODE]) { + // maybe impossible? + /* c8 ignore start */ + if (this[FLOWING] && this[BUFFERLENGTH] !== 0) + this[FLUSH](true); + /* c8 ignore stop */ + if (this[FLOWING]) + this.emit('data', chunk); + else + this[BUFFERPUSH](chunk); + if (this[BUFFERLENGTH] !== 0) + this.emit('readable'); + if (cb) + fn(cb); + return this[FLOWING]; + } + // at this point the chunk is a buffer or string + // don't buffer it up or send it to the decoder + if (!chunk.length) { + if (this[BUFFERLENGTH] !== 0) + this.emit('readable'); + if (cb) + fn(cb); + return this[FLOWING]; + } + // fast-path writing strings of same encoding to a stream with + // an empty buffer, skipping the buffer/decoder dance + if (typeof chunk === 'string' && + // unless it is a string already ready for us to use + !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) { + //@ts-ignore - sinful unsafe type change + chunk = Buffer.from(chunk, encoding); + } + if (Buffer.isBuffer(chunk) && this[ENCODING]) { + //@ts-ignore - sinful unsafe type change + chunk = this[DECODER].write(chunk); + } + // Note: flushing CAN potentially switch us into not-flowing mode + if (this[FLOWING] && this[BUFFERLENGTH] !== 0) + this[FLUSH](true); + if (this[FLOWING]) + this.emit('data', chunk); + else + this[BUFFERPUSH](chunk); + if (this[BUFFERLENGTH] !== 0) + this.emit('readable'); + if (cb) + fn(cb); + return this[FLOWING]; + } + /** + * Low-level explicit read method. + * + * In objectMode, the argument is ignored, and one item is returned if + * available. + * + * `n` is the number of bytes (or in the case of encoding streams, + * characters) to consume. If `n` is not provided, then the entire buffer + * is returned, or `null` is returned if no data is available. + * + * If `n` is greater that the amount of data in the internal buffer, + * then `null` is returned. + */ + read(n) { + if (this[DESTROYED]) + return null; + this[DISCARDED] = false; + if (this[BUFFERLENGTH] === 0 || + n === 0 || + (n && n > this[BUFFERLENGTH])) { + this[MAYBE_EMIT_END](); + return null; + } + if (this[OBJECTMODE]) + n = null; + if (this[BUFFER].length > 1 && !this[OBJECTMODE]) { + // not object mode, so if we have an encoding, then RType is string + // otherwise, must be Buffer + this[BUFFER] = [ + (this[ENCODING] + ? this[BUFFER].join('') + : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])), + ]; + } + const ret = this[READ](n || null, this[BUFFER][0]); + this[MAYBE_EMIT_END](); + return ret; + } + [READ](n, chunk) { + if (this[OBJECTMODE]) + this[BUFFERSHIFT](); + else { + const c = chunk; + if (n === c.length || n === null) + this[BUFFERSHIFT](); + else if (typeof c === 'string') { + this[BUFFER][0] = c.slice(n); + chunk = c.slice(0, n); + this[BUFFERLENGTH] -= n; + } + else { + this[BUFFER][0] = c.subarray(n); + chunk = c.subarray(0, n); + this[BUFFERLENGTH] -= n; + } + } + this.emit('data', chunk); + if (!this[BUFFER].length && !this[EOF]) + this.emit('drain'); + return chunk; + } + end(chunk, encoding, cb) { + if (typeof chunk === 'function') { + cb = chunk; + chunk = undefined; + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = 'utf8'; + } + if (chunk !== undefined) + this.write(chunk, encoding); + if (cb) + this.once('end', cb); + this[EOF] = true; + this.writable = false; + // if we haven't written anything, then go ahead and emit, + // even if we're not reading. + // we'll re-emit if a new 'end' listener is added anyway. + // This makes MP more suitable to write-only use cases. + if (this[FLOWING] || !this[PAUSED]) + this[MAYBE_EMIT_END](); + return this; + } + // don't let the internal resume be overwritten + [RESUME]() { + if (this[DESTROYED]) + return; + if (!this[DATALISTENERS] && !this[PIPES].length) { + this[DISCARDED] = true; + } + this[PAUSED] = false; + this[FLOWING] = true; + this.emit('resume'); + if (this[BUFFER].length) + this[FLUSH](); + else if (this[EOF]) + this[MAYBE_EMIT_END](); + else + this.emit('drain'); + } + /** + * Resume the stream if it is currently in a paused state + * + * If called when there are no pipe destinations or `data` event listeners, + * this will place the stream in a "discarded" state, where all data will + * be thrown away. The discarded state is removed if a pipe destination or + * data handler is added, if pause() is called, or if any synchronous or + * asynchronous iteration is started. + */ + resume() { + return this[RESUME](); + } + /** + * Pause the stream + */ + pause() { + this[FLOWING] = false; + this[PAUSED] = true; + this[DISCARDED] = false; + } + /** + * true if the stream has been forcibly destroyed + */ + get destroyed() { + return this[DESTROYED]; + } + /** + * true if the stream is currently in a flowing state, meaning that + * any writes will be immediately emitted. + */ + get flowing() { + return this[FLOWING]; + } + /** + * true if the stream is currently in a paused state + */ + get paused() { + return this[PAUSED]; + } + [BUFFERPUSH](chunk) { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] += 1; + else + this[BUFFERLENGTH] += chunk.length; + this[BUFFER].push(chunk); + } + [BUFFERSHIFT]() { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] -= 1; + else + this[BUFFERLENGTH] -= this[BUFFER][0].length; + return this[BUFFER].shift(); + } + [FLUSH](noDrain = false) { + do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && + this[BUFFER].length); + if (!noDrain && !this[BUFFER].length && !this[EOF]) + this.emit('drain'); + } + [FLUSHCHUNK](chunk) { + this.emit('data', chunk); + return this[FLOWING]; + } + /** + * Pipe all data emitted by this stream into the destination provided. + * + * Triggers the flow of data. + */ + pipe(dest, opts) { + if (this[DESTROYED]) + return dest; + this[DISCARDED] = false; + const ended = this[EMITTED_END]; + opts = opts || {}; + if (dest === proc.stdout || dest === proc.stderr) + opts.end = false; + else + opts.end = opts.end !== false; + opts.proxyErrors = !!opts.proxyErrors; + // piping an ended stream ends immediately + if (ended) { + if (opts.end) + dest.end(); + } + else { + // "as" here just ignores the WType, which pipes don't care about, + // since they're only consuming from us, and writing to the dest + this[PIPES].push(!opts.proxyErrors + ? new Pipe(this, dest, opts) + : new PipeProxyErrors(this, dest, opts)); + if (this[ASYNC]) + defer(() => this[RESUME]()); + else + this[RESUME](); + } + return dest; + } + /** + * Fully unhook a piped destination stream. + * + * If the destination stream was the only consumer of this stream (ie, + * there are no other piped destinations or `'data'` event listeners) + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + unpipe(dest) { + const p = this[PIPES].find(p => p.dest === dest); + if (p) { + if (this[PIPES].length === 1) { + if (this[FLOWING] && this[DATALISTENERS] === 0) { + this[FLOWING] = false; + } + this[PIPES] = []; + } + else + this[PIPES].splice(this[PIPES].indexOf(p), 1); + p.unpipe(); + } + } + /** + * Alias for {@link Minipass#on} + */ + addListener(ev, handler) { + return this.on(ev, handler); + } + /** + * Mostly identical to `EventEmitter.on`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * - Adding a 'data' event handler will trigger the flow of data + * + * - Adding a 'readable' event handler when there is data waiting to be read + * will cause 'readable' to be emitted immediately. + * + * - Adding an 'endish' event handler ('end', 'finish', etc.) which has + * already passed will cause the event to be emitted immediately and all + * handlers removed. + * + * - Adding an 'error' event handler after an error has been emitted will + * cause the event to be re-emitted immediately with the error previously + * raised. + */ + on(ev, handler) { + const ret = super.on(ev, handler); + if (ev === 'data') { + this[DISCARDED] = false; + this[DATALISTENERS]++; + if (!this[PIPES].length && !this[FLOWING]) { + this[RESUME](); + } + } + else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) { + super.emit('readable'); + } + else if (isEndish(ev) && this[EMITTED_END]) { + super.emit(ev); + this.removeAllListeners(ev); + } + else if (ev === 'error' && this[EMITTED_ERROR]) { + const h = handler; + if (this[ASYNC]) + defer(() => h.call(this, this[EMITTED_ERROR])); + else + h.call(this, this[EMITTED_ERROR]); + } + return ret; + } + /** + * Alias for {@link Minipass#off} + */ + removeListener(ev, handler) { + return this.off(ev, handler); + } + /** + * Mostly identical to `EventEmitter.off` + * + * If a 'data' event handler is removed, and it was the last consumer + * (ie, there are no pipe destinations or other 'data' event listeners), + * then the flow of data will stop until there is another consumer or + * {@link Minipass#resume} is explicitly called. + */ + off(ev, handler) { + const ret = super.off(ev, handler); + // if we previously had listeners, and now we don't, and we don't + // have any pipes, then stop the flow, unless it's been explicitly + // put in a discarded flowing state via stream.resume(). + if (ev === 'data') { + this[DATALISTENERS] = this.listeners('data').length; + if (this[DATALISTENERS] === 0 && + !this[DISCARDED] && + !this[PIPES].length) { + this[FLOWING] = false; + } + } + return ret; + } + /** + * Mostly identical to `EventEmitter.removeAllListeners` + * + * If all 'data' event handlers are removed, and they were the last consumer + * (ie, there are no pipe destinations), then the flow of data will stop + * until there is another consumer or {@link Minipass#resume} is explicitly + * called. + */ + removeAllListeners(ev) { + const ret = super.removeAllListeners(ev); + if (ev === 'data' || ev === undefined) { + this[DATALISTENERS] = 0; + if (!this[DISCARDED] && !this[PIPES].length) { + this[FLOWING] = false; + } + } + return ret; + } + /** + * true if the 'end' event has been emitted + */ + get emittedEnd() { + return this[EMITTED_END]; + } + [MAYBE_EMIT_END]() { + if (!this[EMITTING_END] && + !this[EMITTED_END] && + !this[DESTROYED] && + this[BUFFER].length === 0 && + this[EOF]) { + this[EMITTING_END] = true; + this.emit('end'); + this.emit('prefinish'); + this.emit('finish'); + if (this[CLOSED]) + this.emit('close'); + this[EMITTING_END] = false; + } + } + /** + * Mostly identical to `EventEmitter.emit`, with the following + * behavior differences to prevent data loss and unnecessary hangs: + * + * If the stream has been destroyed, and the event is something other + * than 'close' or 'error', then `false` is returned and no handlers + * are called. + * + * If the event is 'end', and has already been emitted, then the event + * is ignored. If the stream is in a paused or non-flowing state, then + * the event will be deferred until data flow resumes. If the stream is + * async, then handlers will be called on the next tick rather than + * immediately. + * + * If the event is 'close', and 'end' has not yet been emitted, then + * the event will be deferred until after 'end' is emitted. + * + * If the event is 'error', and an AbortSignal was provided for the stream, + * and there are no listeners, then the event is ignored, matching the + * behavior of node core streams in the presense of an AbortSignal. + * + * If the event is 'finish' or 'prefinish', then all listeners will be + * removed after emitting the event, to prevent double-firing. + */ + emit(ev, ...args) { + const data = args[0]; + // error and close are only events allowed after calling destroy() + if (ev !== 'error' && + ev !== 'close' && + ev !== DESTROYED && + this[DESTROYED]) { + return false; + } + else if (ev === 'data') { + return !this[OBJECTMODE] && !data + ? false + : this[ASYNC] + ? (defer(() => this[EMITDATA](data)), true) + : this[EMITDATA](data); + } + else if (ev === 'end') { + return this[EMITEND](); + } + else if (ev === 'close') { + this[CLOSED] = true; + // don't emit close before 'end' and 'finish' + if (!this[EMITTED_END] && !this[DESTROYED]) + return false; + const ret = super.emit('close'); + this.removeAllListeners('close'); + return ret; + } + else if (ev === 'error') { + this[EMITTED_ERROR] = data; + super.emit(ERROR, data); + const ret = !this[SIGNAL] || this.listeners('error').length + ? super.emit('error', data) + : false; + this[MAYBE_EMIT_END](); + return ret; + } + else if (ev === 'resume') { + const ret = super.emit('resume'); + this[MAYBE_EMIT_END](); + return ret; + } + else if (ev === 'finish' || ev === 'prefinish') { + const ret = super.emit(ev); + this.removeAllListeners(ev); + return ret; + } + // Some other unknown event + const ret = super.emit(ev, ...args); + this[MAYBE_EMIT_END](); + return ret; + } + [EMITDATA](data) { + for (const p of this[PIPES]) { + if (p.dest.write(data) === false) + this.pause(); + } + const ret = this[DISCARDED] ? false : super.emit('data', data); + this[MAYBE_EMIT_END](); + return ret; + } + [EMITEND]() { + if (this[EMITTED_END]) + return false; + this[EMITTED_END] = true; + this.readable = false; + return this[ASYNC] + ? (defer(() => this[EMITEND2]()), true) + : this[EMITEND2](); + } + [EMITEND2]() { + if (this[DECODER]) { + const data = this[DECODER].end(); + if (data) { + for (const p of this[PIPES]) { + p.dest.write(data); + } + if (!this[DISCARDED]) + super.emit('data', data); + } + } + for (const p of this[PIPES]) { + p.end(); + } + const ret = super.emit('end'); + this.removeAllListeners('end'); + return ret; + } + /** + * Return a Promise that resolves to an array of all emitted data once + * the stream ends. + */ + async collect() { + const buf = Object.assign([], { + dataLength: 0, + }); + if (!this[OBJECTMODE]) + buf.dataLength = 0; + // set the promise first, in case an error is raised + // by triggering the flow here. + const p = this.promise(); + this.on('data', c => { + buf.push(c); + if (!this[OBJECTMODE]) + buf.dataLength += c.length; + }); + await p; + return buf; + } + /** + * Return a Promise that resolves to the concatenation of all emitted data + * once the stream ends. + * + * Not allowed on objectMode streams. + */ + async concat() { + if (this[OBJECTMODE]) { + throw new Error('cannot concat in objectMode'); + } + const buf = await this.collect(); + return (this[ENCODING] + ? buf.join('') + : Buffer.concat(buf, buf.dataLength)); + } + /** + * Return a void Promise that resolves once the stream ends. + */ + async promise() { + return new Promise((resolve, reject) => { + this.on(DESTROYED, () => reject(new Error('stream destroyed'))); + this.on('error', er => reject(er)); + this.on('end', () => resolve()); + }); + } + /** + * Asynchronous `for await of` iteration. + * + * This will continue emitting all chunks until the stream terminates. + */ + [Symbol.asyncIterator]() { + // set this up front, in case the consumer doesn't call next() + // right away. + this[DISCARDED] = false; + let stopped = false; + const stop = async () => { + this.pause(); + stopped = true; + return { value: undefined, done: true }; + }; + const next = () => { + if (stopped) + return stop(); + const res = this.read(); + if (res !== null) + return Promise.resolve({ done: false, value: res }); + if (this[EOF]) + return stop(); + let resolve; + let reject; + const onerr = (er) => { + this.off('data', ondata); + this.off('end', onend); + this.off(DESTROYED, ondestroy); + stop(); + reject(er); + }; + const ondata = (value) => { + this.off('error', onerr); + this.off('end', onend); + this.off(DESTROYED, ondestroy); + this.pause(); + resolve({ value, done: !!this[EOF] }); + }; + const onend = () => { + this.off('error', onerr); + this.off('data', ondata); + this.off(DESTROYED, ondestroy); + stop(); + resolve({ done: true, value: undefined }); + }; + const ondestroy = () => onerr(new Error('stream destroyed')); + return new Promise((res, rej) => { + reject = rej; + resolve = res; + this.once(DESTROYED, ondestroy); + this.once('error', onerr); + this.once('end', onend); + this.once('data', ondata); + }); + }; + return { + next, + throw: stop, + return: stop, + [Symbol.asyncIterator]() { + return this; + }, + [Symbol.asyncDispose]: async () => { }, + }; + } + /** + * Synchronous `for of` iteration. + * + * The iteration will terminate when the internal buffer runs out, even + * if the stream has not yet terminated. + */ + [Symbol.iterator]() { + // set this up front, in case the consumer doesn't call next() + // right away. + this[DISCARDED] = false; + let stopped = false; + const stop = () => { + this.pause(); + this.off(ERROR, stop); + this.off(DESTROYED, stop); + this.off('end', stop); + stopped = true; + return { done: true, value: undefined }; + }; + const next = () => { + if (stopped) + return stop(); + const value = this.read(); + return value === null ? stop() : { done: false, value }; + }; + this.once('end', stop); + this.once(ERROR, stop); + this.once(DESTROYED, stop); + return { + next, + throw: stop, + return: stop, + [Symbol.iterator]() { + return this; + }, + [Symbol.dispose]: () => { }, + }; + } + /** + * Destroy a stream, preventing it from being used for any further purpose. + * + * If the stream has a `close()` method, then it will be called on + * destruction. + * + * After destruction, any attempt to write data, read data, or emit most + * events will be ignored. + * + * If an error argument is provided, then it will be emitted in an + * 'error' event. + */ + destroy(er) { + if (this[DESTROYED]) { + if (er) + this.emit('error', er); + else + this.emit(DESTROYED); + return this; + } + this[DESTROYED] = true; + this[DISCARDED] = true; + // throw away all buffered data, it's never coming out + this[BUFFER].length = 0; + this[BUFFERLENGTH] = 0; + const wc = this; + if (typeof wc.close === 'function' && !this[CLOSED]) + wc.close(); + if (er) + this.emit('error', er); + // if no error to emit, still reject pending promises + else + this.emit(DESTROYED); + return this; + } + /** + * Alias for {@link isStream} + * + * Former export location, maintained for backwards compatibility. + * + * @deprecated + */ + static get isStream() { + return isStream; + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/minipass/dist/esm/index.js.map b/node_modules/minipass/dist/esm/index.js.map new file mode 100644 index 00000000..4d87920c --- /dev/null +++ b/node_modules/minipass/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const proc =\n typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n s: any\n): s is Minipass.Readable | Minipass.Writable =>\n !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Readable).pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Writable).write === 'function' &&\n typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n /**\n * end the destination stream when the source stream ends\n */\n end?: boolean\n /**\n * proxy errors from the source stream to the destination stream\n */\n proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src: Minipass\n dest: Minipass\n opts: PipeOptions\n ondrain: () => any\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n this.src = src\n this.dest = dest as Minipass\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n this.dest.on('drain', this.ondrain)\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain)\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er: any) {}\n /* c8 ignore stop */\n end() {\n this.unpipe()\n if (this.opts.end) this.dest.end()\n }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor(\n src: Minipass,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n super(src, dest, opts)\n this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nexport namespace Minipass {\n /**\n * Encoding used to create a stream that outputs strings rather than\n * Buffer objects.\n */\n export type Encoding = BufferEncoding | 'buffer' | null\n\n /**\n * Any stream that Minipass can pipe into\n */\n export type Writable =\n | Minipass\n | NodeJS.WriteStream\n | (NodeJS.WriteStream & { fd: number })\n | (EventEmitter & {\n end(): any\n write(chunk: any, ...args: any[]): any\n })\n\n /**\n * Any stream that can be read from\n */\n export type Readable =\n | Minipass\n | NodeJS.ReadStream\n | (NodeJS.ReadStream & { fd: number })\n | (EventEmitter & {\n pause(): any\n resume(): any\n pipe(...destArgs: any[]): any\n })\n\n /**\n * Utility type that can be iterated sync or async\n */\n export type DualIterable = Iterable & AsyncIterable\n\n type EventArguments = Record\n\n /**\n * The listing of events that a Minipass class can emit.\n * Extend this when extending the Minipass class, and pass as\n * the third template argument. The key is the name of the event,\n * and the value is the argument list.\n *\n * Any undeclared events will still be allowed, but the handler will get\n * arguments as `unknown[]`.\n */\n export interface Events\n extends EventArguments {\n readable: []\n data: [chunk: RType]\n error: [er: unknown]\n abort: [reason: unknown]\n drain: []\n resume: []\n end: []\n finish: []\n prefinish: []\n close: []\n [DESTROYED]: [er?: unknown]\n [ERROR]: [er: unknown]\n }\n\n /**\n * String or buffer-like data that can be joined and sliced\n */\n export type ContiguousData =\n | Buffer\n | ArrayBufferLike\n | ArrayBufferView\n | string\n export type BufferOrString = Buffer | string\n\n /**\n * Options passed to the Minipass constructor.\n */\n export type SharedOptions = {\n /**\n * Defer all data emission and other events until the end of the\n * current tick, similar to Node core streams\n */\n async?: boolean\n /**\n * A signal which will abort the stream\n */\n signal?: AbortSignal\n /**\n * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n * emit Buffer objects rather than strings.\n *\n * Conflicts with `objectMode`\n */\n encoding?: BufferEncoding | null | 'buffer'\n /**\n * Output data exactly as it was written, supporting non-buffer/string\n * data (such as arbitrary objects, falsey values, etc.)\n *\n * Conflicts with `encoding`\n */\n objectMode?: boolean\n }\n\n /**\n * Options for a string encoded output\n */\n export type EncodingOptions = SharedOptions & {\n encoding: BufferEncoding\n objectMode?: false\n }\n\n /**\n * Options for contiguous data buffer output\n */\n export type BufferOptions = SharedOptions & {\n encoding?: null | 'buffer'\n objectMode?: false\n }\n\n /**\n * Options for objectMode arbitrary output\n */\n export type ObjectModeOptions = SharedOptions & {\n objectMode: true\n encoding?: null\n }\n\n /**\n * Utility type to determine allowed options based on read type\n */\n export type Options =\n | ObjectModeOptions\n | (T extends string\n ? EncodingOptions\n : T extends Buffer\n ? BufferOptions\n : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n RType extends unknown = Buffer,\n WType extends unknown = RType extends Minipass.BufferOrString\n ? Minipass.ContiguousData\n : RType,\n Events extends Minipass.Events = Minipass.Events\n >\n extends EventEmitter\n implements Minipass.DualIterable\n{\n [FLOWING]: boolean = false;\n [PAUSED]: boolean = false;\n [PIPES]: Pipe[] = [];\n [BUFFER]: RType[] = [];\n [OBJECTMODE]: boolean;\n [ENCODING]: BufferEncoding | null;\n [ASYNC]: boolean;\n [DECODER]: SD | null;\n [EOF]: boolean = false;\n [EMITTED_END]: boolean = false;\n [EMITTING_END]: boolean = false;\n [CLOSED]: boolean = false;\n [EMITTED_ERROR]: unknown = null;\n [BUFFERLENGTH]: number = 0;\n [DESTROYED]: boolean = false;\n [SIGNAL]?: AbortSignal;\n [ABORTED]: boolean = false;\n [DATALISTENERS]: number = 0;\n [DISCARDED]: boolean = false\n\n /**\n * true if the stream can be written\n */\n writable: boolean = true\n /**\n * true if the stream can be read\n */\n readable: boolean = true\n\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(\n ...args:\n | [Minipass.ObjectModeOptions]\n | (RType extends Buffer\n ? [] | [Minipass.Options]\n : [Minipass.Options])\n ) {\n const options: Minipass.Options = (args[0] ||\n {}) as Minipass.Options\n super()\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError(\n 'Encoding and objectMode may not be used together'\n )\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true\n this[ENCODING] = null\n } else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding\n this[OBJECTMODE] = false\n } else {\n this[OBJECTMODE] = false\n this[ENCODING] = null\n }\n this[ASYNC] = !!options.async\n this[DECODER] = this[ENCODING]\n ? (new StringDecoder(this[ENCODING]) as SD)\n : null\n\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n }\n\n const { signal } = options\n if (signal) {\n this[SIGNAL] = signal\n if (signal.aborted) {\n this[ABORT]()\n } else {\n signal.addEventListener('abort', () => this[ABORT]())\n }\n }\n }\n\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH]\n }\n\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING]\n }\n\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc: Minipass.Encoding) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE]\n }\n\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time')\n }\n\n /**\n * true if this is an async stream\n */\n get ['async'](): boolean {\n return this[ASYNC]\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a: boolean) {\n this[ASYNC] = this[ASYNC] || !!a\n }\n\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true\n this.emit('abort', this[SIGNAL]?.reason)\n this.destroy(this[SIGNAL]?.reason)\n }\n\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED]\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) {}\n\n /**\n * Write data into the stream\n *\n * If the chunk written is a string, and encoding is not specified, then\n * `utf8` will be assumed. If the stream encoding matches the encoding of\n * a written string, and the state of the string decoder allows it, then\n * the string will be passed through to either the output or the internal\n * buffer without any processing. Otherwise, it will be turned into a\n * Buffer object for processing into the desired encoding.\n *\n * If provided, `cb` function is called immediately before return for\n * sync streams, or on next tick for async streams, because for this\n * base class, a chunk is considered \"processed\" once it is accepted\n * and either emitted or buffered. That is, the callback does not indicate\n * that the chunk has been eventually emitted, though of course child\n * classes can override this function to do whatever processing is required\n * and call `super.write(...)` only once processing is completed.\n */\n write(chunk: WType, cb?: () => void): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding,\n cb?: () => void\n ): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): boolean {\n if (this[ABORTED]) return false\n if (this[EOF]) throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit(\n 'error',\n Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n )\n )\n return true\n }\n\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n\n if (!encoding) encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : nodefer\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(\n chunk.buffer,\n chunk.byteOffset,\n chunk.byteLength\n )\n } else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk)\n } else if (typeof chunk !== 'string') {\n throw new Error(\n 'Non-contiguous data written to non-objectMode stream'\n )\n }\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n /* c8 ignore stop */\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!(chunk as Minipass.BufferOrString).length) {\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n if (cb) fn(cb)\n return this[FLOWING]\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (\n typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n ) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk)\n }\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n?: number | null): RType | null {\n if (this[DESTROYED]) return null\n this[DISCARDED] = false\n\n if (\n this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])\n ) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE]) n = null\n\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(\n this[BUFFER] as Buffer[],\n this[BUFFERLENGTH]\n )) as RType,\n ]\n }\n\n const ret = this[READ](n || null, this[BUFFER][0] as RType)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ](n: number | null, chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n else {\n const c = chunk as Minipass.BufferOrString\n if (n === c.length || n === null) this[BUFFERSHIFT]()\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n) as RType\n chunk = c.slice(0, n) as RType\n this[BUFFERLENGTH] -= n\n } else {\n this[BUFFER][0] = c.subarray(n) as RType\n chunk = c.subarray(0, n) as RType\n this[BUFFERLENGTH] -= n\n }\n }\n\n this.emit('data', chunk)\n\n if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n return chunk\n }\n\n /**\n * End the stream, optionally providing a final write.\n *\n * See {@link Minipass#write} for argument descriptions\n */\n end(cb?: () => void): this\n end(chunk: WType, cb?: () => void): this\n end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n end(\n chunk?: WType | (() => void),\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): this {\n if (typeof chunk === 'function') {\n cb = chunk as () => void\n chunk = undefined\n }\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n if (chunk !== undefined) this.write(chunk, encoding)\n if (cb) this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED]) return\n\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true\n }\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this[BUFFER].length) this[FLUSH]()\n else if (this[EOF]) this[MAYBE_EMIT_END]()\n else this.emit('drain')\n }\n\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]()\n }\n\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false\n this[PAUSED] = true\n this[DISCARDED] = false\n }\n\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED]\n }\n\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING]\n }\n\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED]\n }\n\n [BUFFERPUSH](chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n this[BUFFER].push(chunk)\n }\n\n [BUFFERSHIFT](): RType {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= (\n this[BUFFER][0] as Minipass.BufferOrString\n ).length\n return this[BUFFER].shift() as RType\n }\n\n [FLUSH](noDrain: boolean = false) {\n do {} while (\n this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length\n )\n\n if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n }\n\n [FLUSHCHUNK](chunk: RType) {\n this.emit('data', chunk)\n return this[FLOWING]\n }\n\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest: W, opts?: PipeOptions): W {\n if (this[DESTROYED]) return dest\n this[DISCARDED] = false\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n else opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end) dest.end()\n } else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(\n !opts.proxyErrors\n ? new Pipe(this as Minipass, dest, opts)\n : new PipeProxyErrors(this as Minipass, dest, opts)\n )\n if (this[ASYNC]) defer(() => this[RESUME]())\n else this[RESUME]()\n }\n\n return dest\n }\n\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest: W) {\n const p = this[PIPES].find(p => p.dest === dest)\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false\n }\n this[PIPES] = []\n } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n p.unpipe()\n }\n }\n\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n return this.on(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n const ret = super.on(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n if (ev === 'data') {\n this[DISCARDED] = false\n this[DATALISTENERS]++\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]()\n }\n } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable')\n } else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler as (...a: Events['error']) => any\n if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n else h.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n return this.off(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n const ret = super.off(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length\n if (\n this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length\n ) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev?: Event) {\n const ret = super.removeAllListeners(ev as string | symbol | undefined)\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END]() {\n if (\n !this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]\n ) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED]) this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(\n ev: Event,\n ...args: Events[Event]\n ): boolean {\n const data = args[0]\n // error and close are only events allowed after calling destroy()\n if (\n ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]\n ) {\n return false\n } else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data as RType)), true)\n : this[EMITDATA](data as RType)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED]) return false\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n super.emit(ERROR, data)\n const ret =\n !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev as string, ...args)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA](data: RType) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data as RType) === false) this.pause()\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND]() {\n if (this[EMITTED_END]) return false\n\n this[EMITTED_END] = true\n this.readable = false\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]()\n }\n\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data as RType)\n }\n if (!this[DISCARDED]) super.emit('data', data)\n }\n }\n\n for (const p of this[PIPES]) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect(): Promise {\n const buf: RType[] & { dataLength: number } = Object.assign([], {\n dataLength: 0,\n })\n if (!this[OBJECTMODE]) buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += (c as Minipass.BufferOrString).length\n })\n await p\n return buf\n }\n\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat(): Promise {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode')\n }\n const buf = await this.collect()\n return (\n this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf as Buffer[], buf.dataLength)\n ) as RType\n }\n\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise(): Promise {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator](): AsyncGenerator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = async (): Promise> => {\n this.pause()\n stopped = true\n return { value: undefined, done: true }\n }\n const next = (): Promise> => {\n if (stopped) return stop()\n const res = this.read()\n if (res !== null) return Promise.resolve({ done: false, value: res })\n\n if (this[EOF]) return stop()\n\n let resolve!: (res: IteratorResult) => void\n let reject!: (er: unknown) => void\n const onerr = (er: unknown) => {\n this.off('data', ondata)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n stop()\n reject(er)\n }\n const ondata = (value: RType) => {\n this.off('error', onerr)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n this.pause()\n resolve({ value, done: !!this[EOF] })\n }\n const onend = () => {\n this.off('error', onerr)\n this.off('data', ondata)\n this.off(DESTROYED, ondestroy)\n stop()\n resolve({ done: true, value: undefined })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise>((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this\n },\n [Symbol.asyncDispose]: async () => {},\n }\n }\n\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator](): Generator {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = (): IteratorReturnResult => {\n this.pause()\n this.off(ERROR, stop)\n this.off(DESTROYED, stop)\n this.off('end', stop)\n stopped = true\n return { done: true, value: undefined }\n }\n\n const next = (): IteratorResult => {\n if (stopped) return stop()\n const value = this.read()\n return value === null ? stop() : { done: false, value }\n }\n\n this.once('end', stop)\n this.once(ERROR, stop)\n this.once(DESTROYED, stop)\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this\n },\n [Symbol.dispose]: () => {},\n }\n }\n\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er?: unknown) {\n if (this[DESTROYED]) {\n if (er) this.emit('error', er)\n else this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n this[DISCARDED] = true\n\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0\n this[BUFFERLENGTH] = 0\n\n const wc = this as Minipass & {\n close?: () => void\n }\n if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n if (er) this.emit('error', er)\n // if no error to emit, still reject pending promises\n else this.emit(DESTROYED)\n\n return this\n }\n\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/minipass/dist/esm/package.json b/node_modules/minipass/dist/esm/package.json new file mode 100644 index 00000000..3dbc1ca5 --- /dev/null +++ b/node_modules/minipass/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/minipass/package.json b/node_modules/minipass/package.json new file mode 100644 index 00000000..800f215c --- /dev/null +++ b/node_modules/minipass/package.json @@ -0,0 +1,77 @@ +{ + "name": "minipass", + "version": "7.1.3", + "description": "minimal implementation of a PassThrough stream", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "module": "./dist/esm/index.js", + "type": "module", + "tshy": { + "selfLink": false, + "compiler": "tsgo", + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/end-of-stream": "^1.4.2", + "@types/node": "^25.2.3", + "end-of-stream": "^1.4.0", + "node-abort-controller": "^3.1.1", + "prettier": "^3.8.1", + "tap": "^21.6.1", + "through2": "^2.0.3", + "tshy": "^3.3.2", + "typedoc": "^0.28.17" + }, + "repository": "https://github.com/isaacs/minipass", + "keywords": [ + "passthrough", + "stream" + ], + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } +} diff --git a/node_modules/moo/LICENSE b/node_modules/moo/LICENSE new file mode 100644 index 00000000..3810d823 --- /dev/null +++ b/node_modules/moo/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2017, Tim Radvan (tjvr) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/moo/README.md b/node_modules/moo/README.md new file mode 100644 index 00000000..52b985e3 --- /dev/null +++ b/node_modules/moo/README.md @@ -0,0 +1,383 @@ +![](cow.png) + +Moo! +==== + +Moo is a highly-optimised tokenizer/lexer generator. Use it to tokenize your strings, before parsing 'em with a parser like [nearley](https://github.com/hardmath123/nearley) or whatever else you're into. + +* [Fast](#is-it-fast) +* [Convenient](#usage) +* uses [Regular Expressions](#on-regular-expressions) +* tracks [Line Numbers](#line-numbers) +* handles [Keywords](#keywords) +* supports [States](#states) +* custom [Errors](#errors) +* is even [Iterable](#iteration) +* has no dependencies +* 4KB minified + gzipped +* Moo! + +Is it fast? +----------- + +Yup! Flying-cows-and-singed-steak fast. + +Moo is the fastest JS tokenizer around. It's **~2–10x** faster than most other tokenizers; it's a **couple orders of magnitude** faster than some of the slower ones. + +Define your tokens **using regular expressions**. Moo will compile 'em down to a **single RegExp for performance**. It uses the new ES6 **sticky flag** where possible to make things faster; otherwise it falls back to an almost-as-efficient workaround. (For more than you ever wanted to know about this, read [adventures in the land of substrings and RegExps](http://mrale.ph/blog/2016/11/23/making-less-dart-faster.html).) + +You _might_ be able to go faster still by writing your lexer by hand rather than using RegExps, but that's icky. + +Oh, and it [avoids parsing RegExps by itself](https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983#.2l8qu3l76). Because that would be horrible. + + +Usage +----- + +First, you need to do the needful: `$ npm install moo`, or whatever will ship this code to your computer. Alternatively, grab the `moo.js` file by itself and slap it into your web page via a ` + + + + +
{{ "%+010d"|sprintf:-123 }}
+
{{ "%+010d"|vsprintf:[-123] }}
+
{{ "%+010d"|fmt:-123 }}
+
{{ "%+010d"|vfmt:[-123] }}
+
{{ "I've got %2$d apples and %1$d oranges."|fmt:4:2 }}
+
{{ "I've got %(apples)d apples and %(oranges)d oranges."|fmt:{apples: 2, oranges: 4} }}
+ + + + diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js b/node_modules/sprintf-js/dist/angular-sprintf.min.js new file mode 100644 index 00000000..dbaf744d --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ + +angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(a){return a("sprintf")}]).filter("vsprintf",function(){return function(a,b){return vsprintf(a,b)}}).filter("vfmt",["$filter",function(a){return a("vsprintf")}]); +//# sourceMappingURL=angular-sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js.map b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map new file mode 100644 index 00000000..055964c6 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.map b/node_modules/sprintf-js/dist/angular-sprintf.min.map new file mode 100644 index 00000000..055964c6 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js b/node_modules/sprintf-js/dist/sprintf.min.js new file mode 100644 index 00000000..dc61e51a --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ + +!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[diefg]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":case"i":g=parseInt(g,10);break;case"j":g=JSON.stringify(g,null,j[6]?parseInt(j[6]):0);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"g":g=j[7]?parseFloat(g).toPrecision(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}e.json.test(j[8])?q[q.length]=g:(!e.number.test(j[8])||r&&!j[3]?s="":(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"===j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]&&m>0?d(l,m):"",q[q.length]=j[5]?s+g+k:"0"===l?s+k+g:k+s+g)}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); +//# sourceMappingURL=sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js.map b/node_modules/sprintf-js/dist/sprintf.min.js.map new file mode 100644 index 00000000..369dbafa --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.map b/node_modules/sprintf-js/dist/sprintf.min.map new file mode 100644 index 00000000..ee011aaa --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","toPrecision","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA+JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GAvLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,UACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKyB,YAAYtB,EAAM,IAAMoB,WAAWvB,EACxE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAI0B,UAAU,EAAGvB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAIgD,cAG3BxC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWiD,QAAQzC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAG0B,OAAO,GAAK,IACzEvB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAAS0D,GAErB,IADA,GAAIC,GAAOD,EAAK3B,KAAYL,KAAiBkC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC5B,EAAQhB,EAAGK,KAAKyC,KAAKF,IACtBjC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOwC,KAAKF,IAC7BjC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYuC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI/B,EAAM,GAAI,CACV6B,GAAa,CACb,IAAIG,MAAiBC,EAAoBjC,EAAM,GAAIkC,IACnD,IAAuD,QAAlDA,EAAclD,EAAGnB,IAAIiE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAW1B,QAAU4B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG5B,UACnE,GAA8D,QAAzD4B,EAAclD,EAAGQ,WAAWsC,KAAKG,IAClCD,EAAWA,EAAW1B,QAAU4B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAclD,EAAGS,aAAaqC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAW1B,QAAU4B,EAAY,GAUxDlC,EAAM,GAAKgC,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAInB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC4B,EAAOA,EAAKL,UAAUvB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIwC,GAAW,SAASR,EAAK/B,EAAMwC,GAG/B,MAFAA,IAASxC,OAAYnB,MAAM,GAC3B2D,EAAMC,OAAO,EAAG,EAAGV,GACZ/D,EAAQ0E,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ3E,QAAUA,EAClB2E,QAAQJ,SAAWA,IAGnBxE,EAAOC,QAAUA,EACjBD,EAAOwE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI5E,QAASA,EACTuE,SAAUA,OAKT,mBAAXxE,QAAyB+E,KAAO/E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/gruntfile.js b/node_modules/sprintf-js/gruntfile.js new file mode 100644 index 00000000..246e1c3b --- /dev/null +++ b/node_modules/sprintf-js/gruntfile.js @@ -0,0 +1,36 @@ +module.exports = function(grunt) { + grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + + uglify: { + options: { + banner: "/*! <%= pkg.name %> | <%= pkg.author %> | <%= pkg.license %> */\n", + sourceMap: true + }, + build: { + files: [ + { + src: "src/sprintf.js", + dest: "dist/sprintf.min.js" + }, + { + src: "src/angular-sprintf.js", + dest: "dist/angular-sprintf.min.js" + } + ] + } + }, + + watch: { + js: { + files: "src/*.js", + tasks: ["uglify"] + } + } + }) + + grunt.loadNpmTasks("grunt-contrib-uglify") + grunt.loadNpmTasks("grunt-contrib-watch") + + grunt.registerTask("default", ["uglify", "watch"]) +} diff --git a/node_modules/sprintf-js/package.json b/node_modules/sprintf-js/package.json new file mode 100644 index 00000000..75f7eca7 --- /dev/null +++ b/node_modules/sprintf-js/package.json @@ -0,0 +1,22 @@ +{ + "name": "sprintf-js", + "version": "1.0.3", + "description": "JavaScript sprintf implementation", + "author": "Alexandru Marasteanu (http://alexei.ro/)", + "main": "src/sprintf.js", + "scripts": { + "test": "mocha test/test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/alexei/sprintf.js.git" + }, + "license": "BSD-3-Clause", + "readmeFilename": "README.md", + "devDependencies": { + "mocha": "*", + "grunt": "*", + "grunt-contrib-watch": "*", + "grunt-contrib-uglify": "*" + } +} diff --git a/node_modules/sprintf-js/src/angular-sprintf.js b/node_modules/sprintf-js/src/angular-sprintf.js new file mode 100644 index 00000000..9c69123b --- /dev/null +++ b/node_modules/sprintf-js/src/angular-sprintf.js @@ -0,0 +1,18 @@ +angular. + module("sprintf", []). + filter("sprintf", function() { + return function() { + return sprintf.apply(null, arguments) + } + }). + filter("fmt", ["$filter", function($filter) { + return $filter("sprintf") + }]). + filter("vsprintf", function() { + return function(format, argv) { + return vsprintf(format, argv) + } + }). + filter("vfmt", ["$filter", function($filter) { + return $filter("vsprintf") + }]) diff --git a/node_modules/sprintf-js/src/sprintf.js b/node_modules/sprintf-js/src/sprintf.js new file mode 100644 index 00000000..c0fc7c08 --- /dev/null +++ b/node_modules/sprintf-js/src/sprintf.js @@ -0,0 +1,208 @@ +(function(window) { + var re = { + not_string: /[^s]/, + number: /[diefg]/, + json: /[j]/, + not_json: /[^j]/, + text: /^[^\x25]+/, + modulo: /^\x25{2}/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + key: /^([a-z_][a-z_\d]*)/i, + key_access: /^\.([a-z_][a-z_\d]*)/i, + index_access: /^\[(\d+)\]/, + sign: /^[\+\-]/ + } + + function sprintf() { + var key = arguments[0], cache = sprintf.cache + if (!(cache[key] && cache.hasOwnProperty(key))) { + cache[key] = sprintf.parse(key) + } + return sprintf.format.call(null, cache[key], arguments) + } + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]) + if (node_type === "string") { + output[output.length] = parse_tree[i] + } + else if (node_type === "array") { + match = parse_tree[i] // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor] + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + } + arg = arg[match[2][k]] + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]] + } + else { // positional argument (implicit) + arg = argv[cursor++] + } + + if (get_type(arg) == "function") { + arg = arg() + } + + if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + } + + if (re.number.test(match[8])) { + is_positive = arg >= 0 + } + + switch (match[8]) { + case "b": + arg = arg.toString(2) + break + case "c": + arg = String.fromCharCode(arg) + break + case "d": + case "i": + arg = parseInt(arg, 10) + break + case "j": + arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) + break + case "e": + arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + break + case "f": + arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) + break + case "g": + arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) + break + case "o": + arg = arg.toString(8) + break + case "s": + arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + break + case "u": + arg = arg >>> 0 + break + case "x": + arg = arg.toString(16) + break + case "X": + arg = arg.toString(16).toUpperCase() + break + } + if (re.json.test(match[8])) { + output[output.length] = arg + } + else { + if (re.number.test(match[8]) && (!is_positive || match[3])) { + sign = is_positive ? "+" : "-" + arg = arg.toString().replace(re.sign, "") + } + else { + sign = "" + } + pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_length = match[6] - (sign + arg).length + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" + output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + } + } + } + return output.join("") + } + + sprintf.cache = {} + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + while (_fmt) { + if ((match = re.text.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = match[0] + } + else if ((match = re.modulo.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = "%" + } + else if ((match = re.placeholder.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1 + var field_list = [], replacement_field = match[2], field_match = [] + if ((field_match = re.key.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + if ((field_match = re.key_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else if ((field_match = re.index_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + } + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + match[2] = field_list + } + else { + arg_names |= 2 + } + if (arg_names === 3) { + throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + } + parse_tree[parse_tree.length] = match + } + else { + throw new SyntaxError("[sprintf] unexpected placeholder") + } + _fmt = _fmt.substring(match[0].length) + } + return parse_tree + } + + var vsprintf = function(fmt, argv, _argv) { + _argv = (argv || []).slice(0) + _argv.splice(0, 0, fmt) + return sprintf.apply(null, _argv) + } + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } + + function str_repeat(input, multiplier) { + return Array(multiplier + 1).join(input) + } + + /** + * export to either browser or node.js + */ + if (typeof exports !== "undefined") { + exports.sprintf = sprintf + exports.vsprintf = vsprintf + } + else { + window.sprintf = sprintf + window.vsprintf = vsprintf + + if (typeof define === "function" && define.amd) { + define(function() { + return { + sprintf: sprintf, + vsprintf: vsprintf + } + }) + } + } +})(typeof window === "undefined" ? this : window); diff --git a/node_modules/sprintf-js/test/test.js b/node_modules/sprintf-js/test/test.js new file mode 100644 index 00000000..6f57b253 --- /dev/null +++ b/node_modules/sprintf-js/test/test.js @@ -0,0 +1,82 @@ +var assert = require("assert"), + sprintfjs = require("../src/sprintf.js"), + sprintf = sprintfjs.sprintf, + vsprintf = sprintfjs.vsprintf + +describe("sprintfjs", function() { + var pi = 3.141592653589793 + + it("should return formated strings for simple placeholders", function() { + assert.equal("%", sprintf("%%")) + assert.equal("10", sprintf("%b", 2)) + assert.equal("A", sprintf("%c", 65)) + assert.equal("2", sprintf("%d", 2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("2", sprintf("%d", "2")) + assert.equal("2", sprintf("%i", "2")) + assert.equal('{"foo":"bar"}', sprintf("%j", {foo: "bar"})) + assert.equal('["foo","bar"]', sprintf("%j", ["foo", "bar"])) + assert.equal("2e+0", sprintf("%e", 2)) + assert.equal("2", sprintf("%u", 2)) + assert.equal("4294967294", sprintf("%u", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("3.141592653589793", sprintf("%g", pi)) + assert.equal("10", sprintf("%o", 8)) + assert.equal("%s", sprintf("%s", "%s")) + assert.equal("ff", sprintf("%x", 255)) + assert.equal("FF", sprintf("%X", 255)) + assert.equal("Polly wants a cracker", sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")) + assert.equal("Hello world!", sprintf("Hello %(who)s!", {"who": "world"})) + }) + + it("should return formated strings for complex placeholders", function() { + // sign + assert.equal("2", sprintf("%d", 2)) + assert.equal("-2", sprintf("%d", -2)) + assert.equal("+2", sprintf("%+d", 2)) + assert.equal("-2", sprintf("%+d", -2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("-2", sprintf("%i", -2)) + assert.equal("+2", sprintf("%+i", 2)) + assert.equal("-2", sprintf("%+i", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("-2.2", sprintf("%f", -2.2)) + assert.equal("+2.2", sprintf("%+f", 2.2)) + assert.equal("-2.2", sprintf("%+f", -2.2)) + assert.equal("-2.3", sprintf("%+.1f", -2.34)) + assert.equal("-0.0", sprintf("%+.1f", -0.01)) + assert.equal("3.14159", sprintf("%.6g", pi)) + assert.equal("3.14", sprintf("%.3g", pi)) + assert.equal("3", sprintf("%.1g", pi)) + assert.equal("-000000123", sprintf("%+010d", -123)) + assert.equal("______-123", sprintf("%+'_10d", -123)) + assert.equal("-234.34 123.2", sprintf("%f %f", -234.34, 123.2)) + + // padding + assert.equal("-0002", sprintf("%05d", -2)) + assert.equal("-0002", sprintf("%05i", -2)) + assert.equal(" <", sprintf("%5s", "<")) + assert.equal("0000<", sprintf("%05s", "<")) + assert.equal("____<", sprintf("%'_5s", "<")) + assert.equal("> ", sprintf("%-5s", ">")) + assert.equal(">0000", sprintf("%0-5s", ">")) + assert.equal(">____", sprintf("%'_-5s", ">")) + assert.equal("xxxxxx", sprintf("%5s", "xxxxxx")) + assert.equal("1234", sprintf("%02u", 1234)) + assert.equal(" -10.235", sprintf("%8.3f", -10.23456)) + assert.equal("-12.34 xxx", sprintf("%f %s", -12.34, "xxx")) + assert.equal('{\n "foo": "bar"\n}', sprintf("%2j", {foo: "bar"})) + assert.equal('[\n "foo",\n "bar"\n]', sprintf("%2j", ["foo", "bar"])) + + // precision + assert.equal("2.3", sprintf("%.1f", 2.345)) + assert.equal("xxxxx", sprintf("%5.5s", "xxxxxx")) + assert.equal(" x", sprintf("%5.1s", "xxxxxx")) + + }) + + it("should return formated strings for callbacks", function() { + assert.equal("foobar", sprintf("%s", function() { return "foobar" })) + assert.equal(Date.now(), sprintf("%s", Date.now)) // should pass... + }) +}) diff --git a/node_modules/ssri/LICENSE.md b/node_modules/ssri/LICENSE.md new file mode 100644 index 00000000..e3353888 --- /dev/null +++ b/node_modules/ssri/LICENSE.md @@ -0,0 +1,16 @@ +ISC License + +Copyright 2021 (c) npm, Inc. + +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted, provided that the +above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +COPYRIGHT HOLDER 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. diff --git a/node_modules/ssri/README.md b/node_modules/ssri/README.md new file mode 100644 index 00000000..6f46aa5b --- /dev/null +++ b/node_modules/ssri/README.md @@ -0,0 +1,528 @@ +# ssri [![npm version](https://img.shields.io/npm/v/ssri.svg)](https://npm.im/ssri) [![license](https://img.shields.io/npm/l/ssri.svg)](https://npm.im/ssri) [![Travis](https://img.shields.io/travis/npm/ssri.svg)](https://travis-ci.org/npm/ssri) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/npm/ssri?svg=true)](https://ci.appveyor.com/project/npm/ssri) [![Coverage Status](https://coveralls.io/repos/github/npm/ssri/badge.svg?branch=latest)](https://coveralls.io/github/npm/ssri?branch=latest) + +[`ssri`](https://github.com/npm/ssri), short for Standard Subresource +Integrity, is a Node.js utility for parsing, manipulating, serializing, +generating, and verifying [Subresource +Integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) hashes. + +## Install + +`$ npm install --save ssri` + +## Table of Contents + +* [Example](#example) +* [Features](#features) +* [Contributing](#contributing) +* [API](#api) + * Parsing & Serializing + * [`parse`](#parse) + * [`stringify`](#stringify) + * [`Integrity#concat`](#integrity-concat) + * [`Integrity#merge`](#integrity-merge) + * [`Integrity#toString`](#integrity-to-string) + * [`Integrity#toJSON`](#integrity-to-json) + * [`Integrity#match`](#integrity-match) + * [`Integrity#pickAlgorithm`](#integrity-pick-algorithm) + * [`Integrity#hexDigest`](#integrity-hex-digest) + * Integrity Generation + * [`fromHex`](#from-hex) + * [`fromData`](#from-data) + * [`fromStream`](#from-stream) + * [`create`](#create) + * Integrity Verification + * [`checkData`](#check-data) + * [`checkStream`](#check-stream) + * [`integrityStream`](#integrity-stream) + +### Example + +```javascript +const ssri = require('ssri') + +const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' + +// Parsing and serializing +const parsed = ssri.parse(integrity) +ssri.stringify(parsed) // === integrity (works on non-Integrity objects) +parsed.toString() // === integrity + +// Async stream functions +ssri.checkStream(fs.createReadStream('./my-file'), integrity).then(...) +ssri.fromStream(fs.createReadStream('./my-file')).then(sri => { + sri.toString() === integrity +}) +fs.createReadStream('./my-file').pipe(ssri.createCheckerStream(sri)) + +// Sync data functions +ssri.fromData(fs.readFileSync('./my-file')) // === parsed +ssri.checkData(fs.readFileSync('./my-file'), integrity) // => 'sha512' +``` + +### Features + +* Parses and stringifies SRI strings. +* Generates SRI strings from raw data or Streams. +* Strict standard compliance. +* `?foo` metadata option support. +* Multiple entries for the same algorithm. +* Object-based integrity hash manipulation. +* Small footprint: no dependencies, concise implementation. +* Full test coverage. +* Customizable algorithm picker. + +### Contributing + +The ssri team enthusiastically welcomes contributions and project participation! +There's a bunch of things you can do if you want to contribute! The [Contributor +Guide](CONTRIBUTING.md) has all the information you need for everything from +reporting bugs to contributing entire new features. Please don't hesitate to +jump in if you'd like to, or even ask us questions if something isn't clear. + +### API + +#### `> ssri.parse(sri, [opts]) -> Integrity` + +Parses `sri` into an `Integrity` data structure. `sri` can be an integrity +string, an `Hash`-like with `digest` and `algorithm` fields and an optional +`options` field, or an `Integrity`-like object. The resulting object will be an +`Integrity` instance that has this shape: + +```javascript +{ + 'sha1': [{algorithm: 'sha1', digest: 'deadbeef', options: []}], + 'sha512': [ + {algorithm: 'sha512', digest: 'c0ffee', options: []}, + {algorithm: 'sha512', digest: 'bad1dea', options: ['foo']} + ], +} +``` + +If `opts.single` is truthy, a single `Hash` object will be returned. That is, a +single object that looks like `{algorithm, digest, options}`, as opposed to a +larger object with multiple of these. + +If `opts.strict` is truthy, the resulting object will be filtered such that +it strictly follows the Subresource Integrity spec, throwing away any entries +with any invalid components. This also means a restricted set of algorithms +will be used -- the spec limits them to `sha256`, `sha384`, and `sha512`. + +Strict mode is recommended if the integrity strings are intended for use in +browsers, or in other situations where strict adherence to the spec is needed. + +##### Example + +```javascript +ssri.parse('sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo') // -> Integrity object +``` + +#### `> ssri.stringify(sri, [opts]) -> String` + +This function is identical to [`Integrity#toString()`](#integrity-to-string), +except it can be used on _any_ object that [`parse`](#parse) can handle -- that +is, a string, an `Hash`-like, or an `Integrity`-like. + +The `opts.sep` option defines the string to use when joining multiple entries +together. To be spec-compliant, this _must_ be whitespace. The default is a +single space (`' '`). + +If `opts.strict` is true, the integrity string will be created using strict +parsing rules. See [`ssri.parse`](#parse). + +##### Example + +```javascript +// Useful for cleaning up input SRI strings: +ssri.stringify('\n\rsha512-foo\n\t\tsha384-bar') +// -> 'sha512-foo sha384-bar' + +// Hash-like: only a single entry. +ssri.stringify({ + algorithm: 'sha512', + digest:'9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==', + options: ['foo'] +}) +// -> +// 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' + +// Integrity-like: full multi-entry syntax. Similar to output of `ssri.parse` +ssri.stringify({ + 'sha512': [ + { + algorithm: 'sha512', + digest:'9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==', + options: ['foo'] + } + ] +}) +// -> +// 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo' +``` + +#### `> Integrity#concat(otherIntegrity, [opts]) -> Integrity` + +Concatenates an `Integrity` object with another IntegrityLike, or an integrity +string. + +This is functionally equivalent to concatenating the string format of both +integrity arguments, and calling [`ssri.parse`](#ssri-parse) on the new string. + +If `opts.strict` is true, the new `Integrity` will be created using strict +parsing rules. See [`ssri.parse`](#parse). + +##### Example + +```javascript +// This will combine the integrity checks for two different versions of +// your index.js file so you can use a single integrity string and serve +// either of these to clients, from a single `

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 PT&hRiMFN`i=jZo@vBzt-xu$--_0k^ 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 PT&hRiMFN`i=jZo@vBzt-xu$--_0k^ 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